我在github.com上有一个私有git存储库,我希望使用docker build
自动执行Dockerfile
进程。我天真地认为让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...
我认为可行的选项:
在执行docker build
时,我以某种方式将repo文件夹挂载到docker中,以便它看到我刚刚从我的repo克隆的代码,在本例中是hello_world.c
文件,然后它将按照Dockerfile
说明操作。我该怎么做?
我认为另一个选项是在git clone
说明中执行新的Dockerfile
。
第三种选择是发布我的git repo,并使用wget
作为Dockerfile
指令下载该版本的副本。
其中哪一项是最好的方法?有关更好实践的想法吗?
答案 0 :(得分:0)
其实你是对的 - 包括repo根目录中的Dockerfile确实是最好的做法。工作流程如下所示:
docker build -t <some tag> .
以构建泊坞窗图像docker push <some tag>
将docker镜像推送到您的图像存储库(无论是在Docker Hub公共/私有还是在任何地方)请注意,如果您希望自动构建新图像,则需要转向其他服务。 Docker Hub具有automated builds功能,可以监视您的git存储库,并在指定分支上检测到新提交时构建映像。
在Dockerfile中,您应该使用ADD
指令将代码复制到容器中。
希望这有帮助。