我对docker compose文件中的命名卷的功能有些困惑,特别是在备份/还原我的应用程序时。
我实际上正在测试此dockercompose文件:
version: '2'
services:
django:
build:
context: "{{ build_dir }}/docker/django"
depends_on:
- db
environment:
[...]
volumes:
- code:/data/code
- www:/var/www
- conf:/data/conf
networks:
- front
- db
expose:
- "8080"
entrypoint: "/init"
db:
build:
context: "{{ build_dir }}/docker/postgres"
environment:
[...]
volumes:
- data:/var/lib/postgresql/data
networks:
- db
volumes:
data:
www:
code:
conf:
networks:
front:
external:
name: "proxy_nw"
如文档所述,我尝试使用命名卷而不是仅数据容器。但是我应该如何备份我的数据?
使用仅数据容器,我本来可以完成
docker run --rm --volume-from DOC backup_container save
的,这确实很容易。
现在,我阅读 in this topic,应该使用类似
docker run --rm --volume data --volume www --volume code --volume conf backup_container save
的名称。这不是那么简单,因为我有许多具有不同类型和卷名的应用程序,因此这意味着我的保存数据的命令对于每个应用程序都必须有所不同。它使自动化过程复杂化。
编辑:实际上此语法
docker run --volume data --volume www container_image my_command
不正确。
它需要容器内的挂载点,因此
docker run --volume data:/somewhere --volume www:/somewhereelse container_image my_command
。
因此,与备份容器一起使用甚至更加复杂。
那么,这种情况下的最佳实践是什么?我是否应该对所有容器仅使用一个命名卷?
请您参考如下方法:
实际上,应采用与官方文档中相同的方式进行。数据卷容器将其数据存储在“虚拟根目录”中,因此您应该使用下一条命令进行备份:
docker run --rm \
--volume [DOCKER_COMPOSE_PREFIX]_[VOLUME_NAME]:/[TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA] \
--volume $(pwd):/[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE] \
ubuntu \
tar cvf /[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE]/[BACKUP_FILENAME].tar /[TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA]
哪里:
将数据取回卷(还原):
docker run --rm \
--volume [DOCKER_COMPOSE_PREFIX]_[VOLUME_NAME]:/[TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP] \
--volume $(pwd):/[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE] \
ubuntu \
tar xvf /[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE]/[BACKUP_FILENAME].tar -C /[TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP] --strip 1
哪里: