0

我正在运行带有 GitLab 运行器和 Docker 执行器的自托管 GitLab CE。我想为 AWS Lambda 构建一个二进制文件,因此我将 amazonlinux:latest 映像用于我的 Docker 执行程序。

当然,并非我构建所需的所有软件包都在基础 amazonlinux 映像中可用,因此我通过 yum 安装它们。不幸的是,cmake 不适用于 Amazon Linux,所以我从源代码构建它。

目前,每次管道运行时都会发生这种情况,这不是最佳的,因为 cmake 需要相对较长的时间来构建(与我实际想要构建的二进制文件相比)。

我的一般问题是:是否有一种干净且可重复的方法来准备构建图像,然后将其用作 GitLab CI 的基础图像?由于我对 Docker 和朋友比较陌生,在运行程序主机上本地创建映像并在我的 gitlab-ci.yml 中使用它的正确方法是什么?或者我应该把它放在一个注册表中(甚至可能是 GitLab 自己的容器注册表?)

4

1 回答 1

2

就在这里。

没有什么能阻止您通过 Dockerfile 创建映像,该文件执行所有 yum 安装,然后将您构建的映像推送到(私有)Docker 注册表。将其视为“扩展”亚马逊图像并将其保存以备将来使用。

由于我不希望它退出(它还不包含任何应用程序代码),您也可以将它免费存储在Docker Hub上。

自定义图片

所以一个例子Dockerfile

FROM amazonlinux:latest

RUN yum install <packages>
RUN <commands for cmake>

然后,您amazonlinux-custom使用以下命令构建自定义图像:

docker build -t mydockerhubuser/amazonlinux-custom:latest .

并将其推送到 Docker Hub(之后docker login):

docker push mydockerhubuser/amazonlinux-custom:latest

Gitlab CI 使用

在你的.gitlab-ci.yml你替换image: amazonlinux:latest定义你的工作形象的部分,image: mydockerhubuser/amazonlinux-custom:latest这样你就不必安装所有的部门。

笔记

亚马逊通常会重建其amazonlinux:latest镜像并将其推送到 Docker Hub。使用基于他们的自定义图像,您必须考虑以下因素:

  • 你也需要经常重建你的图像,以保持最新的补丁等。
  • 使用固定版本可能会更聪明,例如FROM: amazonlinux:2017.09避免您不期望的主要版本更改。
于 2018-01-15T18:29:47.867 回答