zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux安装步骤
    Python邮件发送
    拉链表
    Hive
    Shell笔记
    Hadoop入门
    Thinkphp手把手练习
    Shell学习日记
    Linux安装mysql数据库
    Oracle集合操作
  • 原文地址:https://www.cnblogs.com/yangyangming/p/13502405.html
Copyright © 2011-2022 走看看