系列教程丨用 Docker 探索开源软件 —— PostgreSQL(二)

640?wx_fmt=jpeg


出品丨Docker公司(ID:docker-cn)

编译丨小东

每周一、三、五晚6点10分  与您不见不散!

说在前面


Docker 的一大优点是可以让您快速使用它来试用应用程序,而无需直接在开发人员的计算机上安装它。如果您不想在自己的计算机上安装 Java 或 erlang 等运行时环境,那么您就可以不安装它们,因为容器封装了所有依赖项,并在删除时可以不留下任何痕迹。在上一篇文章《系列教程丨用 Docker 探索开源软件 —— PostgreSQL(一)》中,我们介绍了 Docker Volumes 是如何运行的,今天,我将带来本篇文章的第二部分内容。


&


停止并重新启动容器


让我们验证一下,如果我们停止并重新启动容器,我们将不会丢失数据。

docker stop postgres1

docker start postgres1


与其再次连接到这个容器,不如从另一个连接的容器进行测试,使用与在 Redis 演示中看到的连接容器相同的技术。

docker run -it --rm --link postgres1:pg --name client1 postgres sh



启动“psql”,但连接到另一个容器(-h),我们给它们命名为“pg”:

# psql -U postgres -h pg mydb


现在,通过这个“client1”容器,我们可以访问存储在“postgres1” 数据库容器中的数据:

mydb=# SELECT * FROM people;

 id | name

----+------

  1 | Mark

(1 row)


现在,我们可以退出“psql”以及我们的 shell,这将删除“client1”容器,因为我们使用了“—rm”标志,以便在容器退出时自动删除该容器。

mydb=# \q

# exit



640?wx_fmt=png


检查 volume


我们可以找到有关使用“docker volume inspect”创建的 volume 信息,包括我们本地磁盘上存储该 volume 中数据的位置。下面是一些典型的输出:

$ docker volume inspect postgres-data

[

    {

        "CreatedAt": "2018-09-03T19:50:23Z",

        "Driver": "local",

        "Labels": null,

        "Mountpoint": "/var/lib/docker/volumes/postgres-data/_data",

        "Name": "postgres-data",

        "Options": null,

        "Scope": "local"

    }

]


如果我们查看 Docker 主机上的本地文件夹,我们就可以看到该 volume 中存储的所有数据。

$ ls /var/lib/docker/volumes/postgres-data/_data/

PG_VERSION            pg_multixact          pg_tblspc

base                  pg_notify             pg_twophase

global                pg_replslot           pg_wal

pg_commit_ts          pg_serial             pg_xact

pg_dynshmem           pg_snapshots          postgresql.auto.conf

pg_hba.conf           pg_stat               postgresql.conf

pg_ident.conf         pg_stat_tmp           postmaster.opts

pg_logical            pg_subtrans           postmaster.pid


显然,Docker volume 不需要存储在 Docker 主机上的本地磁盘中。在像 Azure 这样的生产环境中,您很可能将 Azure 文件共享作为 volume 挂载。

640?wx_fmt=png


丢弃容器,但保留数据


让我们使用一个命令停止并删除“postgres1”容器(-f强制它删除正在运行的容器)。因为数据存储在 volume 中,所以它仍然是安全的。

docker rm -f postgres1


640?wx_fmt=png


将现有 volume 附加到新容器


现在让我们启动一个名为postgres2的全新容器,但是要附加包含我们现有数据库的“postgres-data”volume:

docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data --name postgres2 postgres


启动后,让我们在其中运行一个“psql”会话,并检查数据库、表和数据是否仍然存在且正确:

docker exec -it postgres2 sh

# psql -U postgres mydb

mydb=# SELECT * FROM people;

 id | name

----+-------

  1 | Mark

(1 row)


然后再次退出:

mydb=# \q

# exit


640?wx_fmt=png


清理一切


现在,我们来清理一下。我们不仅要删除“postgres2”容器,还要删除“postgres-data”volume。所以,此时数据库的内容也被删除了。

docker rm -f postgres2

docker volume rm postgres-data



640?wx_fmt=png


总  结


如您所件,Docker 不仅可以让您轻松使用 PostgreSQL,还可以轻松配置 volume,从而可以独立于容器的生命周期管理数据的生命周期。如果愿意,我们还可以直接连接到5432端口上的这个 PostgreSQL 容器,并将其用于一些本地开发。


在下一篇系列文章中,我将向您展示如何在容器中运行 Elasticsearch,这将使我们有机会探索 docker-compose 的实际应用。

640?wx_fmt=png


点击下列标题,阅读更多干货



如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!

   640?wx_fmt=png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值