In this blog I'll demonstrate how to install PostgreSQL DB servers of version 12, 13, 14 and 15 on the same machine using docker compose. For illustration I will use Ubuntu 20.04
Docker compose orchestrates an environment to run multi-container Docker applications. It enables to bring multiple containers together to make an application. Docker compose makes use of a yaml file to define services that are later used to start and run the application with a single command.
Step #1
- Install docker-compose
Check the latest release of the docker compose by visiting https://github.com/docker/compose/releases/
sudo curl -L "https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
For example:
Docker Compose version v2.14.2
Step #2
- Prepare docker-compose.yaml file, describing the services that we want to run
cat docker-compose.yaml
version: '3.8'
services:
db12:
image: postgres:12
restart: always
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypwd
ports:
- '5442:5432'
volumes:
- db12:/var/lib/postgresql/data
db13:
image: postgres:13
restart: always
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypwd
ports:
- '5443:5432'
volumes:
- db13:/var/lib/postgresql/data
db14:
image: postgres:14
restart: always
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypwd
ports:
- '5444:5432'
volumes:
- db14:/var/lib/postgresql/data
db15:
image: postgres:15
restart: always
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypwd
ports:
- '5445:5432'
volumes:
- db15:/var/lib/postgresql/data
volumes:
db12:
driver: local
db13:
driver: local
db14:
driver: local
db15:
driver: local
Step #3
- Build docker-compose
docker-compose up -d
For example:
docker-compose up -d
[+] Running 4/4
⠿ Container create_postgres_db_servers_docker_compose-db15-1 Started 1.3s
⠿ Container create_postgres_db_servers_docker_compose-db12-1 Started 1.4s
⠿ Container create_postgres_db_servers_docker_compose-db13-1 Started 0.7s
⠿ Container create_postgres_db_servers_docker_compose-db14-1 Started 1.4s
dmi@dmi-VirtualBox:~/create_postgres_db_servers_docker_compose$
Step #4
- Check connection to the created PostgreSQL DB servers.
Connection to the PostgreSQL DB server, version 12.13:
psql -h localhost -p 5442 -U myuser -d postgres -W
Password:
psql (15.1 (Ubuntu 15.1-1.pgdg20.04+1), server 12.13 (Debian 12.13-1.pgdg110+1))
Type "help" for help.
postgres=# select version();
version
-------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.13 (Debian 12.13-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)
postgres=#
Connection to the PostgreSQL DB server, version 15.1:
psql -h localhost -p 5445 -U myuser -d postgres -W
Password:
psql (15.1 (Ubuntu 15.1-1.pgdg20.04+1))
Type "help" for help.
postgres=# select version();
version
-----------------------------------------------------------------------------------------------------------------------------
PostgreSQL 15.1 (Debian 15.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)
postgres=#
Conclusion
In this blog I've demonstrated how to install PostgreSQL DB servers of version 12, 13, 14 and 15 on the same machine using docker compose.
Top comments (0)