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程比较会很好。
命名卷让你使用卷驱动,所以你可以将数据存储在本地文件系统以外的地方。 然而,命名卷需要用数据进行初始化,所以你可能需要添加一个脚本或其他东西来做到这一点。