使用 Docker 容器作为其他容器的文件系统

使用 Docker 容器作为其他容器的文件系统

这个问题在表面“体积”上似乎有一个简单的答案,尽管我相信它可能比这更复杂。

解释

我们有三个服务,每个服务都可以在单个或多个主机上运行多个容器。

容器 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

相关内容