这个问题在表面“体积”上似乎有一个简单的答案,尽管我相信它可能比这更复杂。
解释
我们有三个服务,每个服务都可以在单个或多个主机上运行多个容器。
容器 A是我们的 API 容器
容器 B是我们的队列容器
容器 C是我们的任务计划 (cron) 容器
所有这些容器都运行相同的 git-repo / 源代码 (PHP)。唯一的区别是在容器内运行的进程:
容器 A正在运行 php-fpm
容器 B正在运行队列监控守护进程(artisanqueue)
容器 C正在运行执行任何 cron 任务的 crontab
目前,在每个“服务”的 dockerfile 中,我们下载 git repo 并启动相关进程。虽然最好有一个“数据”以某种方式为所有上述容器提供代码的容器。
问题
我们如何创建一个容器,作为其他容器的“代码存储库”?将其文件系统中的源文件挂载到其他“服务”容器的文件系统中?
答案1
执行此操作的首选方法是使用命名卷:
version: '2'
volumes:
data:
driver: local
services:
service-1:
build: .
image: my-service:latest
volumes:
- data:/data
service-2:
image: my-service:latest
volumes:
- data:/data
要使用数据容器,您需要在该容器上有卷,然后在其他容器中使用卷安装这些卷:
version: '2'
services:
data:
build: .
image: my-service:latest
command: /bin/true
volumes:
- /data
service-1:
image: my-service:latest
volumes-from:
- data
service-2:
image: my-service:latest
volumes-from:
- data