备份基于Docker的PostgreSQL数据库

wn25 9年前

【编者的话】本文属于基础入门类文章,作者介绍了如何备份基于Docker的PostgreSQL数据库。通过本文你可以学习到Docker容器的构建以及运行命令,并带你复习Docker容器的基本原理。

我发现,很多初学者都很关心Docker能否解决现有的一些问题,当然之前的解决方案也仍可以用。所以这篇文章的主题是使用Docker备份你的关系型数据库。我会通过具体的例子来介绍如何使用Docker来备份PostgreSQL。

如果你有一个运行在Docker中的PostgreSQL服务,我想说能把这两个非常酷的软件结合起来真的很赞。但是你是一个聪明的人,你知道你需要备份自己的数据库。但是怎么做了?PostgreSQL运行在Docker中,外界无法访问容器内的数据。

简单来说,你可以在PostgreSQL实例上运行pg_dump。具体到现在的问题,你可以用三种方式来运行:

第一,在容器内。根据你的Docker版本,使用nsenter或docker exec在容器内运行Shell命令,并将dump的数据共享到volume:

docker exec postgres pg_dump -h db -f /shared/backup.sql

但我们可以做的更好,理想的流程是无需在容器内启动Shell即可直接连接到PostgreSQL。有两种方式可以实现:

其一,可以使用容器化的方式。创建一个pg_dump容器,并在运行时将其连接到PostgreSQL容器。下面是pg_dump容器的Dockerfile:
FROM debian:wheezy    RUN apt-get update -y && \  apt-get install -y postgresql-client && \  apt-get clean -y    ENTRYPOINT ["/usr/bin/pg_dump"]

使用docker build命令来构建:
$ docker build -t pg_dump - < Dockerfile

注意:并不是一定要构建一个运行pg_dump的容器,你可以直接在PostgreSQL的容器中包含pg_dump容器的功能。我们这里只是为了练习。
构建完毕并运行:
$ docker run -it --link postgres:db pg_dump -h db

另外一个解决方案是Docker暴露容器的5342端口,我们直接运行pg_dump命令。

原文链接:Backuping PostgreSQL with Docker(翻译:采菊篱下 审校:李颖杰)
转自:http://dockerone.com/article/118