docker-compose为一个纯数据容器和web服务器postgresql

我正在使用docker-compose.yml文件为我的django nginx postgresql和纯数据容器构build3个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”命令来重新构builddocker镜像并重新启动容器,但不知道这是否正确或最好的方法。

我没有使用postgresql的经验,但是从docker的angular度来看,这个方法看起来非常好。 您的数据将在数据容器中。 它不会受到docker-compose build && docker-compose up 。 拉曼·古普塔在他的文章中对这个主题做了一个很好的介绍。

他还强调,你需要适合纯数据容器的思维方式。 对于你来说,这意味着你可以拥有一个“备份容器” 。 使用postgres映像并从中运行一个新的容器,该容器使用--volumes-from myweb_data_1 。 现在在容器中,你有来自postgresql的正确的工具,并访问数据容器中的数据库。

同样,postgresql可能是不同的,但对于MySQL这是方式,这是完美的,是我理解一个最佳实践。 顺便说一句,mysql是一个服务器。 所以你会开始一个新的容器,并链接它( – --link )对你的myweb_db_1容器。 不知道postgresql的行为如何。

你可以试试这个:

docker run –volumes-from myweb_data_1 -v $(pwd):/ backup ubuntu tar cvf /backup/backup.tar