docker在包含Dockerfile的私有git回购上构建?
我有一个私有的git存储库,我想使用docker在包含Dockerfile的私有git回购上构建?,git,github,docker,dockerfile,Git,Github,Docker,Dockerfile,我有一个私有的git存储库,我想使用Dockerfile自动化docker构建过程。我天真地认为存放Dockerfile的最佳位置是我的repo的根文件夹。例如: git clone ssh://git@github.com/avilella/bioboxes_playground cd bioboxes_playground ls Dockerfile Dockerfile 因此,对于外部依赖项,我使用apt get install安装它们,或者下载tar.gz并在docker build期
Dockerfile
自动化docker构建过程。我天真地认为存放Dockerfile
的最佳位置是我的repo的根文件夹。例如:
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中的代码
我在repo中添加了一个简单的hello\u world.c
示例,我希望在docker构建过程中进行编译。见下文:
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...
我认为可行的选择:
在执行docker build
时,我不知何故将repo文件夹装入docker中,以便它看到我刚从repo克隆的代码,在本例中是hello\u world.c
文件,然后它将按照Dockerfile
说明进行操作。我该怎么做
我认为的另一个选择是作为Dockerfile
指令的一部分,进行一个全新的git克隆
第三种选择是发布我的git回购协议,并使用wget
作为Dockerfile
指令下载该版本的副本
以下哪种方法是最好的继续?有什么更好的做法吗?事实上你是对的——在回购协议的根目录中包含Dockerfile确实是一种最佳做法。工作流如下所示:
克隆repo并更改到目录,就像您在问题中所做的那样李>
运行docker build-t.
构建docker映像
现在使用docker push
将docker映像推送到您的映像存储库中(无论是在docker Hub public/private上还是其他任何位置)
请注意,如果希望自动生成新映像,则需要转向其他服务。Docker Hub有一个功能,当在指定的分支上检测到新的提交时,它将监视您的git存储库并构建映像
在Dockerfile中,您应该使用ADD
指令将代码复制到容器中
希望这能有所帮助。1:我同意本·惠利的观点,在这里添加将是正确的选择。然后可以使用存储库根文件夹中的docker build.
2和3:每次在hello_world.c上进行更改时,您都必须提交并推送到远程(当这是私有repo时,您还必须添加ssh密钥)。可能对您来说还可以,但在本地修复bug时,这是非常不切实际的
我和你有同样的想法,我花了一些时间才意识到docker还没有做好这件事
您可以看看我的shell脚本()。它使您能够在git repo中轻松构建和运行DockerFile。您甚至可以在DockerFile中存储常用的运行cmd。你会在那里找到一个如何使用它的例子。我明白你的意思。问题是,当docker build
正在执行Dockerfile
中的说明时,如何公开回购协议中的代码?现在用一个例子更新了我的问题。好的,我更新了答案。您应该使用ADD
指令将代码复制到容器中。