docker - 必须采取什么措施才能在Docker上交付并避免积累镜像?

标签 docker release

我使用Docker执行我制作的网站。
当必须发布一个版本时,我必须构建一个新的Docker镜像并从中启动一个新的Container。

问题在于图像和容器正在累积并占用巨大空间。
除了交付外,我还需要停止正在运行的容器并删除它和源镜像。

我不需要Docker命令行,但不需要核对 list 或过程即可。

例如:
-停止运行容器
-删除停止的容器
-删除旧图像
-建立新形象
-开始新的容器

我想念什么吗?
我不习惯Docker,也许这个经典的用例有最佳实践?

最佳答案

对我有用的本地工作流程是:

  • 在没有Docker的情况下在本地进行核心开发。交互式调试器和实时重新加载之类的东西在非Docker环境中也能正常工作,没有怪异的hack或root访问权限,而安装所需的工具通常只需要一个brewapt-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作业。
  • 关于docker - 必须采取什么措施才能在Docker上交付并避免积累镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56019900/

    相关文章:

    linux - 如何使用运行此容器的同一用户为 docker 容器创建卷?

    linux - Mongo 守护进程不由 service mongod start 运行

    python - 在 slim python 3.6 docker 镜像上运行 python mysql 客户端

    python - 在 Docker 中运行的 uwsgi 找不到初始化文件

    time - 每蜱释放两只海龟 netlogo

    android - 谷歌地图在发布 apk 时显示空白屏幕,在 Debug模式下工作正常

    docker - Docker 上的 Websocket 和 nginx

    android - Flutter 应用在​​ Release模式下显示灰屏,但在 Debug模式下工作正常 'DiagnosticsProperty<void>' 实例

    r - 获取包第一版的发布日期

    iphone - 为什么释放 View Controller 会导致崩溃?