最近在研究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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




