6

我正在使用 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 映像并重新启动容器,但不确定这是否正确或最好的方法。

4

2 回答 2

3

我没有使用 postgresql 的经验,但从 docker 的角度来看,这种方法似乎非常好。您的数据将在数据容器中。不会受到影响docker-compose build && docker-compose upRaman Gupta 在他的文章中很好地介绍了这个主题。

他还强调,对于纯数据容器,您需要正确的心态。对您而言,这意味着您可以拥有一个“备份容器”。使用该postgres图像并从中运行一个新容器,该容器使用--volumes-from myweb_data_1. 现在在容器中,您确实拥有来自 postgresql 的适当工具,并且可以访问数据容器中的数据库。

同样,postgresql 可能会有所不同,但对于 mysql,这是一种方式,它工作得非常好,并且据我所知是最佳实践。顺便说一句,mysql是一个服务器。因此,您将启动一个新容器并将其 ( --link) 链接到您的myweb_db_1容器。不确定 postgresql 的行为方式。

于 2015-09-21T12:04:40.333 回答
0

你可以试试这个:

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

于 2015-05-13T15:09:04.730 回答