- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我之前使用 gitlab runner 的 shell 来构建我的项目。到目前为止,我已经设置了管道,它将运行我在如下所示的 gitlab-ci.yml 文件中设置的任何命令:
gitlab-ci.yml 使用 shell runner
before_script:
- npm install
- npm install --save @angular/material @angular/cdk
cache:
paths:
- node_modules/
stages:
- dev
- staging
- production
build_dev:
stage: dev
script:
- rm ./package-lock.json
- npm run build
- ./node_modules/@angular/cli/bin/ng test --browsers PhantomJS --watch false
现在,我想切换到 docker 镜像。我已重新配置运行程序以使用 docker 图像,并在如下所示的新 gitlab-ci.yml 文件中指定了该图像。我遵循了 gitlab-ci docker 教程,这是它停止的地方,所以我不完全确定从这里去哪里:
gitlab-ci.yml 使用 docker runner
image: node:8.10.0
before_script:
- npm install
- npm install --save @angular/material @angular/cdk
cache:
paths:
- node_modules/
stages:
- dev
- staging
- production
build_dev:
stage: dev
script:
- rm ./package-lock.json
- npm run build
- ./node_modules/@angular/cli/bin/ng test --browsers PhantomJS --watch false
问题:
使用我当前的 gitlab-ci.yml 文件,这如何构建一个 docker 镜像/它甚至可以构建一个吗?如果是,那是什么意思?目前管道通过了,但我不知道它是否在 docker 镜像中通过了(我应该能够分辨出来吗?)。
另外,假设 docker 镜像已创建,运行测试,管道通过;它应该将代码推送到新的存储库(尚未包含在 yml 文件中)。从我收集到的信息来看,图像没有被推送,它只是代码,对吧?那么我该如何处理这个创建的 docker 镜像呢?
如何使用 Dockerfile?我看不到 gitlab-ci.yml 文件和 Dockerfile 之间的链接。
我是否需要将gitlab-ci.yml 文件中的所有命令包围在docker run <commands>
中?或 docker exec <commands>
?如果不包含这两个命令之一,它似乎只会在服务器上运行,而不是在 docker 镜像中运行。
我见过有人在 gitlab-ci.yml 文件和 Dockerfile 中指定一个图像。我有一个角度项目,我指定了 image: node:8.10.0
的图像.在 Dockerfile 中,我应该指定相同的图像吗?我见过一些完全不同的项目,我想知道这两个图像的用途是什么/如果选择一个图像而不是另一个图像会严重影响我的构建。
最佳答案
如果你想完全 docker 化它,你必须采取不同的方法来构建你的应用程序。将有角度的东西导出到 Dockerfile 并在 .gitlab-ci
中获取 docker 操作,而不是像这里这样的有角度的东西:
stages:
- build
# - release
# - deploy
.build_template: &build_definition
stage: build
image: docker:17.06
services:
- docker:17.06-dind
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker pull $CONTAINER_RELEASE_IMAGE || true
- docker build --cache-from $CONTAINER_RELEASE_IMAGE -t $CONTAINER_IMAGE -f $DOCKERFILE ./
- docker push $CONTAINER_IMAGE
build_app_job:
<<: *build_definition
variables:
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/app:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/app:latest
DOCKERFILE: ./Dockerfile.app
build_nginx_job:
<<: *build_definition
variables:
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/nginx:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/nginx:latest
DOCKERFILE: ./Dockerfile
您可以设置一些构建作业 - 用于生产、开发、暂存等。在您的 .gitlab-ci.yaml
旁边,您可以放置 Dockerfile
和 Dockerfile.app
- Dockerfile.app 代表构建您的角度应用程序:
FROM node:10.5.0-stretch
RUN mkdir -p /usr/src/app
RUN mkdir -p /usr/src/remote
WORKDIR /usr/src/app
COPY . .
# do your commands here
现在您的应用程序已构建,可以通过网络服务器提供服务 - 这是您的选择,每个选择都会有不同的配置 - 这里甚至不能触及表面。这将在 Dockerfile
中实现 - 我们通常在我们公司使用 Nginx。
从这里开始,就是发布您的图像并部署它们。我只指定了如何在 docker 中构建它们,因为这似乎就是问题所在。
如果您想部署您的图像并在某个地方运行它 - 选择一个提供商 - AWS、Heroku、自己的基础设施 - 随心所欲,但这太多了,无法在一个答案中涵盖所有这些,所以我会离开当您指定要在哪里部署新构建的图像以及如何提供服务时,它会成为另一个问题。在我们公司,我们使用 Rancher 进行协调,但市场上有多种很棒且相互竞争的选择。
编辑自定义注册表
上面的 .gitlab-ci
配置仅适用于 Gitlab 的“内部”注册表,如果您想使用自己的注册表,请相应地更改值:
#previous configs
script:
- docker login -u mysecretlogin -p mysecretpasswd registry.local.com
# further configs
-u gitlab-ci-token
到您在注册表中的登录,$CI_JOB_TOKEN
到您的密码 $CI_REGISTRY
到您的注册表地址这些值应该存储在 Gitlab 的 CI secret variables
中,并通过 env 变量引用,这样它们就不会保存在存储库中。
最后,如果您决定保护这些值,您的脚本可能如下所示。引用Gitlab的official docs on how to add secret CI variables - super 简单的任务。
#previous configs
script:
- docker login -u $registrylogin -p $registrypasswd $registryaddress
# further configs
关于docker - 将 docker 与 gitlab-ci 集成——如何构建和使用 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51194769/
我需要将 OCI 镜像 list 转换为 Docker v2.2 镜像格式,反之亦然。但我找不到两者之间的任何区别,是否有任何实际区别或它们相同? 最佳答案 Docker 镜像 list V 2,模式
LNMP 是代表 Linux 系统下的 Nginx、Mariadb、PHP 相结合而构建成的动态网站服务器架构。下面使用docker制作分布式lnmp 镜像。 1、docker 分布式 lnmp
你好,我创建了一个基础镜像;但是,每当我运行 docker build . 时,我都看不到成功构建 我的 docker 文件 FROM centos:7 ARG user=john ARG home=
我想要我的 iPhone 应用程序中有一个功能,可以将图像转换为类似镜像的方式。 就像如果有一个左手举起的人的图像,那么转换后的图像必须有右手举起的同一个人。 任何代码或链接将不胜感激 预先感谢您的帮
我们希望将一个Elasticsearch集群放置在kubernetes集群的顶部(当前有2个节点,但是我们计划增加它)。 是否可以通过使集群中的每个节点包含相同数据的方式配置elasticsearch
我试图了解 docker 如何在文件系统上存储图像和图层。构建图像时,图层出现在 /var/lib/docker/image/overlay2/layerdb 中,图像出现在 /var/lib/doc
所以我最近开始使用 docker,因为我认为让我的网站 dockerised 会很好。我有一个 super 简单的 docker-compose.yml 文件,其中仅包含 wordpress:late
我有一个 docker 镜像,叫它 dockerimage/test。每次我更新它时,我都会增加一个标签,所以 dockerimage/test:1、dockerimage/test:2 等等。 当我
我开始使用 Docker,我发现我可以将主图像存储库放在不同的磁盘上(符号链接(symbolic link)/var/lib/docker 到其他位置)。 但是,现在我想看看是否有办法将它拆分到多个磁
显然应用程序打包和部署似乎有两种做法 创建 Docker 镜像并部署它 从头开始构建和部署应用程序。 我对如何使用选项 1) 感到困惑。前提是你获取一个 docker 镜像并在任何平台上重复使用它。但
我有一个 UIView具有透明背景和一些按钮。我想捕获 View 的绘图,将其缩小,然后在屏幕上的其他位置重新绘制(镜像)它。 (在另一个 View 之上。)按钮可以更改,因此它不是静态的。 最好的方
我正在为一个项目编写测试,我想测试和验证一个 docker 镜像构建。但我不想推送图像。 我希望图像构建在 CI(如 taskcluster)上并运行测试。 最佳答案 您需要使用 taskcluste
我想复制每个 html 页面中的代码,同时添加一些更改: 例子: Any text (even if includes :., 输出: Any text (even if includes :.,
我使用三星 ARM Cortex A9 Exynos4412 板。我在板上启动“linux + Qt”img。但是板上没有包管理器,也没有 make 、 gcc 命令。在/bin 文件中有文件 Bus
是否有可能以某种方式设置一个 git 存储库,该存储库像通常的 --mirror 一样用于 pull 入它,但在将从推送到另一个存储库时没有强制? 最佳答案 您可以像这样添加 --no-force 来
背景 最近在巡检过程中,发现harbor存储空间使用率已经达到了80%。于是,去看了一下各项目下的镜像标签数。发现有个别项目下的镜像标签数竟然有好几百个。细问之下得知,该项目目前处于调试阶段
以下均在centos 7进行的操作 docker安装 ? 1
我知道如何删除 N 天前创建的旧 Docker 镜像。 See here 但我真正想做的是删除过去 N 天未使用的旧 Docker 镜像。 目标是保留经常使用的图像,即使在我进行清理时没有容器实际使用
我有一个自定义的 docker 镜像,已经构建好了。没有可用的 Dockerfile。在容器内部,可以使用自定义用户,而不是 root,比如 test。此用户已附加到组 test。这是容器的默认用户。
我有一个开发数据库,我想将其提交到 docker 镜像中,然后推送到私有(private)存储库并用于本地开发和 CI 构建。 数据库保存为SQL备份,我可以通过将备份文件映射到官方镜像的/doc
我是一名优秀的程序员,十分优秀!