为什么我要从存储库 URL 进行 docker 构建?

red*_*888 1 git containers docker dockerfile

docker build 可以接受 git repo 的 URL 来查找要构建的文件。

但这让我感到困惑,因为这是我期望的工作流程:

* Pull my repo with my code and dockerfile
* Do development
* run docker build using the PATH "context" of the repo on my local drive
* poke/test my app after the container spins up
* Write more code do more builds, etc
Run Code Online (Sandbox Code Playgroud)

如果我直接从存储库构建,那么该工作流程是什么样的?我会承诺、推送到远程然后进行构建吗?或者这个功能适用于我的构建服务器从存储库进行 docker 构建的管道,因为我认为我应该为此类事情传递“图像”。

wmo*_*ell 5

它对于持续集成管道很有用。这些构建管道的常见用例是首先git clone,然后是git checkout某个分支,然后更改为 Docker 构建上下文目录,然后运行构建。这可能看起来像:

#!/bin/sh
git clone ssh://git.mycompany.example.com/myproject.git
git checkout ${BRANCH}
cd docker
docker build -t "mycompany/myproject:${BRANCH}" .
Run Code Online (Sandbox Code Playgroud)

由于这是一个常见的用例,因此将执行相同操作的简写方法卷入docker build,如下所示:

#!/bin/sh
docker build -t "mycompany/myproject:${BRANCH}" \
    "ssh://git.mycompany.example.com/myproject.git#${BRANCH}:docker"
Run Code Online (Sandbox Code Playgroud)

如果您关心克隆/签出如何发生的细节,或者在签出后执行其他任何操作,或者执行简单情况之外的任何操作,那么您可能需要使用“长”方法来编码每个单独的步骤。如果您只关心构建特定版本的 Dockerfile,则可以在单个 shell 命令中完成它。

对于本地开发,您将继续使用带docker build PATH构建上下文的构建或docker build - < Dockerfile不带上下文的构建。

使用 URL 表单的另一个原因是,如果您想为您没有积极参与的项目构建图像。假设您使用mycompany/coolimage作为基础图像。Docker 镜像存储库上发布的基础镜像的某些工具存在错误。作者已在分支mycompany/coolimage上修复了此错误dev,但尚未发布到图像存储库。您可以袖手旁观,等待图片发布;或者,您可以docker build -t mycompany/coolimage ssh://git.mycompany.example.com/myproject.git#dev根据 dev 分支中的 Dockerfile 继续您的工作。您也可以克隆自己的副本,但如果您不进行任何更改,为什么还要麻烦呢?