docker下創(chuàng)建centos7容器
1.創(chuàng)建網(wǎng)絡
docker network create --subnet=172.19.0.0/16 pgnetwork
docker network ls -- 查看 此處使用pgnetwork
NETWORK ID NAME DRIVER SCOPE
d725415b8b96 bridge bridge local
e4012194a61b host host local
4234dac60f16 none null local
e73e04a89c47 pgnetwork bridge local
f8c3a20c67c2 rabbitmqnet bridge local
docker network inspect pgnetwork --查看網(wǎng)絡內部信息
2.docker pull centos -- 下載latest的 centos 鏡像,此處鏡像重命名為centos:7
3.創(chuàng)建容器 pg_ip_ms,pg_ip_s,映射端口5300,5301
docker run -itd --privileged -v /sys/fs/cgroup:/sys/fs/cgroup -p 5370:5432 --name pg_ip_ms --net pgnetwork --ip 172.19.0.5 centos:7 /usr/sbin/init
--privileged container內的root擁有真正的root權限。否則闽晦,container內的root只是外部的一個普通用戶權限。
privileged啟動的容器杆融,可以看到很多host上的設備体箕,并且可以執(zhí)行mount痕钢。甚至允許你在docker容器中啟動docker容器香到。
--net pgnetwork 指定網(wǎng)絡
--ip 172.19.0.2 指定IP
4.進入容器
docker exec -it pg_ip_ms /bin/bash
5.install postgresql
postgresl install
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm -- 下載rpm
yum install postgresql96 -- install client
yum install postgresql96-server postgresqyl96-contrib -- install sderver和第三方插件
/usr/pgsql-9.6/bin/postgresql96-setup initdb -- 初始化數(shù)據(jù)庫
systemctl enable postgresql-9.6 --開機自啟
systemctl start postgresql-9.6 -- 啟動服務
完成以上操作后可以登陸postgresql試試
su postgres
psql 可以登陸試試鱼冀,之后修改配置文件
修改配置文件postgresql.conf
listen_addresses ='*'
port=5432
password_encryption = on
修改pg_hba.conf
host all all 0.0.0.0/0 md5.
host all all 127.0.0.1/32 md5.
systemctl restart postgresql-9.6
登陸數(shù)據(jù)庫su - postgres
psql
alter user postgres with password '123456';
6.install pglogical pglogical-rhel-1.0-3.noarch.rpm
從主機復制到容器sudo docker cp host_path containerID:container_path
從容器復制到主機sudo docker cp containerID:container_path host_path
docker cp pglogical-rhel-1.0-3.noarch.rpm pg_xxx:/home/
yum install pglogical-rhel-1.0-3.noarch.rpm
yum install postgresql96-pglogical
vi /var/lib/pgsql/9.6/data/postgresql.conf
修改配置文件postgresql.conf
listen_addresses ='*'
port=5432
password_encryption = on
shared_preload_libraries = 'pglogical'
max_worker_processes = 10 # one per database needed on provider node
wal_level = 'logical'
max_wal_senders = 10 # one per node needed on provider node
max_replication_slots = 10 # one per node needed on provider node
track_commit_timestamp = on
vi /var/lib/pgsql/9.6/data/pg_hba.conf
修改pg_hba.conf
host all all 0.0.0.0/0 trust.
local replication postgres trust
host replication postgres 127.0.0.1/32 trust
host replication postgres ::1/128 trust
host replication postgres 0.0.0.0/0 trust
systemctl restart postgresql-9.6
su - postgres
psql
CREATE EXTENSION pglogical; -- create 擴展工具
select extname, extowner from pg_extension; --查看擴展工具
7.installpg_pathman
git clone https://github.com/postgrespro/pg_pathman
下載到主機的root文件夾报破, 然后復制到容器內
對于bash: make: command not found錯誤
yum -y install gcc automake autoconf libtool make
對于make: pg_config: Command not found錯誤
find / -name pg_config --查看路徑/usr/pgsql-9.6/bin/pg_config
export PATH=/usr/pgsql-9.6/bin:$PATH
cd pg_pathman
對于Makefile:66: /usr/pgsql-9.6/lib/pgxs/src/makefiles/pgxs.mk: No such file or directory錯誤
yum install postgresql96-devel
對于fatal error: openssl/ssl.h: No such file or directory #include <openssl/ssl.h>
類似問題參考
yum install openssl
yum install openssl-devel
make USE_PGXS=1
make USE_PGXS=1 install
修改配置文件postgresql.conf
vi /var/lib/pgsql/9.6/data/postgresql.conf
shared_preload_libraries = 'pg_pathman,pglogical'
systemctl restart postgresql-9.6
su - postgres
psql
create extension pg_pathman;
\dx
-==============================================================
通過以上過程,鏡像層層疊加生成由centos:7包含postgresql雷绢,pglogical和pg_pathman的鏡像。
10.0.0.96 image:pg_ip_pglogical_pathman
-==============================================================
docker commit container_id pg_ip_pglogical_pathman -- 生成鏡像pg_ip_pglogical_pathman
在這個鏡像中理卑,數(shù)據(jù)庫pg已經包含了pglogical和pg_pathman的配置包翘紊, 如果新建的數(shù)據(jù)庫需要使用這兩個插件 可以使用下列sql語句添加
create extension pglogical;
create extension pg_pathman;