Docker配置PostgreSQL數據本地持久化


卷的原理圖:

CENTER_PostgreSQL_Community

主機中的本地目錄作為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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM