docker-compose 用于纯数据容器和 Web 服务器 postgresql
Posted
技术标签:
【中文标题】docker-compose 用于纯数据容器和 Web 服务器 postgresql【英文标题】:docker-compose for a pure data container and web server, postgresql 【发布时间】:2015-06-23 16:35:24 【问题描述】:我正在使用 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 映像并重新启动容器,但不确定这是否正确或最好的方法。
【问题讨论】:
【参考方案1】:你可以试试这个:
docker run --volumes-from myweb_data_1 -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar
【讨论】:
【参考方案2】:我没有使用 postgresql 的经验,但从 docker 的角度来看,这种方法似乎非常好。您的数据将在数据容器中。它不会受到docker-compose build && docker-compose up
的影响。 Raman Gupta 在他的article 中很好地介绍了这个主题。
他还强调data-only-containers需要正确的心态。对您而言,这意味着您可以拥有一个“备份容器”。使用postgres
映像并从中运行一个新容器,该容器使用--volumes-from myweb_data_1
。现在在容器中,您确实拥有来自 postgresql 的适当工具,并且可以访问数据容器中的数据库。
同样,postgresql 可能会有所不同,但对于 mysql,这是一种方式,它工作得非常好,并且据我了解是最佳实践。顺便说一句,mysql是一个服务器。因此,您将启动一个新容器并将其 (--link
) 链接到您的 myweb_db_1
容器。不确定 postgresql 的行为方式。
【讨论】:
以上是关于docker-compose 用于纯数据容器和 Web 服务器 postgresql的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose:nodejs容器不与postgres容器通信