我在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
仅支持将文件从容器复制到主机。
答案 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
一个并从主机目录中复制/添加文件,同样没有卷,这样您就可以将所有文件都带到测试人员手中了。主机。