【问题标题】:Docker development workflowDocker 开发工作流程
【发布时间】:2015-12-16 22:12:35
【问题描述】:

对于在 Docker 容器中运行的代码,正确的开发工作流程是什么?

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

我可以想到两种方法:

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

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

这两种方法都非常低效。有没有更好的办法?

【问题讨论】:

    标签: python django deployment docker workflow


    【解决方案1】:

    更有效的方法是从已构建的最新映像(然后具有最新代码)运行新容器。

    您可以通过 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 映像,以便我可以重新构建和部署它?
    • 然后提交它并重建一个图像。您还应该考虑使用 Jenkins 为您构建这些图像
    • 但是如果代码位于我的本地开发机器上,我该如何“提交”它以便将其包含在 Docker 映像中?
    • 你应该有一个 Dockerfile,它有一个 ADD,它把 all 你的源代码文件放到镜像中。否则如何构建包含您的代码的图像?然后,您可以决定直接从该映像运行容器,或者使用-v 覆盖一些文件。您还可以有两种不同的 Dockerfile,一种用于分发您的应用程序,另一种用于开发目的
    • 啊哈。我没有意识到-v 会覆盖在ADD 中创建的目录。那很完美。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    相关资源
    最近更新 更多