我想要自动化我的构建过程,并且需要传递一个环境变量来运行DockerFile中的一些命令。我想知道在码头中心有没有办法做到这一点。我知道docker cloud有这样的东西,但是我想知道docker hub中是否存在功能,因为正常构建的cli中有--build-args参数。
答案 0 :(得分:1)
Docker Hub (https://hub.docker.com)可以从外部存储库中的源代码自动构建映像,并将构建的映像自动推送到您的Docker存储库中托管在您的Docker Hub存储库帐户下 例如: https://cloud.docker.com/u/binbash/repository/list
设置自动构建(也称为autobuilds
)时,将创建要构建到Docker映像中的branches
和tags
的列表。当您将代码推送到其中列出的图像标签之一的源代码分支(当前仅支持 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)。
不要与您的服务在运行时(docker run --env MYVAR1=foo
-https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/#set-environment-variables--e-env-env-file)使用的环境值ENV VARS混淆
在配置自动构建时,将在构建过程中使用从Docker Hub UI配置的环境变量。通过单击构建环境变量部分旁边的加号,然后输入变量名称和值,来添加build environment variables
。
当您从Docker Hub UI设置变量值时,它们可被您在挂钩文件中设置的命令使用(这很重要,并将在下面进行扩展),但它们被存储,以便只有对Docker Hub存储库具有管理员访问权限的用户才能看到其值。这意味着您可以使用它们安全地存储访问令牌或其他应保密的信息。
通过自动构建的网络用户界面添加变量,即可在hooks
中使用它们。在挂钩中,您必须使用该值来使用--build-arg
设置自定义生成arg 。最后,您必须在Dockerfile
内部使用此自定义生成arg,以使用ENV
命令或export
手动设置环境变量。
说您要在构建环境中使用环境变量TERRAFORM_VERSION='0.12.0-beta2'
第1步。 在自动构建的网络用户界面中添加“构建环境变量” [![在此处输入图片描述] [1]] [1]
第2步。
创建一个自定义构建挂钩,即在与Dockerfile
相同的目录中创建一个名为 hook 的文件夹。在hooks文件夹中,创建一个名为 build 的文件。这将创建自定义构建挂钩。 Docker将使用它来构建您的映像。构建内容:
#!/bin/bash
docker build -t $IMAGE_NAME --build-arg TERRAFORM_VERSION=$TERRAFORM_VERSION .
注意:此处$TERRAFORM_VERSION
来自网络用户界面。
第3步: 在您的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 X中将“构建环境变量”重命名为“自定义挂钩环境变量”将简化官方文档(https://docs.docker.com/docker-hub/builds/advanced/)中对该概念的理解。
启动构建脚本时会设置许多关键环境参数,您可以在钩子中使用所有这些参数,这些参数在创建自定义build-args时很有用。
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.)