Git 我为什么要从回购URL构建docker?

Git 我为什么要从回购URL构建docker?,git,docker,containers,dockerfile,Git,Docker,Containers,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

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构建的管道的一个功能,因为我认为我应该为这类事情传递“图像”。

这对于连续集成管道很有用。这些构建管道的一个常见用例是首先
git克隆
,然后
git签出
某个分支,然后切换到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"
如果您关心克隆/签出如何发生的细节,或者在签出后做任何其他事情,或者做任何超出简单情况的事情,那么您应该使用“长”方法对每个步骤进行编码。如果您只关心生成Dockerfile的特定版本,那么可以在单个shell命令中完成

对于本地开发,您将继续使用
docker build PATH
使用构建上下文进行构建,或者使用
docker build-
不使用上下文进行构建


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

这对于连续集成管道非常有用。这些构建管道的一个常见用例是首先
git克隆
,然后
git签出
某个分支,然后切换到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"
如果您关心克隆/签出如何发生的细节,或者在签出后做任何其他事情,或者做任何超出简单情况的事情,那么您应该使用“长”方法对每个步骤进行编码。如果您只关心生成Dockerfile的特定版本,那么可以在单个shell命令中完成

对于本地开发,您将继续使用
docker build PATH
使用构建上下文进行构建,或者使用
docker build-
不使用上下文进行构建


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

hmm我想我还是很困惑。在您给出的示例中,您已经签出了回购协议(其中包含dockerfile)。既然您已经签出了分支,并且dockerfile已经存在于磁盘上,为什么需要将docker build指向repo URL?对不起,我一定错过了一些基本的东西here@red888看看答案中的第二个例子和文档嗯,我想我还是很困惑。在您给出的示例中,您已经签出了回购协议(其中包含dockerfile)。既然您已经签出了分支,并且dockerfile已经存在于磁盘上,为什么需要将docker build指向repo URL?对不起,我一定错过了一些基本的东西here@red888请看答案中的第二个示例和文档