Install PostgreSQL using Docker
Hai semuannya, di materi kali ini kita membahas Install PostgreSQL menggunakan Docker, Pembahasannya diantaranya:
- Install docker
- Running PostgreSQL in Docker
- Using
pgAdmin4
web based - Migrate schema using flyway
Ok langsung saja kita bahas ke materi yang pertama yaitu
Install docker
Buat temen-temen yang belum kenal dengan Docker, Docker adalah salah satu teknologi virtualization yang sedang naik daun 3 tahun terakhir karena memudahkan kita untuk melakukan install suatu software/service. Kita juga bisa memanfaatkan docker ini untuk belajar PostgreSQL sebagai Learning environment.
Tahap pertama, yang harus temen-temen lakukan adalah install adalah
- Install Docker untuk Windows
- Install Docker untuk linux
- Install Docker untuk mac
Running PostgreSQL in Docker
Untuk menjalakan PostgreSQL di Docker ini sebetulnya sangatlah mudah, kita cukup jalankan perintah:
docker run -p 5432:5423 \
-e POSTGRES_PASSWORD=password \
-d postgres:14.1
Tetapi kita akan menggunakan docker-compose ya supaya scriptnya tersimpan dengan baik. seperti berikut:
Kemudian kita buat file .env
seperti berikut:
PRIVATE_REPOSITORY=docker.io/
POSTGRES_VERSION=14.1-alpine
POSTGRES_PORT=5432
POSTGRES_PASSWORD=password
POSTGRES_USER=postgres
POSTGRES_DB=postgres
Kemudian kita jalankan dengan perintah
docker-compose -f docker-compose.yaml --env-file .env up -d
Using pgAdmin4
web based
Untuk text editor seperti pgadmin4
kita bisa menggunakan versi Desktop atau juga kita bisa menggunakan version web yang kita pasang dalam docker, sepertinya temen-temen liat pada script docker-compose.yaml
sebelumnya seperti berikut:
pgadmin4:
image: ${PRIVATE_REPOSITORY}dpage/pgadmin4
profiles:
- debug
environment:
- PGADMIN_DEFAULT_PASSWORD=${POSTGRES_PASSWORD}
- PGADMIN_DEFAULT_EMAIL=${POSTGRES_USER}@example.com
ports:
- 55432:80
volumes:
- pg_admin_data:/var/lib/pgadmin
depends_on:
- postgres
Untuk meng-aktifikan container pgadmin4
tersebut, kita perlu menggunakan profile debug
dengan perintah seperti berikut:
docker-compose -f docker-compose.yaml --env-file .env --profile debug up -d
Jika sudah, kita bisa akses dengan alamat localhost:55432 seperti berikut:
Sekarang kita akan buat connection ke PostgreSQL server di Docker, Kita klik kanan di Menu Servers -> Create -> Server kemudian kita input connection name contohnya: postgresql
dan kemudian kita ke tab Connection seperti berikut:
Berikut properties:
Property | Value | Description |
---|---|---|
Host |
postgres |
Karena kita menggunakan container, kita tidak bisa menggunakan localhost karena docker memiliki ip yang berbeda setiap container |
Database |
postgres |
Sesuaikan dengan .env yang telah kita buat |
Username |
postgres |
Sesuaikan dengan .env yang telah kita buat |
Password |
password |
Sesuaikan dengan .env yang telah kita buat |
Jika sudah, kita klik Save, maka jika success hasilnya seperti berikut:
Migrate schema using flyway
Untuk belajar, kita membutuhkan user & database/schema untuk mencoba feature dari PostgreSQL. Sekarang kita akan buat user & database di Docker melalui psql
docker-compose \
-f docker-compose.yaml \
--env-file .env \
exec postgres \
psql -U postgres -W
Kemudian kita buat schema dengan perintah seperti berikut:
Setelah kita buat schema, user dan database, kita download file ini simpan dalam folder db/migration
dan jalankan migrationnya dengan perintah
docker-compose \
-f docker-compose.yaml \
--env-file .env \
--profile migrate up -d
Jika sudah sekarang kita bisa check dengan perintah berikut:
docker-compose \
-f docker-compose.yaml \
--env-file .env \
exec postgres psql -U hr -W -c "\dt"
Jika dijalankan hasilnya seperti berikut:
➜ postgresql git:(master) docker-compose -f docker-compose.yml --env-file .env exec postgres psql -U hr -W -c "\dt"
Password:
List of relations
Schema | Name | Type | Owner
----------+-----------------------+-------+----------
hr | countries | table | hr
hr | departments | table | hr
hr | employees | table | hr
hr | flyway_schema_history | table | hr
hr | job_history | table | hr
hr | jobs | table | hr
hr | locations | table | hr
hr | regions | table | hr
(8 rows)
-
Referensi
https://hub.docker.com/_/postgres