docker构建在包含Dockerfile的私有git repo上?

时间:2015-03-03 10:13:35

标签: git github docker dockerfile

我在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...

我认为可行的选项:

  1. 在执行docker build时,我以某种方式将repo文件夹挂载到docker中,以便它看到我刚刚从我的repo克隆的代码,在本例中是hello_world.c文件,然后它将按照Dockerfile说明操作。我该怎么做?

  2. 我认为另一个选项是在git clone说明中执行新的Dockerfile

  3. 第三种选择是发布我的git repo,并使用wget作为Dockerfile指令下载该版本的副本。

  4. 其中哪一项是最好的方法?有关更好实践的想法吗?

1 个答案:

答案 0 :(得分:0)

其实你是对的 - 包括repo根目录中的Dockerfile确实是最好的做法。工作流程如下所示:

  1. 克隆回购并更改到目录,就像在问题中所做的那样。
  2. 运行docker build -t <some tag> .以构建泊坞窗图像
  3. 现在使用docker push <some tag>将docker镜像推送到您的图像存储库(无论是在Docker Hub公共/私有还是在任何地方)
  4. 请注意,如果您希望自动构建新图像,则需要转向其他服务。 Docker Hub具有automated builds功能,可以监视您的git存储库,并在指定分支上检测到新提交时构建映像。

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

    希望这有帮助。