构建docker容器时迭代的最佳方法是什么?

时间:2015-07-24 17:19:20

标签: docker

我正在尝试构建一些docker容器,我发现编辑Dockerfile的迭代过程,脚本在其中运行,笨重。我正在寻找最佳实践,并了解其他人如何进行。

我的初始流程是:

  1. docker build -t mycontainer mycontainer
  2. docker run mycontainer
  3. docker exec -i -t < container id > "/bin/bash" # get into container to debug
  4. docker rm -v < container id >
  5. docker rmi mycontainer
  6. 重复
  7. 每次迭代都感觉很贵,特别是如果它是错误的。

    这个替代过程需要少一点迭代:

    1. 在dockerfile中安装vim
    2. docker run mycontainer
    3. docker exec -i -t < container id > "/bin/bash" # get into container to edit scripts
    4. docker cp完成后复制已编辑的文件。
    5. 如果我需要运行任何命令,我会仔细记住并更新容器外的Dockerfile。
    6. 不使用vim重建图像
    7. 这需要更少的迭代次数,但并不是无痛的,因为一切都是非常手动的,我必须记住哪些文件发生了变化并得到了更新。

3 个答案:

答案 0 :(得分:11)

我从0.7岁开始就一直在使用Docker,我一定感到很痛苦。

Dockerfile开发工作流程

注意:当我处于活动开发阶段时,我总是在容器中安装vim。我发布时只是把它从Dockerfile中取出来。

  1. 设置tmux / gnu屏幕/ iTerm /您最喜欢的垂直分割控制台实用程序。
  2. 在正确的控制台上我运行:

    $ vim Dockerfile
    
  3. 在左侧控制台上我运行:

    $ docker build -t username/imagename:latest . && docker run -it -name dev-1 username/imagename:latest
    
  4. 现在水平拆分左侧控制台,以便运行STDOUT位于上方且shell位于下方。在这里你将运行:

    docker exec -it dev-1
    

    并在内部进行编辑或使用以下方式进行测试:

    docker exec -it dev-1 <my command>
    
  5. 每次您对使用Dockerfile保存(:wq!)感到满意,然后在左侧控制台中运行上面的命令。测试行为。如果你不开心的话:

    docker rm dev-1
    

    然后再次编辑并重复步骤#3。

  6. 定期,当我构建了太多图像或容器时,我会执行以下操作:

    • 删除所有容器:docker rm $(docker ps -qa)
    • 删除所有图片:docker rmi $(docker images -q)

答案 1 :(得分:3)

我认为您在备用流程中编辑的文件是构成您正在部署的应用程序的一部分的文件?比如Bash或Python脚本?

在这种情况下,您可以在调试过程中将它们作为卷安装,而不是将它们安装在docker中,这样当您编辑它们时,它们会立即在docker和主机中更改。

例如,如果您的代码位于/ home / dragonx / codefiles,请执行

docker run -v /home/dragonx/codefiles:/opt/codefiles mycontainer

然后,当你从主机或容器中编辑这些文件时,它们在容器中可用,但是在杀死docker之前你不需要复制它们。

答案 2 :(得分:-1)

这是构建一些泊坞容器的最简单方法&#34;:

docker run -it --name=my_cont1 --hostname=my_host1 ubuntu:15.10
docker run -it --name=my_cont2 --hostname=my_host2 ubuntu:15.10
...
...

docker run -it --name=my_contn --hostname=my_hostn ubuntu:15.10

这将创造“&#39; n&#39;容器数量。

第一次&#34;码头运行后......&#34;命令,你将被放入一个Bash shell。你可以在那里做你的事情,退出并运行下一个&#34; docker run ...&#34;命令。

退出Bash shell不会删除容器。他们仍然在&#34;退出&#34;状态。您可以使用docker ps -a命令列出它们。你可以随时通过以下方式回复他们:

docker start -ia my_cont1