Docker配置PostgreSQL数据本地持久化
卷的原理图:

主机中的本地目录作为Docker容器内的持久存储卷装载,以便在主机和Docker容器之间共享数据。如果主机希望访问或定期备份在Docker容器内运行的DB服务器写入文件夹的数据或数据库,则此方法非常有用。
创建本地数据卷
#创建本地卷
[root@tar1 ~]# docker volume create pgdata
create : 后面写自定义卷名
创建并运行容器
[root@tar1 ~]# docker run -v pgdata:/var/lib/postgresql/data --name dockerPG11 -e POSTGRES_PASSWORD=123456 -p 54322:5432 -d postgres
-v:pgdata 是刚刚创建的本地卷名称;/var/lib/postgresql/data是容器中postgres数据库的数据存储位置,把容器中的数据挂载到本地数据卷中;
卷(volume)是绕过容器的文件系统,直接将数据写到host主机上,只是volume是被docker管理的,docker下所有的volume都在host机器上的指定目录下/var/lib/docker/volumes。

[root@tar1 volumes]# ll /var/lib/docker/volumes
总用量 32
drwxr-xr-x. 3 root root 19 8月 23 18:27 14145904c49f663d8345ef789a9c352046a6a6d1ccd49f4d9e2dfd1a141f6707
drwxr-xr-x. 3 root root 19 8月 23 21:26 54943648b14cc92532aa20c95e8c7d70404a344eb427750aefd873b1b2003c74
drwxr-xr-x. 3 root root 19 8月 23 17:40 59aca22a107ede60abc1795edd9d7a46ff5799850a43f536a91598f74ffa7e01
drwxr-xr-x. 3 root root 19 8月 23 17:46 666f867e5062405683033d419458a85944568a007d6e82720149f48d306c4741
drwxr-xr-x. 3 root root 19 8月 23 17:26 7b3400e3155b8a3f3950f6a495883532de20270c9811de7ea0ab5e31d944a165
drwxr-xr-x. 3 root root 19 8月 23 17:42 8f56e930685166205e4d9fa5730f844aa7b0e0d1dc503e4ec4dd529023a5e17a
drwxr-xr-x. 3 root root 19 8月 23 17:43 9cc314ca59489507b54a0f9122d9ce4fc929c99a885dab2bcd8b42df516cfa27
drwxr-xr-x. 3 root root 19 8月 23 17:48 c5c58f45d54442366d2dff3d939988601a9b46c57d2a750ebeb3c087d1e27d10
drwxr-xr-x. 3 root root 19 8月 23 19:43 d07687b3480ad42bc1d66fc7f609e831d10e917dbc6f95447af69113e8448d56
-rw-------. 1 root root 65536 8月 23 21:26 metadata.db
drwxr-xr-x. 3 root root 19 8月 23 19:43 pgdata

测试持久化
查看容器

[root@tar1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
acb5bf2a4a26 postgres:11.5 "docker-entrypoint..." 9 seconds ago Up 8 seconds 0.0.0.0:54322->5432/tcp dockerPG11

进入容器
[root@tar1 ~]# docker exec -it dockerPG11 bash
登录数据库

#切换postgres用户
[root@acb5bf2a4a26 ~]# su postgres #登录数据库
[postgres@acb5bf2a4a26 ~]# psql -U postgres -W postgres=#

创建数据表

postgres=# CREATE TABLE season (id int, name varchar(80));
CREATE TABLE
^
postgres=# INSERT INTO season (id,name) VALUES (1, 'March');
INSERT 0 1
postgres=# SELECT * FROM season;
id | name
----+-------
1 | March
(1 行记录) postgres=# CREATE TABLE t_test (x numeric);
CREATE TABLE
postgres=# INSERT INTO t_test SELECT random()
postgres-# FROM generate_series(1, 50000000);
INSERT 0 50000000
postgres=# select * from t_test limit 5;
x
--------------------
0.0994161088019609
0.887578224763274
0.232774924486876
0.416146846953779
0.557969538029283
(5 行记录)

退出容器
#快捷键
Ctrl + P + Q
重启容器

#关闭容器
[root@tar1 ~]# docker stop dockerPG11
#启动容器
[root@tar1 ~]# docker start dockerPG11

进入容器查看数据是否存在 (存在)

postgres=# SELECT * FROM season;
id | name
----+-------
1 | March
(1 行记录)

此时删除dockerPG11容器
#删除容器
[root@tar1 ~]# docker rm -f dockerPG11
再创建dockerPG22容器,把之前的写了数据的数据卷挂在到新的容器上
#创建容器
[root@tar1 ~]#docker run -v pgdata:/var/lib/postgresql/data --name dockerPG22 -e POSTGRES_PASSWORD=123456 -p 54322:5432 -d postgres
进入dockerPG22容器
#删除容器
[root@tar1 ~]#docker exec -it dockerPG22 bash
查看数据库表
#切换postgres用户
[root@acb5bf2a4a26 ~]# su postgres #登录数据库
[postgres@acb5bf2a4a26 ~]# psql -U postgres -W postgres=# SELECT * FROM season;
id | name
----+-------
1 | March
(1 行记录)
数据成功挂在到新容器上,且能正常使用,持久化成功。
docker查看卷列表
#查看卷列表命令
[root@tar1 ~]# docker volume ls

[root@tar1 ~]# docker volume ls
DRIVER VOLUME NAME
local 14145904c49f663d8345ef789a9c352046a6a6d1ccd49f4d9e2dfd1a141f6707
local 59aca22a107ede60abc1795edd9d7a46ff5799850a43f536a91598f74ffa7e01
local 666f867e5062405683033d419458a85944568a007d6e82720149f48d306c4741
local 7b3400e3155b8a3f3950f6a495883532de20270c9811de7ea0ab5e31d944a165
local 8f56e930685166205e4d9fa5730f844aa7b0e0d1dc503e4ec4dd529023a5e17a
local 9cc314ca59489507b54a0f9122d9ce4fc929c99a885dab2bcd8b42df516cfa27
local c5c58f45d54442366d2dff3d939988601a9b46c57d2a750ebeb3c087d1e27d10
local d07687b3480ad42bc1d66fc7f609e831d10e917dbc6f95447af69113e8448d56
local pgdata

查看指定卷信息
#指定卷信息命令
[root@tar1 ~]# docker volume inspect pgdata

[root@tar1 ~]# docker volume inspect pgdata
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/pgdata/_data",
"Name": "pgdata",
"Options": {},
"Scope": "local"
}

删除卷
#删除卷命令
[root@tar1 ~]# docker volume rm pgdata
Docker配置PostgreSQL数据本地持久化的更多相关文章
- iOS数据本地持久化
p1:归档.Preference(NSUserDefault).沙盒存储 iOS开发中本地存储主要有三种形式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedAr ...
- Unity常见的三种数据本地持久化方案
做游戏的时候常常会有数据配置或者存读档的需求,本文整理了常用的几种解决方案,分别是Unity自带的PlayerPrefs类,XML文件和Json文件. 一. PlayerPrefs 这是Unity自带 ...
- Unity本地持久化类Playerprefs使用详解
一.PlayerPrefs是什么? PlayerPrefs是Unity3d提供了一个用于数据本地持久化保存与读取的类.工作原理十分简单,就是以key-value的形式将数据保存在本地,然后在代码中可以 ...
- Docker Swarm volume 数据持久化
Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. v ...
- 【Docker】:使用docker安装redis,挂载外部配置和数据
普通安装 1.拉取镜像,redis:4.0 docker pull redis:4.0 2.创建redis容器名"redistest1",并开启持久化 docker run -d ...
- 本地部署 Misago Docker + 配置 HTTPS 笔记
最近答应帮朋友做个论坛网站,想借此机会捡起 Python 在 GitHub 找了一圈,打算借用以 Python+Django 开发的 Misago 这个论坛系统 由于作者在今年更新的 Misago 0 ...
- ArcGIS平台中PostgreSQL数据连接配置总结
通常用户在使用要素服务时,要求数据必须是存放在空间数据库中的.同时,需要将数据库注册到ArcGIS for Server,这样在发布服务时就不需要进行数据拷贝,从而可以节省磁盘空间及服务发布时间.以下 ...
- 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(云端电脑(Windows)安装配置数据库,使用本地Navicat for MySQL和手机APP 远程连接测试)
3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装配置数据库,使用Navicat for MySQL和手机APP 连接测试) 根据前面的教程把软件复制到云 ...
- Docker Swarm bind 数据持久化
Docker Swarm bind 数据持久化 bind:主要将工作节点宿主级文件或目录,同步挂载到容器中. 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节 ...
随机推荐
- 使用PostMan Canary测试受Identity Server 4保护的Web Api
在<Asp.Net Core: Swagger 与 Identity Server 4>一文中介绍了如何生成受保护的Web Api的Swagger文档,本文介绍使用PostMan Cana ...
- Java高性能本地缓存框架Caffeine
一.序言 Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观锁技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存. 二.缓存简介 ...
- [系统优化]Centos系统优化
在运维工作中,我们发现Linux系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行.以下是我在日常生产应用的优化操作. 一.文件打开数限制优化 描述 生产下要调整 ...
- jQuery下载安装使用教程
一:下载jQuery 下载链接:jQuery官网 中文文档:jQuery AP中文文档 1.jQuery版本 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增.因此一般项目来说 ...
- (反射+内省机制的运用)处理jdbc的结果集
1.原理:反射+内省 2.反射:动态创建对象 3.内省:动态处理对象的属性值 4.结果集处理: (1)把结果集中的一行数据,封装成一个对象,专门针对结果集中只有一行数据的情况. (2)处理结果集--多 ...
- 生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法?
生产环境想要对某个Pod排错.数据恢复.故障复盘有什么办法? k8s考点灵魂拷问9连击之5 考点之简单描述一下k8s副本集ReplicaSet有什么作用? 考点之为什么ReplicaSet将取代Rep ...
- 【C# IO 操作】C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
代码实现 在C盘添加一个文件夹,并在文件夹内部,新建一个文本文件,如图所示: 该文件夹下,新建一个文本文件,如图所示: 为文件添加完全控制权限: /// <summary> /// 为文件 ...
- 【Oracle】PLSQL如何更新、提交数据库中数据
转至:https://blog.csdn.net/Bee_AI/article/details/89279612 Oracle更新单表数据时,一般使用SELECT--FOR UPDATE语句,这条语句 ...
- MySQL 学习-进阶
MySQL高级学习 一.MySQL 事务 1.1.事务的概念 一条或多条 SQL 语句组成一个执行单元,其特点是这个单元要么同时成功要么同时失败,单元中的每条 SQL 语句都相互依赖,形成一个整体,如 ...
- Qt:QSqlQuery
0.说明 QSqlQuery提供了执行SQL代码的方法. QSqlQuery封装了在QSqlDatabase中查询.检索数据的相关函数.它可以用来执行如SELECT.INSERT.UPDATE.DEL ...