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 管理节 ...
随机推荐
- CobaltStrike逆向学习系列(11):自实现 Beacon 检测工具
这是[信安成长计划]的第 11 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 检测原理 0x02 检测方案 0x03 存在的问题 0x04 解决方案 0x05 示例代码 0x06 ...
- react 也就这么回事 04 —— 元素渲染
为了便于后续理解,我们再来回顾和总结前面几个章节的内容 1 元素及其创建 元素是构成 React 应用的最小砖块. 元素描述了你在屏幕上想看到的内容. const element = <h1&g ...
- 在windev中实现BS架构级的灵活排版
windev是CS架构,但却能够实现BS架构级的灵活排版.玩过CS架构的老铁们,感受应会都如我,如获新生!因为苦于没有一张好画皮久矣!在windev中,要实现灵活,专业,自适应和非常丰富的排版,可以关 ...
- 【C#程序集】为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?
因为 .NET Core 的控制台应用默认是生成 dll 文件,而没有对应的 exe 文件.如下图所示,是在VS中编译后生成的结果 图中看到的TestVisualizer.exe 只是一个快捷方式, ...
- Hadoop - MapReduce学习笔记(详细)
第1章 MapReduce概述 定义:是一个分布式运算程序的编程框架 优缺点:易于编程.良好的扩展性.高容错性.适合PB级以上数据的离线处理 核心思想:MapReduce 编程模型只能包含一个Map ...
- 2020.10.6 ThreadLocal
在多线程环境下,每个线程都有自己的数据.一个线程使用自己的局部变量比使用全局变量要好,因为局部变量不会被其他线程改变. 但是局部变量也存在问题--在函数调用的时候,传递起来很麻烦: def proce ...
- JZ-058-对称的二叉树
对称的二叉树 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目链接: 对称的二叉树 代码 /** * 标题:对称的二叉树 ...
- mysql什么时候会发生file sort
看了网上很多排名很靠前的博客,发现好多都讲错了!我开始按照博客来,没有怀疑,直到自己试了一下才发现是错的. file sort在面试中有时候会问到,这个其实挺能区分是不是真的了解order by的执行 ...
- application.properties文件常用配置
项目一直在用properties文件写配置,因为配置不是自己来写所以也从来没有研究过各个配置的含义,所以对很多配置也是一知半解,只是知道可以这样用,但是不知道为什么能这样用.自己抽空找了一下资料做个记 ...
- Nodejs在Linux环境安装
一.下载安装包 http://nodejs.cn/download/ 二.解压 tar -xf node-v14.3.0-linux-x64.tar.xz 三.配置 1.编辑文件vim /etc/pr ...