复制文件从主机到docker集装箱,然后提交并推送

我在Ubuntu中使用docker。 在开发阶段,我把Git的所有源代码都克隆到主机上,在WebStorm中进行编辑,然后在-v /host_dev_src:/container_src中的docker容器中使用Node.js运行,以便testing。

然后,当我想要发送他们进行testing:我承诺容器,并推出了一个新的版本。 但是当我在testing机器上拉出并运行镜像时,源代码丢失了。 这在testing机器中是没有/host_src可用的。

我目前的解决方法是克隆testing机器上的源代码,并用-v /host_test_src:/container_src运行-v /host_test_src:/container_src 。 但我想知道是否有可能将源代码直接复制到容器中,并避免这种操作。 我宁愿复制,粘贴和运行图像文件的源代码,特别是因为我们的testing机器上没有互联网连接。

PS:似乎docker cp只支持从容器复制文件到主机。

一个解决scheme是在Dockerfile中添加一个git clone步骤,将源代码添加到图像中。 在开发过程中,您可以使用-v参数将此代码覆盖到docker run以便在不重build的情况下进行更改。 当涉及到testing时,您只需检查您的更改并构build一个新的图像。 现在你有一个完全独立的testing图像。

请注意,如果您在Dockerfile中有VOLUME指令,则需要确保它在git clone步骤之后发生。

这种方法的问题是,如果你使用的是编译语言,你只希望你的二进制文件生存在最终的图像。 在这种情况下,git克隆需要被一些代码取代或者编译二进制代码。

请对待您的源代码是数据,然后将它们打包为数据容器,请参阅https://docs.docker.com/userguide/dockervolumes/

步骤1创buildapp_src泊坞窗图像

把一个Dockerfile放入你的git Dockerfile

 FROM BUSYBOX ADD . /container_src VOLUME /container_src 

然后你可以像创build源图像

 docker build -t app_src . 

在开发期间,您始终可以使用旧的解决scheme-v /host_dev_src:/container_src

第2步像应用程序图像传输这个泊坞窗图像

您可以通过app_srcregistry,将这个app_src图像传输到类似于您的应用程序映像的testing系统

步骤3作为数据容器运行

在testing系统中,运行它上面的app容器。 (我使用ubuntu的演示)

 docker run -d -v /container_src --name code app_src docker run -it --volumes-from code ubuntu bash root@dfb2bb8456fe:/# ls /container_src Dockerfile hello.c root@dfb2bb8456fe:/# 

希望它给予帮助

(给学分https://github.com/toffer/docker-data-only-container-demo ,我得到详细的想法)

加上Adrian的回答,我做了克隆,然后做

 CMD git pull && start-my-service 

所以检出分支上的最新代码就可以运行了。 这显然不适合每个人,但是它在一些软件发布模型中起作用。

你可以尝试有两个Dockerfiles。 base人会知道如何从预定义的文件夹运行你的应用程序,但不能声明它的音量。 在开发时,您将运行此容器,并将主机文件夹作为卷装入。 另一个, package一,将inheritancebase之一,并从主机目录复制/添加文件,再次没有卷,这样你就可以把所有的文件到testing仪的主机。