Docker开发工作流程

6

如何为在 Docker 容器中运行的代码制定适当的开发工作流程?

Solomon Hykes 表示,“官方”的工作流程是针对每个 Git 提交构建和运行一个新的 Docker 镜像。这很有道理,但如果我想在将更改提交到 Git 存储库之前测试更改怎么办?

我可以想到两种方法:

  1. 在本地开发服务器(例如 Django 开发服务器)上运行代码。编辑文件;在开发服务器上进行测试;进行 Git 提交;使用新代码重新构建 Docker 镜像;在本地 Docker 容器上再次测试。

  2. 不要运行本地开发服务器。相反,在编辑文件后构建和运行一个新的 Docker 镜像,然后在本地 Docker 容器上测试更改。

这两种方法都相当低效。有更好的方法吗?

1个回答

3
更高效的方法是从最新构建的镜像中运行一个新容器(其中包含最新的代码)。
您可以启动该容器,启动一个bash shell以便您能够在容器内部编辑文件:
docker run -it <some image> bash -l

您可以在容器中运行应用程序以测试新代码。

另一种修改容器中文件的方法是使用卷启动它。其思想是在 Docker 主机上的目录中更改文件,而不是直接从容器的命令行中操作文件:

docker run -it -v /home/joe/tmp:/data <some image>

任何你放置在docker宿主机的/home/joe/tmp目录下的文件都可以在容器中的/data/路径下访问。根据你的需要更改/data的路径,随意操作。

谢谢!-v 看起来不错。但是当 /home/joe/tmp 中的更改准备提交时会发生什么?有没有一种优雅的方式将代码复制到 Docker 镜像中,以便我可以重新构建和部署它? - Joe Mornin
但是如果代码存在于我的本地开发机器上,我该如何“提交”它以便包含在Docker镜像中? - Joe Mornin
你的本地开发机器不能提交你的文件吗?如果是这样,那么你做错了什么。 - Thomasleveil
2
你应该有一个 Dockerfile,其中包含 ADD 命令,将 所有 源代码文件都放入镜像中。否则,如何构建包含您的代码的镜像呢?然后,您可以决定直接从该镜像运行容器,或使用 -v 选项覆盖某些文件。您还可以拥有两个不同的 Dockerfile,一个用于分发您的应用程序,另一个用于开发目的。 - Thomasleveil
1
啊哈。我没想到-v会覆盖在ADD中创建的目录。太好了。感谢你的帮助! - Joe Mornin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接