暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

打造包罗万“象”的PostgreSQL Docker环境

最近在研究PostgreSQL 12的过程中,涉及到一些10、11的版本的参数和性能对比,同时最新版本已经出到13了,为了把一些细节都研究透彻,了解各个版本之间的变化,看来不搞一套包罗万"象"的docker环境真的不行啊喂。

那我们就研究一下怎么搞环境吧。

1.首先安装docker软件

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce --nobest -y

2.启动docker

systemctl start docker
systemctl enable docker
systemctl status docker

3.直接下载最新镜像并启动

[root@centos8 ~]# docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
852e50cd189d: Pull complete 
0269cd569193: Pull complete 
879ff0b54097: Pull complete 
3114d3793d45: Pull complete 
0ee7737137c3: Pull complete 
3fff8dbf0e49: Pull complete 
6b78b1e21dd1: Pull complete 
ddecce665bec: Pull complete 
3fae122f28bd: Pull complete 
69289a4f935b: Pull complete 
56d6c36d6958: Pull complete 
d794b9ea73a0: Pull complete 
1738fda53f17: Pull complete 
bbcdf7c12dbd: Pull complete 
Digest: sha256:839d6212e7aadb9612fd216374279b72f494c9c4ec517b8e98d768ac9dd74a15

[root@centos8 ~]# docker run --name my_pg1 -e POSTGRES_PASSWORD=Hb_docker123 -d postgres 
9285362446ec87fc182789917dff69ee9f4a88c2a9764e67617f3bc4879ea181

4.使用docker exec进入Docker镜像

[root@centos8 ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS      NAMES
9285362446ec   postgres   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   5432/tcp   my_pg1e

[root@centos8 ~]# docker exec -it my_pg1 /bin/bash
root@9285362446ec:/# 

root@9285362446ec:/# su - postgres
postgres@9285362446ec:~$ 
postgres@9285362446ec:~$ psql
psql (13.1 (Debian 13.1-1.pgdg100+1))
Type "help" for help.

直接拖下来的是13.1版本的。

5.查看其他版本镜像

我们拖的是官方镜像,我们可以直接进入https://hub.docker.com/,然后搜索postgres

这里列出了一系列的版本,我们接下来再拖一个12.5版本。

6.安装PostgreSQL 12.5版本

这里先拖12.5的镜像。

[root@centos8 ~]# docker pull postgres:12.5
12.5: Pulling from library/postgres
852e50cd189d: Already exists 
0269cd569193: Already exists 
879ff0b54097: Already exists 
3114d3793d45: Already exists 
0ee7737137c3: Already exists 
3fff8dbf0e49: Already exists 
6b78b1e21dd1: Already exists 
ddecce665bec: Already exists 
ed463e4ad5d8: Pull complete 
7dd659587aa8: Pull complete 
783da3bac9da: Pull complete 
7eb279ddfee1: Pull complete 
c5700974a2b2: Pull complete 
53a78e432ca3: Pull complete 
Digest: sha256:62ae78ebf6903c47ff40273e1266173d224ee1bc2c000805cc4e0c4470305f57
Status: Downloaded newer image for postgres:12.5
docker.io/library/postgres:12.5

7.启动12.5版本的Docker镜像

[root@centos8 ~]# docker run --name my_pg2 -e POSTGRES_PASSWORD=Hb_docker123 -d postgres:12.5
0f8c3201d722fedd92ca30d2bb3e963282fc03887505703330d307293ffbaf8f

[root@centos8 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS      NAMES
0f8c3201d722   postgres:12.5   "docker-entrypoint.s…"   48 seconds ago   Up 47 seconds   5432/tcp   my_pg2
9285362446ec   postgres        "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   5432/tcp   my_pg1
[root@centos8 ~]# 

8.进入PostgreSQL 12.5版本Docker

[root@centos8 ~]#   docker exec -it my_pg2 /bin/bash
root@0f8c3201d722:/# su - postgres
postgres@0f8c3201d722:~$ psql 
psql (12.5 (Debian 12.5-1.pgdg100+1))
Type "help" for help.
postgres=

好了,以此类推,我们再安装上PostgreSQL 11和PostgreSQL 10。

[root@centos8 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS      NAMES
3894be01392c   postgres:10.15   "docker-entrypoint.s…"   3 seconds ago    Up 2 seconds    5432/tcp   my_pg4
88ed585117fd   postgres:11.10   "docker-entrypoint.s…"   48 seconds ago   Up 47 seconds   5432/tcp   my_pg3
0f8c3201d722   postgres:12.5    "docker-entrypoint.s…"   6 minutes ago    Up 6 minutes    5432/tcp   my_pg2
9285362446ec   postgres         "docker-entrypoint.s…"   16 minutes ago   Up 16 minutes   5432/tcp   my_pg1

全部安全完毕,但是现在有一个问题就是端口都是5432,必须要在宿主机上做一个端口映射。

9.端口映射

直接全部删除,映射到主机不同的端口上。

[root@centos8 ~]# docker rm -f my_pg1
my_pg1
[root@centos8 ~]# docker rm -f my_pg2
my_pg2
[root@centos8 ~]# docker rm -f my_pg3
my_pg3
[root@centos8 ~]# docker rm -f my_pg4
my_pg4
[root@centos8 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@centos8 ~]# docker run --name my_pg2 -e POSTGRES_PASSWORD=Hb_docker123 -p 18802:5432 -d postgres:12.5
e5d6491f18d64b6f2a05a6ecd993b5563ccc88cc044dcc7955b686c4bdd242a7
[root@centos8 ~]# docker run --name my_pg3 -e POSTGRES_PASSWORD=Hb_docker123 -p 18802:5432 -d postgres:11.10
d9c8d6c9243d782d17059bcfad0ff0035d81daeb180aa7dd3d2b4b5b2d5f24d2
[root@centos8 ~]# docker run --name my_pg3 -e POSTGRES_PASSWORD=Hb_docker123 -d -p 18803:5432 postgres:11.10
a361185048b9d4cba076c066ea16e0aceb4cdadfb95b1117aae7d11111108354
[root@centos8 ~]# docker run --name my_pg4 -e POSTGRES_PASSWORD=Hb_docker123 -d -p 18804:5432 postgres:10.15 
f85fa1e0c85a8207cbc5cb308b698337416cbb240fcfc26b87e57ffb8e5987e4

大功告成。现在就在外面安装一个psql客户端,就可以随意访问这4个版本的数据库了。

10.安装客户端并配置

在宿主机上安装postgresql,默认会安装一个10.14版本的客户端,足够我们用了。然后通过端口就可以连到各个版本的数据库。

[root@centos8 ~]# dnf install postgresql

[root@centos8 ~]# psql -U postgres -h 127.0.0.1 -p 18801 -d postgres
Password for user postgres: 
psql: fe_sendauth: no password supplied
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]# psql -U postgres -h 127.0.0.1 -p 18801 -d postgres
Password for user postgres: 
psql (10.14, server 13.1 (Debian 13.1-1.pgdg100+1))
WARNING: psql major version 10, server major version 13.
         Some psql features might not work.
Type "help" for help.

postgres=# \q
[root@centos8 ~]# psql -U postgres -h 127.0.0.1 -p 18802 -d postgres 
Password for user postgres: 
psql (10.14, server 12.5 (Debian 12.5-1.pgdg100+1))
WARNING: psql major version 10, server major version 12.
         Some psql features might not work.
Type "
help" for help.

postgres=# \q
[root@centos8 ~]# psql -U postgres -h 127.0.0.1 -p 18803 -d postgres 
Password for user postgres: 
psql (10.14, server 11.10 (Debian 11.10-1.pgdg90+1))
WARNING: psql major version 10, server major version 11.
         Some psql features might not work.
Type "
help" for help.

postgres=# \q
[root@centos8 ~]# psql -U postgres -h 127.0.0.1 -p 18804 -d postgres 
Password for user postgres: 
psql (10.14, server 10.15 (Debian 10.15-1.pgdg90+1))
Type "
help" for help.

postgres=# \q

11.使用别名进一步简化

这命令敲起来还是略显烦躁,为了更简单快速的穿梭在各个版本之间,这里搞个别名设置一下。

[root@centos8 ~]# vi .bash_profile 
export PGPASSWORD=Hb_docker123
alias 18801="psql -U postgres -h 127.0.0.1 -p 18801 -d postgres "
alias 18802="psql -U postgres -h 127.0.0.1 -p 18802 -d postgres "
alias 18803="psql -U postgres -h 127.0.0.1 -p 18803 -d postgres "
alias 18804="psql -U postgres -h 127.0.0.1 -p 18804 -d postgres "

[root@centos8 ~]# 18801
psql (10.14, server 13.1 (Debian 13.1-1.pgdg100+1))
WARNING: psql major version 10, server major version 13.
         Some psql features might not work.
Type "help" for help.

postgres=# \q
[root@centos8 ~]# 18802
psql (10.14, server 12.5 (Debian 12.5-1.pgdg100+1))
WARNING: psql major version 10, server major version 12.
         Some psql features might not work.
Type "
help" for help.

postgres=# \q
[root@centos8 ~]# 18803
psql (10.14, server 11.10 (Debian 11.10-1.pgdg90+1))
WARNING: psql major version 10, server major version 11.
         Some psql features might not work.
Type "
help" for help.

postgres=# \q
[root@centos8 ~]# 18804
psql (10.14, server 10.15 (Debian 10.15-1.pgdg90+1))
Type "
help" for help.

postgres=# \q

大功告成!终于可以输入端口数字就可以在各个版本中来回切了。学习的能力又得到了进一步的加强。


文章转载自励志成为PostgreSQL大神,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论