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 管理节 ...
随机推荐
- mysql linux 导出数据
1.mysql -hxx -uxx -pxx -e 'select "" name from a' db数据库 > file 2.导出的文件notepad++打开 3.新建e ...
- 实例详解 Java 死锁与破解死锁
锁和被保护资源之间的关系 我们把一段需要互斥执行的代码称为临界区.线程在进入临界区之前,首先尝试加锁 lock(),如果成功,则进入临界区,此时我们称这个线程持有锁:否则呢就等待,直到持有锁的线程解锁 ...
- wireshark-1
wireshark-1题目来源: 广西首届网络安全选拔赛题目描述:黑客通过wireshark抓到管理员登陆网站的一段流量包(管理员的密码即是答案). flag提交形式为flag{XXXX}附件解压后, ...
- 教你快速区分传统报表和商业智能BI
很多人分不清楚,传统报表和商业智能BI之间的区别?有些人认为,BI就是做报表的,其实不然,报表只是BI的一部分,报表是关于过去和现状的展示,而BI是关于如何通过分析数据,帮助决策者找到改变和提高的方案 ...
- 【C# TAP 异步编程】一 、async 修饰符(标记)
async的作用: 1.async是一个标记,告诉编译器这是一个异步方法. 2.编译器会根据这个标志生成一个异步状态机. 3.编译器将原异步方法中的代码清空,写入状态机的配置,原先异步方法中的代码被封 ...
- 关于C#理解装箱与拆箱
目录 1.理解装箱 2.理解拆箱 3.生成的 IL 代码 4.实际应用 5.小结 1.理解装箱 简单地说,装箱就是将一个值类型的数据存储在一个引用类型的变量中. 假设你一个方法中创建了一个 int 类 ...
- ORACLE 12c RAC日常维护命令
转至:https://blog.51cto.com/ixdba/901545 CRS提供了很多命令可以管理和查看集群服务状态,常用的有crs_stat.crs_start.crs_stop.crsct ...
- cmd:WIN7操作系统下cmd窗口下的复制粘贴
1.右击cmd的顶部栏,点开属性 2.在 选项 下,勾选"快速编辑模式" 3.按住鼠标左键标注需要复制的区域 再点击一下右键,则上文的标记区域就已经被复制了,可以通过ctrl+v进 ...
- 使用Vscode和Cmake打造跨平台的C++ IDE
准备工作 Viusal Studio Code 64位 :Download Visual Studio Code - Mac, Linux, Windows Cmake 3.4 :Download | ...
- MySQL主从复制介绍:使用场景、原理和实践
MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借 ...