Menjalankan PostgreSQL di docker bisa sangat berguna terutama untuk keperluan testing. Dia bisa dijalankan di mana pun. Kita dapat menjalankannya dengan data testing, menggunakannya kemudian menghapusnya dengan mudah ketika testing selesai. Menjalankan Postgres di docker juga dapat mempermudah integration testing dan automation testing.
Cara menjalankan PostgreSQL dengan Docker
Untuk menjalankan Postgres di Docker, kita bisa menggunakan Docker image official postgres. Gunakan command berikut untuk menjalankannya.
docker run -d \
-e POSTGRES_PASSWORD=mypassword \
-e POSTGRES_USER=myuser \
-p 5432:5432 \
--name mypostgres postgres
POSTGRES_PASSWORD
wajib ada. Ini berisi password yang akan digunakan untuk user di parameter POSTGRES_USER
. Parameter POSTGRES_USER
ini opsional. Kalau parameter tersebut tidak ada, akan digunakan user name default yaitu postgres
. Kita bisa menggunakan user name dan password itu untuk mengakses database. Parameter -p 5432:5432
ini untuk mengarahkan port 5432 milik komputer host ke port 5432 milik container di Docker, dimana Postgres dijalankan.Sekarang PostgreSQL sudah berjalan di Docker. Untuk memastikannya, kita dapat menggunakan command docker ps
atau docker container ls
.
Kita dapat mencoba mengakses database menggunakan psql psql -h localhost -p 5432 -U myuser
. Database yang baru dibuat masih kosong. Kalau ingin membuat database dengan terisi suatu data-data, kita bisa menyimpan file SQL di directory /docker-entrypoint-initdb.d/
di Docker image.
Jalankan dengan inisialisasi data
File yang ada di directory /docker-entrypoint-initdb.d/
akan di eksekusi ketika container dijalankan. File-file tersebut dapat berupa *.sql
, *.sql.gz
, or *.sh
. Kita akan coba menggunakan SQL berikut untuk menginisialisasi data pada database kita di Docker. Kita simpan command SQL berikut ke sebuah file, kemudian bind directory tempat file berada ke directory /docker-entrypoint-initdb.d/
di container.
CREATE DATABASE mydb;
\c mydb;
CREATE TABLE city (
id serial PRIMARY KEY,
name VARCHAR
);
INSERT INTO city (name) VALUES ('Jakarta');
INSERT INTO city (name) VALUES ('Bandung');
INSERT INTO city (name) VALUES ('Bandar Lampung');
Ketika menjalankan container, kita menambahkan parameter -v
untuk melakukan bind directory. Coba lihat contoh command dibawah.
|
|
Sekarang karena kita sudah membuat database di PostgreSQL container, kita bisa langsung connect ke database tersebut.
psql -h localhost -p 5432 -U myuser mydb
Mempertahankan data
Seperti yang kita ketahui kalau data di PostgreSQL di docker akan hilang kalau container dihapus. Kita bisa membuat data tersebut tidak hilang dengan membuat sebuah docker volume dan bind ke directory /var/lib/postgresql/data
.
Gunakan command ini untuk membuat docker volume.
docker volume create postgresdata
docker volume ls
.Kita perlu bind volume tersebut ke container untuk membuat data di PostgreSQL tersimpan.
|
|
Kesimpulan
Kita bisa menjalankan PostgreSQL dengan mudah di docker. Ini dapat membantu kita melakukan development dan testing. Kita dapat membuat script untuk menginisialisasi data. Kita juga dapat membuat data tidak hilang ketika container di remove dengan memasang docker volume di container.