docker-在主机上编写 v2 命名卷和卷

docker-compose v2 named volumes and volumes on host

我正在寻找有关如何制作 docker-compose.yml 版本 2 的最简洁方法的指导:

该应用程序是一个经典的网络应用程序,后端有一个 mysql 和 redis 数据库,并且在代理后面有一个网络服务器,直接为静态资产提供服务。 depends_on、环境变量和网络等一些细节被有意省略。

这是我目前使用的:

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

我认为新版本的好处是:

所以,我的问题是:

Is it problematic to use different images between the container and it's container-data

一点也不,这很正常。

Is it correct to say that there's no way of having "data stored at a specific path on the host" with a top level volumes: key?

正确。顶级卷密钥用于命名卷,但您不能命名主机卷。

What are the advantages and inconveniences of using a named volume (with a top-level "volumes" key)? Should I prefer using a named volume over a host mount? Workflow comparisons would be nice.

命名卷让您可以使用卷驱动程序,因此您可以将数据存储在本地文件系统以外的其他地方。但是,命名卷需要用数据初始化,因此您可能需要添加脚本或其他东西来执行此操作。