1.- Make 1 directory for pgmaster.  
sudo mkdir pgmasterdata
 
2.- Create a new docker container called pgmaster  
docker run -dit -v "$PWD"/pgmasterdata/:/var/lib/postgresql/data -e POSTGRES_PASSWORD=abc --restart=unless-stopped --network=acme-network --name=pgmaster postgres
 
3.-  Backup and edit pgmaster's postgresql.conf with below settings  
sudo cp pgmasterdata/postgresql.conf pgmasterdata/postgresql.conf.ori
 
cat >  postgresql.conf << EOF  
listen_addresses = '*' 
port = 5432 
max_connections = 50 
ssl = off 
shared_buffers = 32MB 
# Replication Settings - Master 
wal_level = hot_standby 
max_wal_senders = 3 
EOF   
sudo cp postgresql.conf pgmasterdata/postgresql.conf
 
4.- Login to pgmaster and create a user for replication  
docker exec -it pgmaster psql -U postgres -h localhost -d postgres
postgres=#
	  CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'abc';
	  
postgres=#
	  \q
 
5.- Backup and edit pgmaster's pg_hba.conf with ip range from selected docker network in step 2  
sudo cp pgmasterdata/pg_hba.conf pgmasterdata/pg_hba.conf.ori
echo "host    replication  all  172.25.0.0/16  trust" | sudo tee -a pgmasterdata/pg_hba.conf
 
6.- Restart pgmaster container  
docker restart pgmaster
 
7.-  Run backup of master into /slavedata in the same pgmaster container  
docker exec -it pgmaster bash
mkdir /pgslavedata
pg_basebackup -h pgmaster -D /pgslavedata -U replicator -v -P --wal-method=stream
exit
 
8.- Copy /slavedata that is in pgmaster to host  
docker cp pgmaster:/pgslavedata pgslavedata
 
9.- Tell to pgslave data in host that it is a slave  
sudo touch  pgslavedata/standby.signal
 
10.- Edit postgresql.conf in the pgslave data in host  
sudo cp pgslavedata/postgresql.conf pgslavedata/postgresql.conf.ori
 
cat >  postgresql.conf << EOF  
listen_addresses = '*' 
port = 5432 
max_connections = 50 
ssl = off 
shared_buffers = 32MB 
# Replication Settings - Slave 
hot_standby = on 
primary_conninfo = 'host=172.25.0.128 port=5432 user=replicator password=abc' 
EOF   
sudo cp postgresql.conf pgslavedata/postgresql.conf
 
11.- Start new pgslave container  
docker run -dit -v "$PWD"/pgslavedata/:/var/lib/postgresql/data -e POSTGRES_PASSWORD=abc --network=acme-network --restart=unless-stopped --name=pgslave postgres
 
12.- TO Check replication state in pgmaster  
docker exec -it pgmaster psql -h localhost -U postgres -d postgres -c "select usename,state from pg_stat_activity where usename = 'replicator';"
 
13.- Verify the setup by creating a database in pgmaster, and check if the same database appear in pgslave.  
docker exec -it pgmaster psql -U postgres -h localhost -d postgres
CREATE DATABASE testdb;
\l
exit
docker exec -it pgslave psql -U postgres -h localhost -d postgres
\l
 
14.- To promote to pgslave if pgmaster is down, simply run "pg_ctl promote" command  
docker exec -it pgslave bash
pg_ctl promote