我正在使用docker-compose.yml文件为我的django Nginx postgresql和一个纯数据容器构建3个docker容器.
这是我的docker-compose.yml
data:
# pure data container
image: busyBox
volumes:
- /etc/postgresql
- /var/log/postgresql:/var/log/postgresql
- /var/lib/postgresql
- /var/log/Nginx:/var/log/Nginx
- /var/log/supervisor:/var/log/supervisor
db:
image: postgres
volumes_from:
- data
web:
build: .
ports:
- "80:80"
- "443:443"
links:
- db
volumes_from:
- data
$docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc26b3a72a02 myweb_web:latest "supervisord -n" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp,0.0.0.0:443->443/tcp myweb_web_1
14763a9f68d1 postgres:latest "/docker-entrypoint. 6 minutes ago Up 6 minutes 5432/tcp myweb_db_1
37598892038b busyBox:latest "/bin/sh" 6 minutes ago Exited (0) 6 minutes ago myweb_data_1
我担心如何备份和恢复存储在纯数据容器(myweb_data_1)中的postgresql数据.我使用“docker-compose build&& docker-compose up”命令来重建docker镜像并重新启动容器,如果我更新代码,但不确定这是否正确或最佳方式.
最佳答案
我没有postgresql的经验,但从docker的角度来看,这种方法看起来非常好.您的数据将位于数据容器中.它不会受到docker-compose build&& amp;码头工人组成. Raman Gupta在他的article中对这个主题进行了很好的介绍.
在那里他还强调你需要适用于仅数据容器的正确思维方式.对您而言,这意味着您可以拥有“备份容器”.使用postgres图像并从中运行一个新容器,该容器使用来自myweb_data_1的–volumes.现在,在容器中,您可以使用postgresql中的适当工具并访问数据容器中的数据库.
同样,postgresql可能会有所不同,但对于MysqL来说,这就是方法,它完全正常,并且是我理解的最佳实践.顺便说一句,MysqL是一个服务器.因此,您将启动一个新容器并将其链接(–link)与myweb_db_1容器相关联.不确定postgresql的行为方式.