天天看點

Docker部署postgresql挂載資料卷

作者:千語碼農

前言

将postgresql運作的環境打包形成docker容器運作,服務運作随着容器的啟動和關閉沒什麼問題,但是對于資料來說,我們是希望能夠持久化的,不能删除容器,資料也被删除了,通過容器資料卷可以有效解決這個問題。

什麼是容器資料卷?

卷就是目錄或者檔案,存在一個或者多個容器中,由docker挂載到容器,但不屬于聯合檔案系統,是以能夠繞過 Union File System , 提供一些用于持續存儲或共享資料的特性:卷的設計目的就是資料的持久化,完全獨立于容器的生存周期,是以即使容器删除了,挂載的資料卷也不會被删除。

資料卷特點

  1. 資料卷可在容器之間共享或重用資料。
  2. 卷中的更改可以直接生效。
  3. 資料卷中的更改不會影響到原來的鏡像。
  4. 資料卷的生命周期一直持續到沒有容器使用它為止。

建立檔案夾

# 建立資料卷檔案夾
mkdir -p /data-volume/pgsql-volume/data /data-volume/pgsql-volume/logs
           

部署

# 拉取官方指定版本Postgresql鏡像
docker pull postgres:12.4

# 運作鏡像并挂載主控端路徑
docker run -it -d --name postgresql12 -v /data-volume/pgsql-volume/data:/var/lib/postgresql/data -p 54321:5432 -e POSTGRES_PASSWORD=1qazZSE$ postgres:12.4

# 将資料庫日志同步到主控端檔案
docker logs -f postgresql12 >> /data-volume/pgsql-volume/logs/pgsql.log &

# 進入容器
docker exec -it postgresql12 /bin/bash
           

鏡像本地儲存與載入

# 儲存
docker save -o postgresql12-4.tar postgres:12.4 
#-o:指定儲存的鏡像的名字;postgresql12-4.tar:儲存到本地的鏡像名稱;postgres:12.4:鏡像名字和版本号,可通過"docker images"檢視

# 載入
docker load --input postgresql12-4.tar 或 docker load < postgresql12-4.tar
           

阿裡鏡像

需要注冊阿裡雲賬号
登入後,[容器鏡像服務/執行個體清單/鏡像倉庫/命名空間] => 建立命名空間
[鏡像倉庫/倉庫名稱] => 建立倉庫名稱(我這裡建立的名稱是docker)
建立成功後,[鏡像倉庫/基本資訊]中包含鏡像拉取、推送等說明
docker login --username=XXXXXXXX registry.cn-qingdao.aliyuncs.com

#從Registry中拉取鏡像
docker pull registry.cn-qingdao.aliyuncs.com/XXXXXXXX/docker:[鏡像版本号]
例:
docker pull registry.cn-qingdao.aliyuncs.com/XXXXXXXX/docker:12.4

#将鏡像推送到Registry
docker tag 492fb9ae4e7a registry.cn-qingdao.aliyuncs.com/mythsawyer/docker:12.4
# 說明:492fb9ae4e7a是docker images指令檢視的image id, 12.4是版本
docker push registry.cn-qingdao.aliyuncs.com/XXXXXXXX/docker:12.4
           

知識補充

# 設定容器自啟停
docker run --restart=always
# 如果容器已經啟動,可以通過update指令進行設定,--restart=no(關閉)
docker update --restart=always <CONTAINER ID>

例:
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED        STATUS          PORTS                                         NAMES
e8043fe7101f   alpine:latest   "/bin/sh"                2 hours ago    Up 38 seconds   0.0.0.0:8088->80/tcp, :::8088->80/tcp         php7.2-alpine
318302849dc6   postgres:12.4   "docker-entrypoint.s…"   22 hours ago   Up 3 seconds    0.0.0.0:54321->5432/tcp, :::54321->5432/tcp   postgresql12

# 設定第一個容器自啟停
docker update --restart=always e8043fe7101f

#重新開機後,設定的容器自動啟動
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           COMMAND     CREATED       STATUS        PORTS                                   NAMES
e8043fe7101f   alpine:latest   "/bin/sh"   2 hours ago   Up 1 second   0.0.0.0:8088->80/tcp, :::8088->80/tcp   php7.2-alpine