将文件从主机复制到docker容器,然后提交并推送

时间:2015-01-08 09:24:05

标签: docker

我在Ubuntu中使用docker。在开发阶段,我从主机中的Git克隆了所有源代码,在WebStorm中编辑它们,然后使用-v /host_dev_src:/container_src在Docker容器内运行Node.js,以便我可以测试。

然后当我想发送它们进行测试时:我提交了容器并推出了新版本。但是当我在测试机器上拉动并运行图像时,源代码丢失了。这是有道理的,因为在测试机中没有/host_src可用。

我目前的解决方法是在测试计算机上克隆源代码并使用-v /host_test_src:/container_src运行docker。但是我想知道是否可以将源代码直接复制到容器中并避免这种操作。我更喜欢使用源代码复制,粘贴和运行图像文件,特别是因为我们的测试机器上没有Internet连接。

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

4 个答案:

答案 0 :(得分:2)

一种解决方案是在Dockerfile中安装一个git clone步骤,将源代码添加到图像中。在开发期间,您可以使用-v docker run参数覆盖此代码,以便您可以在不重建的情况下进行更改。在测试时,您只需检查更改并构建新图像。现在,您可以使用完全独立的单独图像进行测试。

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

这种方法的问题在于,如果您使用的是编译语言,则只希望二进制文件存在于最终图像中。在这种情况下,git clone需要替换为获取或编译二进制文件的一些代码。

答案 1 :(得分:1)

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

第1步:创建app_src泊坞窗图片

将一个Dockerfile放入你的git repo中,如

FROM BUSYBOX
ADD . /container_src
VOLUME /container_src

然后你可以建立像

这样的源图像
docker build -t app_src .

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

步骤2转移此泊坞窗图片,如app image

您可以将此app_src图像传输到与您的应用程序图像类似的测试系统,可能是通过docker registry

步骤3作为数据容器运行

在测试系统中,在其上方运行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提供学分,我得到详细的想法)

答案 2 :(得分:1)

添加Adrian的答案,我做git clone,然后再做

CMD git pull && start-my-service

所以检出分支的最新代码运行。这显然不适合所有人,但它适用于某些软件版本模型。

答案 3 :(得分:0)

您可以尝试使用两个Dockerfiles。 base知道如何从预先确定的文件夹中运行您的应用,但将其声明为卷。开发时,您将运行此容器,并将主机文件夹作为卷安装。另一个,package,将继承base一个并从主机目录中复制/添加文件,同样没有卷,这样您就可以将所有文件都带到测试人员手中了。主机。