版本控制策略 Docker 图像链接到其他包含通过 docker 撰写
Strategy for versioning Docker images linked to other contains via docker compose
我有一张 docker 图片,其中包含许多服务。我一直在考虑使用 Docker Compose 来构建此图像,而不是将所有内容打包在一个大图像中。
我遇到的问题是使用不同版本的主图像对服务应用更改的策略。例如,其中一项服务是 postgres 数据库,有时模式可能会发生变化。当我部署单个整体图像时,我确切地知道用户在拉取特定版本的图像时将获得什么版本的架构。我不确定如果我使用 docker 撰写会发生什么。当用户启动我的镜像的新版本时,它会始终以干净的 postgres 容器启动,还是会重用现有容器?
我能想到重用有用的情况(比如主机宕机,我不想数据库丢失),但如果他们拉出一个新图像,我想知道肯定他们得到一个干净容器并且我的主容器可以运行准备初始DDL/DML脚本它正确。这甚至是一个合理的担忧吗?
来自关于 docker-compose up command 的文档:
By default, if there are existing containers for a service, docker-compose up will stop and recreate them (preserving mounted volumes with volumes-from), so that changes in docker-compose.yml are picked up. If you do not want containers stopped and recreated, use docker-compose up --no-recreate. This will still start any stopped containers, if needed.
因此要更深入地了解您的应用程序。
当您想要更新图像并希望将数据库放入您的容器以便为新容器删除时使用 docker-compose up
命令。
使用docker-compose up --no-recreate
不会重新创建未更新的容器。当你想更新但不需要重新创建所有辅助容器时使用它。
在 docker-compose.yml 中的容器描述中添加 restart:always
将确保 Docker 守护程序将重启容器,如果它停止了。
我有一张 docker 图片,其中包含许多服务。我一直在考虑使用 Docker Compose 来构建此图像,而不是将所有内容打包在一个大图像中。
我遇到的问题是使用不同版本的主图像对服务应用更改的策略。例如,其中一项服务是 postgres 数据库,有时模式可能会发生变化。当我部署单个整体图像时,我确切地知道用户在拉取特定版本的图像时将获得什么版本的架构。我不确定如果我使用 docker 撰写会发生什么。当用户启动我的镜像的新版本时,它会始终以干净的 postgres 容器启动,还是会重用现有容器?
我能想到重用有用的情况(比如主机宕机,我不想数据库丢失),但如果他们拉出一个新图像,我想知道肯定他们得到一个干净容器并且我的主容器可以运行准备初始DDL/DML脚本它正确。这甚至是一个合理的担忧吗?
来自关于 docker-compose up command 的文档:
By default, if there are existing containers for a service, docker-compose up will stop and recreate them (preserving mounted volumes with volumes-from), so that changes in docker-compose.yml are picked up. If you do not want containers stopped and recreated, use docker-compose up --no-recreate. This will still start any stopped containers, if needed.
因此要更深入地了解您的应用程序。
当您想要更新图像并希望将数据库放入您的容器以便为新容器删除时使用
docker-compose up
命令。使用
docker-compose up --no-recreate
不会重新创建未更新的容器。当你想更新但不需要重新创建所有辅助容器时使用它。在 docker-compose.yml 中的容器描述中添加
restart:always
将确保 Docker 守护程序将重启容器,如果它停止了。