制作 PG15 docker 学习镜像

2024-01-11 10:53:55 浏览数 (1)

如果为了模拟多实例PG环境,有不想开多个虚拟机,也不想在单机多端口运行的话,docker是一个不错的选择。

这里简单介绍下自定义的pg docker容器的制作和使用用法。

1 制作Dockerfile

代码语言:shell复制
mkdir /root/pg_docker/
cd /root/pg_docker/

vim Dockerfile  内容如下
FROM centos:7
RUN yum install -y epel-release maven wget iproute telnet vim 
&& yum clean all 
&& yum install -y  https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 
&& yum install -y postgresql15-server postgresql15-contrib

2 打包

代码语言:shell复制
$ docker build .          
$ docker images | head -3
$ docker tag pg15_sb 52037b76ba71 (这里的值,是根据上面docker images看到的none的镜像的id)

3 宿主机上创建持久化目录

代码语言:shell复制
cd  /usr/local/software/
mkdir pg15_lab
cd pg15_lab
mkdir primary_data standby1_data
chmod 700 primary_data standby1_data

4 创建容器网络

代码语言:shell复制
docker network create --subnet=192.168.100.0/24 pg_network

5 启动pg主节点

代码语言:shell复制
docker run -d -it --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name primary --net pg_network --ip 192.168.100.2 -v ./primary_data:/var/lib/pgsql/15/data pg15_sb:latest

注意: 我这里没有把端口暴露出来,如果需要暴露端口,使用-p参数即可

6 登录进pg主节点进行初始化操作

代码语言:shell复制
docker exec -ti primary  bash
cd /var/lib/pgsql/15/
chown postgres.postgres data/ -R
chmod 700 data/
su - postgres -c "/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data/"


然后,改下认证策略(可选),加个复制用的账号
(我这里测试用,直接用dts给了super权限,日常各种操作都用这个账号进行)
postgres=# alter system set password_encryption='md5';
postgres=# select pg_reload_conf();
postgres=# create user dts with password 'dts';
postgres=# alter user dts superuser;
postgres=# alter user dts replication;


改下pg_hba.conf 加一行
host replication dts 192.168.100.0/24 md5


然后,重载下pg
postgres=# select pg_reload_conf();

7 启动备库容器

代码语言:shell复制
docker run -d -it --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name standby1 --net pg_network --ip 192.168.100.3 -v ./standby1_data:/var/lib/pgsql/15/data pg15_sb:latest

8 在备库上配置与主库的同步

代码语言:shell复制
docker exec -ti standby1  bash
cd /var/lib/pgsql/15/
chown postgres.postgres data/ -R
chmod 700 data/
su - postgres
cd  /var/lib/pgsql/15/data/

pg_basebackup -h192.168.100.2 --write-recovery-conf --checkpoint=fast --progress  --port=5432 --username=dts --password  --format=p -D ./

9 启动备库进程

代码语言:shell复制
/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data/

0 人点赞