docker在包含Dockerfile的私有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期

我有一个私有的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期间安装它们

我不清楚的是如何根据
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
    指令将代码复制到容器中。