我使用Docker执行我创建的网站。 当必须发布一个版本时,我必须构建一个新的Docker映像并从中启动一个新的Container。
问题是图像和容器正在堆积并占用巨大空间。 除了交付外,我还需要停止正在运行的容器并将其和源映像删除。
我不需要Docker命令行,但不需要任何遗忘的清单或过程。
例如: -停止运行容器 -删除停止的容器 -删除旧图像 -建立新形象 -启动新容器
我想念什么吗? 我不习惯Docker,也许这个经典的用例有最佳实践?
答案 0 :(得分:1)
最适合我的本地工作流程是:
在没有Docker的情况下在本地进行核心开发。交互式调试器和实时重载之类的事情在非Docker环境中也能正常工作,没有怪异的hack或root用户访问权限,而安装所需的工具通常只涉及一个brew
或apt-get
步骤。让我所有的pytest / junit / rspec / jest / ...测试通过。
docker build
一张新图片。
docker stop && docker rm
旧容器。
docker run
一个新容器。
当旧照片的数量开始困扰我时,docker system prune
。
如果您使用的是Docker Compose,则可以用docker-compose up --build
替换中间的步骤集。
在生产环境中,顺序略有不同:
当您的CI系统看到新的提交时,在运行存储库的本地测试后,它会docker build && docker push
一个新的映像。该图像具有唯一的标记,可以是时间戳记或源控件提交ID或版本标记。
您的部署系统(可以是CI系统或单独的CD系统)会告诉您正在使用的群集管理器(Kubernetes,带有Docker Swarm的Compose文件,Nomad,Ansible剧本...)新版本标签。部署系统负责停止,启动和删除容器。
如果您的集群管理器尚未处理此问题,请对docker system prune
运行cron作业。
答案 1 :(得分:0)
您应该使用:
docker system df
调查docker使用的空间。
之后,您可以使用
docker system prune -a --volumes
删除未使用的组件。容器之前,您应该先停止容器操作,但是这样您就可以覆盖所有内容。