我通常使用简单的生产映像合成来管理生产部署,因此完全依赖docker-compose。
我不使用Kubernetes或其他工具,因为我想对我的简单应用程序保持简单(我不部署在多个主机上,也不管理负载平衡或执行CD / CI)
这是我的作品构图:
version: '3'
services:
php:
image: ${CONTAINER_REGISTRY_BASE}/php:${VERSION}
depends_on:
- db
env_file:
- ./api.env
api:
image: ${CONTAINER_REGISTRY_BASE}/api:${VERSION}
depends_on:
- php
- db
db:
image: mariadb:10.2
client:
image: ${CONTAINER_REGISTRY_BASE}/client-prod:${VERSION}
env_file:
- ./client.env
admin:
image: ${CONTAINER_REGISTRY_BASE}/admin-prod:${VERSION}
env_file:
- ./admin.env
在.env
文件中为应用程序堆栈保留一个全局版本,当我更新此版本时,我只需要这样做:
docker-compose build
docker-compose push
在生产服务器中(更新版本后)
docker-compose up -d
您可以想象,问题在于,即使其中一项服务进行了很小的修改,我也要运送整个堆栈。
我曾考虑为每种服务使用不同的版本,但维护起来似乎很复杂,因为我们无法真正确定每种服务的最新版本。
我看错了吗?我不应该在生产中使用docker-compose吗?在那种情况下我应该使用什么?
有人可以建议我一种基于Docker注册表的简单部署方式吗?
答案 0 :(得分:1)
简短答案: 实际上,您应该为每一个提供单独的服务,我建议您将生产的普通Docker服务器转移到Swarm。
长答案: 如果您移至Docker Swarm,则可以使用相同的compose文件,并进行一些更改以使其成为堆栈文件。这是由Swarm单独创建的一系列服务。
在构建过程中,建议您为每个新构建分配一个特定的版本号,然后将其专门标记为最新版本或开发版本。将最新版本或开发版本推送到存储库。
这样做的原因有两个:
每当您进行docker stack部署时,它只会查看服务中的差异以进行更改。我会尝试一下,但是我认为它会更好地适合您的工作流程。
旁注: 我从来没有真正为Docker中现有的数据库找到一个好的用例,而没有(1)缺乏资源或(2)集成测试。