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
如果我直接从回购中构建,该工作流程是什么样的?我会承诺,推动远程,然后建设?或者这是一个管道的功能,我的构建服务器从repo构建docker构建因为我认为我应该传递"图像"对于那种事情。
答案 0 :(得分:3)
对于持续集成管道非常有用。这些构建管道的常见用例是首先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}" .
由于这是一个常见的用例,因此执行相同操作的简写方法将转换为docker build
,如下所示:
#!/bin/sh
docker build -t "mycompany/myproject:${BRANCH}" \
"ssh://git.mycompany.example.com/myproject.git#${BRANCH}:docker"
如果您关心克隆/结账的详细信息,或在结账后做任何其他事情,或者做一些超出简单案例的事情,那么您会想要使用" long"编码每个单独步骤的方法。如果您只关心构建特定版本的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继续工作。您也可以克隆自己的副本,但如果您没有进行任何更改,为什么还要打扰?