dockerbuild立在一个私人的git回购包含Dockerfile?

我有一个github.com上的私人git存储库,我想使用Dockerfile自动化Dockerfile docker build过程。 我天真地以为Dockerfile是在我的回购站的根文件夹中的最佳位置。 例:

 git clone ssh://git@github.com/avilella/bioboxes_playground cd bioboxes_playground ls Dockerfile Dockerfile 

所以对于外部依赖,我正在安装apt-get install或者下载tar.gz并在docker build期间安装它们。

我不清楚的是如何将代码回放到docker build的指令。

我在repo中添加了一个简单的hello_world.c示例,并且我想在docker build期间进行编译。 见下文:

 FROM debian:wheezy MAINTAINER Foo Bar, foo@bar.com ENV ORG foo ENV APP bar ENV INSTALL_DIR /opt/${ORG}/${APP} ENV PACKAGES wget binutils make csh g++ sed gawk perl zlib1g-dev RUN apt-get update -y && apt-get install -y --no-install-recommends ${PACKAGES} ENV SEQTK https://github.com/avilella/seqtk/archive/sgdp.tar.gz ENV THIRDPARTY_DIR ${INSTALL_DIR}/thirdparty RUN mkdir -p ${THIRDPARTY_DIR} RUN cd ${THIRDPARTY_DIR} # SEQTK RUN mkdir -p ${THIRDPARTY_DIR}/seqtk && cd ${THIRDPARTY_DIR}/seqtk &&\ wget --quiet --no-check-certificate ${SEQTK} --output-document - |\ tar xzf - --directory . --strip-components=1 && \ make # COMPILE HELLO_WORLD RUN gcc hello_world.c -o ${INSTALL_DIR}/helloworld # define an entry point... 

我认为可行的选项:

  1. 在做docker build我以某种方式在docker build挂载了repo文件夹,以便它能够看到我从repo中克隆的代码,在这种情况下是hello_world.c文件,然后它将遵循Dockerfile指令。 我怎么做?

  2. 我认为另一个select是做一个新的git clone作为Dockerfile说明的一部分。

  3. 第三个选项是释放我的git repo,并使用wget作为Dockerfile指令下载发行版本的副本。

哪一个是最好的方法? 任何更好的做法的想法?

1:我同意Ben Whaley ADD在这里是正确的select。 然后你可以使用docker build . 在存储库的根文件夹中。

2和3:每当你在hello_world.c上做出改变,你必须提交并推送到你的远程(当这是一个私人的回购,你还必须添加SSH密钥)。 对你来说可能会好,但是在本地修正某些东西时,这是非常不切实际的。

我有和你一样的想法,花了我一些时间才意识到docker工人还没有做好,

你可以看看我的shell脚本( https://github.com/Equanox/docker-auto-build )。 它使您可以轻松地构build和运行git仓库中的dockerfiles。 你甚至可以在你的dockerfiles中存储常用的运行cmds。 你会find一个如何在那里使用它的例子。

其实你是对的 – 包括在回购的根源Dockerfile确实是一个最佳实践。 工作stream程如下所示:

  1. 克隆回购,并转到目录,就像你在问题中所做的一样。
  2. 运行docker build -t <some tag> . build立docker形象
  3. 现在使用docker push <some tag>将docker镜像推送到您的映像存储库(无论是在Docker Hub public / private或者任何地方)

请注意,如果您想要自动构build新图像,则需要转到其他服务。 Docker Hub有一个自动构buildfunction,可以监视你的git仓库,并在指定的分支上检测到新的提交时创build镜像。

在Dockerfile中,您应该使用ADD指令将代码复制到容器中。

希望这可以帮助。