docker-compose v2在主机上命名卷和卷

我正在寻找指导如何做一个docker-compose.yml版本2最干净的方法:

  • 容器状态与容器明显分离。
  • 为简单起见,将容器状态安装到主机(单个数据点,主机上的备份/数据,然后完成)。 我打开这是错误的,见下面的问题)。

该应用程序是一个经典的networking应用程序,后端有一个mysql&redis数据库,并有一个直接为静态资产提供服务的代理服务器。 像depends_on ,环境variables和networking的一些细节故意省略。

这是我现在使用的:

 version: "2" services: proxy: build: context: ./apps/nginx ports: - "80:80" - "443:443" volumes: - /etc/localtime:/etc/localtime:ro - ./data/web/assets:/var/www/assets:ro - ./data/web/puma:/var/run/puma web: build: context: ./apps/rails volumes: - /etc/localtime:/etc/localtime:ro - ./data/web/assets:/srv/app/public/assets - ./data/web/puma:/var/run/puma db: image: mysql:5.7 volumes: - /etc/localtime:/etc/localtime:ro - ./data/mysql:/var/lib/mysql redis: image: redis volumes: - /etc/localtime:/etc/localtime:ro - ./data/redis:/data 

以下是我计划用于下一版本的内容:

 version: "2" services: proxy: build: context: ./apps/nginx ports: - "80:80" - "443:443" volumes_from: - localtime - web-assets-data:ro - web-puma-data web: build: context: ./apps/rails volumes_from: - localtime - web-assets-data - web-puma-data db: image: mysql:5.7 volumes_from: - localtime - db-data redis: image: redis volumes_from: - localtime - redis-data web-assets-data: image: ubuntu:14.04 volumes: - ./data/web/assets:/srv/app/public/assets web-puma-data: image: ubuntu:14.04 volumes: - ./data/web/puma:/var/run/puma db-data: image: ubuntu:14.04 volumes: - ./data/mysql:/var/lib/mysql redis-data: image: ubuntu:14.04 volumes: - ./data/redis:/data localtime: image: ubuntu:14.04 volumes: - /etc/localtime:/etc/localtime:ro 

我认为新版本的好处是:

  • 数据在哪里更清楚。
  • 在多个容器之间共享数据更容易(不需要记住当前版本中的确切path)。

所以,我的问题是:

  • 在容器和容器数据之间使用不同的图像有问题吗? 例如,应该db-data使用mysql:5.7而不是ubuntu:14.04
  • 说顶层的volumes: key没有办法让“存储在主机上的特定path上的数据”是正确的吗?
  • 使用命名卷(带有顶级“卷”键)的优点和不便之处是什么? 我应该更喜欢通过主机挂载使用命名卷吗? 工作stream程比较会很好。

在容器和容器数据之间使用不同的图像有问题吗?

一点也不,这是正常的。

说顶层的volume:key没有办法让“存储在主机上的特定path上的数据”是正确的吗?

正确。 顶级卷密钥用于已命名的卷,但无法命名主机卷。

使用命名卷(带有顶级“卷”键)的优点和不便之处是什么? 我应该更喜欢通过主机挂载使用命名卷吗? 工作stream程比较会很好。

命名卷让你使用卷驱动,所以你可以将数据存储在本地文件系统以外的地方。 然而,命名卷需要用数据进行初始化,所以你可能需要添加一个脚本或其他东西来做到这一点。