docker-在主机上编写 v2 命名卷和卷
docker-compose v2 named volumes and volumes on host
我正在寻找有关如何制作 docker-compose.yml 版本 2 的最简洁方法的指导:
- 容器状态与容器明显分开。
- 为简单起见,已将容器状态安装到主机(单个数据点,只需在主机上备份 /data 即可)。我对此持开放态度,请参阅下面的问题)。
该应用程序是一个经典的网络应用程序,后端有一个 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
我认为新版本的好处是:
- 数据在哪就更清楚了
- 多个容器之间共享数据更容易(无需像当前版本那样记住确切的路径)。
所以,我的问题是:
- 在容器及其容器数据之间使用不同的图像是否有问题?例如,
db-data
应该使用 mysql:5.7
而不是 ubuntu:14.04
?
- 没有办法让 "data stored at a specific path on the host" 具有顶级
volumes:
键,这样说对吗?
- 使用命名卷(使用顶级 "volumes" 密钥)有哪些优点和不便之处?我应该更喜欢使用命名卷而不是主机挂载吗?工作流程比较会很好。
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.
命名卷让您可以使用卷驱动程序,因此您可以将数据存储在本地文件系统以外的其他地方。但是,命名卷需要用数据初始化,因此您可能需要添加脚本或其他东西来执行此操作。
我正在寻找有关如何制作 docker-compose.yml 版本 2 的最简洁方法的指导:
- 容器状态与容器明显分开。
- 为简单起见,已将容器状态安装到主机(单个数据点,只需在主机上备份 /data 即可)。我对此持开放态度,请参阅下面的问题)。
该应用程序是一个经典的网络应用程序,后端有一个 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
我认为新版本的好处是:
- 数据在哪就更清楚了
- 多个容器之间共享数据更容易(无需像当前版本那样记住确切的路径)。
所以,我的问题是:
- 在容器及其容器数据之间使用不同的图像是否有问题?例如,
db-data
应该使用mysql:5.7
而不是ubuntu:14.04
? - 没有办法让 "data stored at a specific path on the host" 具有顶级
volumes:
键,这样说对吗? - 使用命名卷(使用顶级 "volumes" 密钥)有哪些优点和不便之处?我应该更喜欢使用命名卷而不是主机挂载吗?工作流程比较会很好。
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.
命名卷让您可以使用卷驱动程序,因此您可以将数据存储在本地文件系统以外的其他地方。但是,命名卷需要用数据初始化,因此您可能需要添加脚本或其他东西来执行此操作。