· 9 years ago · Oct 16, 2016, 10:40 AM
1Compose file:
2
3```yaml
4version: '2'
5services:
6 pg1:
7 container_name: pg1
8 image: postgres:9.6.0
9 volumes:
10 - ./pg1-data:/var/lib/postgresql/data
11 - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
12 - ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf
13 environment:
14 POSTGRES_USER: user
15 POSTGRES_PASSWORD: passw0rd
16 pg2:
17 container_name: pg2
18 image: postgres:9.6.0
19 volumes:
20 - ./pg2-data:/var/lib/postgresql/data
21 - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
22 - ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf
23 - ./recovery.conf.pg2_standby:/var/lib/postgresql/data/recovery.conf
24 environment:
25 POSTGRES_USER: user
26 POSTGRES_PASSWORD: passw0rd
27```
28
29* Make sure nothing exists already: `docker-compose down -v`
30* Comment out all but first volume in both pg1 and pg2
31* Create DB data directory for db1 (not necessary if you have a DB already): `docker-compose run --rm pg1`
32* Start pg1: `docker-compose up -d pg1`
33* Backup DB to pg2: `docker-compose run --rm pg2 gosu postgres pg_basebackup -h pg1 -D /var/lib/postgresql/data -U user -v -P`
34* Start pg2: `docker-compose up -d pg2`
35
36`pg2` should now be hot-standby for pg1.
37* Verify:
38 ```
39 # Create table on pg1
40 docker exec pg1 gosu postgres psql user -c 'create table foop (x text)'
41
42 # List tables on pg2
43 docker exec pg2 gosu postgres psql user -c '\d'
44 ```
45
46## Creation