设置自动构建
Docker Hub (https://hub.docker.com) 可以从外部存储库中的源代码自动构建映像,并自动将构建的映像推送到您的 Docker 存储库,该存储库将托管在您的 Docker Hub 存储库帐户例如: https://cloud.docker.com/u/binbash/repository/list
当您设置自动构建(也称为 autobuilds)时,您会创建一个包含 branches 和 tags 的列表,您希望将它们构建到 Docker 映像中。当您将代码推送到其中一个列出的图像标签的源代码分支(目前仅支持 GitHub / Bitbucket)时,推送使用 webhook 触发新构建,从而生成 Docker图片。然后将构建的映像推送到 Docker Hub 注册表。
详细实现步骤请参考https://docs.docker.com/docker-hub/builds/
构建的环境变量
您可以设置环境变量的值(实际上它们被映射到构建 ARG 值 - docker build --build-arg - 仅在构建时使用 - https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg)。
不要与服务在运行时使用的环境值 ENV VARS (docker run --env MYVAR1=foo - https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/#set-environment-variables--e-env-env-file) 混淆
当您配置自动构建时,这些从 Docker Hub UI 配置的环境变量将在您的构建过程中使用。通过单击构建环境变量部分旁边的加号添加您的build environment variables,然后输入变量名称和值。
当您从 Docker Hub UI 设置变量值时,它们可以由您在 hooks 文件 中设置的命令使用(这非常重要,并将在下面进行扩展),但它们的存储方式是只有对 Docker Hub 存储库具有管理员访问权限的用户才能看到它们的值。这意味着您可以使用它们来安全地存储访问令牌或其他应保密的信息。
构建钩子示例(以实现 Docker Hub UI Env vars)
从自动构建的 Web UI 添加变量使它们可以在 hooks 中使用。在挂钩中,您必须使用该值来设置 custom build arg,使用 --build-arg。最后,您必须在 Dockerfile 中使用此自定义构建参数,以使用 ENV 命令或 export 手动设置环境变量。
示例:
说你想要一个环境变量TERRAFORM_VERSION='0.12.0-beta2' 在你的构建环境中
第 1 步。
将此添加到自动构建的 Web UI 中以用于“构建环境变量”
第 2 步。
创建一个自定义构建挂钩,即在与您的 Dockerfile 相同的目录中创建一个名为 hooks 的 文件夹。在 hooks 文件夹中,创建一个名为 build 的文件。这将创建自定义构建挂钩。 Docker 将使用它来构建您的映像。构建内容:
#!/bin/bash
docker build -t $IMAGE_NAME --build-arg TERRAFORM_VERSION=$TERRAFORM_VERSION .
注意:这里的$TERRAFORM_VERSION 来自网络用户界面。
第三步:
在你的 Dockerfile 中
ARG TERRAFORM_VERSION
ENV TERRAFORM_VERSION $TERRAFORM_VERSION
注意:这里的$TERRAFORM_VERSION 来自名为build 的bash 脚本文件中的自定义构建参数。
完整示例: https://github.com/binbashar/public-docker-images/tree/master/terraform-resources
就是这样!它现在应该可以工作了。可能在 Docker Hub 中将“构建环境变量”重命名为“自定义钩子环境变量”会更容易理解官方文档中的这个概念(https://docs.docker.com/docker-hub/builds/advanced/)。
加分!
在启动构建脚本时设置了许多关键环境参数,您可以在挂钩中使用所有这些参数,并且都可以用于制作自定义构建参数。
SOURCE_BRANCH: the name of the branch or the tag that is currently being tested.
SOURCE_COMMIT: the SHA1 hash of the commit being tested.
COMMIT_MSG: the message from the commit being tested and built.
DOCKER_REPO: the name of the Docker repository being built.
DOCKERFILE_PATH: the Dockerfile currently being built.
DOCKER_TAG: the Docker repository tag being built.
IMAGE_NAME: the name and tag of the Docker repository being built. (This variable is a combination of DOCKER_REPO:DOCKER_TAG.)