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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: Docker 的一大优点是可以让您快速使用它来试用应用程序,而无需直接在开发人员的计算机上安装它。如果您不想在自己的计算机上安装 Java 或 erlang 等运行时环境,那么您就可以不安装它们......

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五,与您不见不散!


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

检查 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 挂载。


丢弃容器,但保留数据

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

docker rm -f postgres1

将现有 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

清理一切

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

docker rm -f postgres2
docker volume rm postgres-data

总 结

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

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

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
运维 Devops 持续交付
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
在企业IT建设中,软件部署常面临效率低、易出错等问题。通过Docker与自动化工具,可实现高效、标准化和可追溯的部署流程,提升企业应用交付效率,降低运维门槛,助力中小企业实现自动化部署。
167 5
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
kde
|
3月前
|
文件存储 数据安全/隐私保护 开发者
群晖NAS Docker镜像源加速配置教程
本教程介绍了群晖NAS用户如何通过配置轩辕镜像加速服务提升Docker镜像拉取速度。内容包括配置前准备、详细设置步骤及日常使用说明,帮助用户快速完成配置并享受高效稳定的镜像下载体验。
kde
1962 59
|
3月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
346 11
|
4月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
就这样,你成功地用魔法召唤出了RabbitMQ,还把它和你的应用程序连接了起来。现在,消息会像小溪流水一样,在你的系统中自由流淌。别忘了,兔子们不喜欢孤独,他们需要你细心的关怀,不时地监控它们,确保他们的世界运转得井井有条。
246 18
|
4月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
至此,这次神秘而简明的部署之旅告一段落。祝你在利用RabbitMQ打造消息队列时,一切顺风顺水!
195 8
|
7月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
399 30
|
9月前
|
弹性计算 Ubuntu Linux
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS自动化部署。支持Ubuntu 22.04/20.04、CentOS 7.7-7.9及Alibaba Cloud Linux 3.2104 LTS。前提条件:ECS实例需运行中且有公网。步骤:选择Docker扩展并安装,验证成功通过命令`docker -v`查看版本号。
654 79
|
8月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
201 20
|
11月前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
10348 3
【最新版正确姿势】Docker安装教程(简单几步即可完成)