Kali ini kita akan belajar docker lebih dalam dengan contoh kasus PostgreSQL Docker. Pada materi ini kita akan belajar bagaimana cara memasang PostgreSQL dan melakukan manajemen data serta backup restore data yang ada pada database. Sebelumnya aku juga pernah menulis tentang materi ini, tapi installasinya menggunakan docker compose. Langsung saja kita simak.
Download Image PostgreSQL
Pertama, kita harus punya image-nya terlebih dahulu. Kita download image dengan perintah:
sudo docker image pull postgres:latest
Jika berhasil kita akan punya image postgres dengan tag latest. Mari kita lihat daftar image postgres dengan perintah berikut:
sudo docker image ls | grep postgres
Hasil dari perintah di atas adalah sebagai berikut:

Membuat Container PostgreSQL
Jika kita sudah punya image, sekarang kita harus membuat container dengan perintah berikut:
sudo docker container create \
--name postgres_latest \
-e POSTGRES_PASSWORD=password \
postgres
Jika sudah terbuat, kita bisa menjalankan container tersebut dengan perintah:
sudo docker start postgres_latest
Mengoperasikan PostgreSQL Docker
Setelah kita menjalankan container postgreSQL, sekarang kita akan mencoba mengoperasikannya. Kita akan coba untuk membuat database dan table. Selanjutnya, kita juga akan coba insert update delete.
Masuk ke PostgreSQL
Jika container postgres_latest sudah berjalan, kita bisa mengoperasikan database melalui cli dengan perintah psql. Tapi perintah psql ada di container, jadi kita gunakan perintah berikut:
sudo docker exec -it postgres_latest psql -U postgres
Jika berhasil maka kita akan melihat tampilan seperti berikut ini:

Membuat Database
Kita akan mencoba simulasi membuat database dengan nama myapp dan table dengan nama user. Gunakan perintah SQL berikut ini untuk membuat database:
CREATE DATABASE myapp;
Untuk melihat apakah sudah ada database yang terbuat, gunakan perintah “\l”. Inilah hasilnya:

Membuat Table User
Setelah kita berhasil membuat database, kita akan coba membuat table user. Sebelum membuat table user, kita harus memilih database yang akan kita gunakan. Cara memilih databasenya gunakan perintah “\c myapp”. Lalu masukkan perintah SQL berikut ini untuk membuat table user:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL
);
Jika berhasil, gunakan perintah \dt untuk melihat daftar tablenya. Berikut ini adalah hasil yang kita harapkan:

Untuk melihat detail attribute dari table user, gunakan perintah “\d users” sehingga akan menampilkan informasi seperti berikut ini:

Insert, Update, Delete Users
Nah, jadi kita telah berhasil membuat table user dalam PostgreSQL Docker. Sekarang kita akan coba untuk menambahkan data ke dalamnya. Gunakan SQL berikut ini:
INSERT INTO users (name, email, password) VALUES
('Budi', 'budi@example.com', 'passwordbudi'),
('Siti', 'siti@example.com', 'passwordsiti'),
('Andi', 'andi@example.com', 'passwordandi');
Jika sudah, kita coba lihat apakah data tersebut sudah masuk dengan perintah SQL:
SELECT * FROM users;
Hasilnya adalah sebagai berikut:

Sekarang, mari kita coba update data Budi. Gunakan perintah SQL berikut ini untuk update data password budi:
UPDATE users SET password = 'passwordrahasiabudi' WHERE id = 1;
Untuk melihat perubahan gunakan perintah select sehingga hasilnya seperti berikut:

Terakhir kita akan coba untuk menghapus 1 data. Kita coba hapus data Budi dari table user. Untuk melakukan itu, gunakan perintah berikut:
DELETE FROM users WHERE id = 1;
Silahkan cek kembali menggunakan perintah select untuk memastikan data telah berhasil dihapus.
Mengakses PostgreSQL Docker dari Host
Permasalahan Akses pada postgresql docker
Saat menggunakan PostgreSQL tentunya kita tidak hanya ingin mengoperasikannya dari dalam container kan. Kita butuh mengakses PostgreSQL dari host dan kita akan menggunakannya. Agar container yang kita buat dapat diakses oleh host, kita harus melakukan publish port. Nah, yang jadi masalah adalah:
- Container dengan nama postgres_latest yang kita buat tidak melakukan publish port.
- Publish port tidak bisa dilakukan jika container telah dibuat. Jadi kita harus membuat container baru yang melakukan publish port.
- Kita terlanjur mengisi data pada container postgres_latest dan kita tidak ingin data tersebut hilang.
Solusi Permasalahan Akses
Masalah tersebut di atas dapat kita atasi dengan mudah. Container yang kita buat sebelumnya secara otomatis membuat yang namanya volume, yang digunakan untuk menyimpan data. Kita nanti akan membuat container baru, tapi volumenya menggunakan volume dari container lama. Untuk melihat nama volume yang digunakan container lama gunakan perintah berikut:
sudo docker container inspect postgres_latest
Perintah di atas akan menampilkan informasi container dengan sangat detail. Carilah informasi dengan nama “Mounts” seperti gambar berikut:

Setelah mendapatkan informasi nama volume, copy-lah “Name” nya. Sekarang kita buat container baru dengan perintah sebagai berikut:
sudo docker container create \
--name postgres_latest_publish \
-e POSTGRES_PASSWORD=password \
-v 9c5130a13ed0fec86168b8dc341fba8a60718c4738f616e986475f00385a60aa:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:latest
Mari kita pastikan kita telah berhasil membuat postgres_latest_publish dengan perintah:
sudo docker ps -a
Perhatikan hasil berikut:

Sekarang kita akan menjalankan container postgres_latest_publish dengan perintah:
sudo docker container start postgres_latest_publish
Kemudian lihat container yang berjalan dengan perintah:
sudo docker ps
Jika berhasil, maka tampilannya adalah sebagai berikut:

Pada tampilan di atas, dibagian port ada informasi 0.0.0.0:5432->5432/tcp. Artinya port 5432 di host dipetakan ke port 5432 di dalam container.
Menggunakan BeeKeeper untuk Akses PostgreSQL docker
Untuk memastikan kita dapat mengakses PostgreSQL Docker, mari kita gunakan tools BeeKeeper. Masukkan informasi credentials seperti gambar berikut:

Kalau sudah, cobalah untuk klik Test dan jika berhasil klik Connect. Jika berhasil Connect kita akan melihat data yang telah kita buat sebagai berikut:

Dari tampilan di atas, ternyata data yang tampil di BeeKeeper sama dengan data yang kita buat di container lama. Jadi meskipun kita membuat container baru kita masih bisa memanfaatkan data pada container lama.
Penutup
Nah, demikianlah cara memasang PostgreSQL di Docker. Jika teman-teman punya pertanyaan terkait dengan pemasangan PostgreSQL, teman-teman bisa mengajukan pertanyaan di kolom komentar ya. Selamat belajar dan mencoba