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

dra*_*onx 9 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. 重复

这对于每次迭代都感觉很昂贵,特别是如果它是拼写错误.

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

  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重建图像

这需要更少的迭代,但不是无痛,因为一切都非常手动,我必须记住哪些文件已更改并已更新.

Eli*_*jah 11

自0.7以来,我一直在与Docker合作,我一定感受到了你的痛苦.

Dockerfile开发工作流程

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

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

    $ vim Dockerfile
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在左侧控制台上我运行:

    $ docker build -t username/imagename:latest . && docker run -it -name dev-1 username/imagename:latest
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在水平拆分左控制台,以便运行STDOUT在上面并且shell在下面.在这里你将运行:

    docker exec -it dev-1
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    docker rm dev-1
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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