Table of Contents
Pengantar
Docker menyederhanakan proses dari pengelolaan proses aplikasi di dalam kontainer. Meskipun kontainer mirip dengan mesin virtual dalam hal tertentu, tetapi kontainer lebih ringan dan ramah sumber daya. Ini memungkinkan pengembang untuk membagi lingkungan aplikasi menjadi beberapa layanan terisolasi.
Untuk aplikasi yang bergantung pada beberapa layanan, menyusun semua kontainer untuk memulai, berkomunikasi, dan menutup secara bersamaan akan menjadi hal yang sulit. Docker Compose adalah alat yang memungkinkan Anda untuk menjalankan lingkungan aplikasi multikontainer berdasarkan definisi yang ditetapkan dalam berkas YAML. Alat ini menggunakan definisi layanan untuk sepenuhnya membangun lingkungan yang dapat disesuaikan dengan penggunaan beberapa kontainer yang dapat berbagi volume data dan jaringan.
Dalam panduan ini, kami akan menunjukkan cara menginstal Docker Compose pada server Ubuntu 20.04 dan cara memulainya menggunakan alat ini.
Prasyarat
Untuk mengikuti artikel ini, Anda akan memerlukan:
- Akses ke mesin lokal Ubuntu 20.04 atau server pengembangan sebagai pengguna non-root dengan privilese sudo. Jika Anda menggunakan server jauh, Anda disarankan untuk memiliki firewall aktif yang terinstal. Untuk menyiapkan ini, lihat Panduan Penyiapan Server Awal untuk Ubuntu 20.04 dari kami.
- Docker terinstal pada server atau mesin lokal Anda, dengan mengikuti Langkah 1 dan 2 dari Cara Menginstal dan Menggunakan Docker pada Ubuntu 20.04.
Langkah 1 — Menginstal Docker Compose
Untuk memastikan bahwa kita memperoleh versi stabil yang terbaru dari Docker Compose, kita akan mengunduh perangkat lunak ini dari repositori Github resmi.
Pertama-tama, pastikan versi terbaru yang tersedia di laman rilis mereka. Pada saat panduan penulisan ini, versi stabil yang terbaru adalah 1.26.0.
Perintah berikut akan mengunduh rilis 1.26.0 dan menyimpan berkas yang dapat dieksekusi di /usr/local/bin/docker-compose, yang akan menjadikan perangkat lunak ini dapat diakses secara global sebagai docker-compose:
sudo curl -L "https://github.com/docker/compose/releases/download/<^>1.26.0<^>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Selanjutnya, atur izin yang benar sehingga perintah docker-compose dapat dieksekusi:
sudo chmod +x /usr/local/bin/docker-compose
Untuk memverifikasi bahwa instalasi berhasil, Anda dapat menjalankan:
docker-compose --version
Anda akan melihat keluaran yang serupa dengan ini:
[secondary_label Output]
docker-compose version <^>1.26.0<^>, build 8a1c60f6
Docker Compose kini telah berhasil terinstal di sistem Anda. Di bagian selanjutnya, kita akan melihat cara menyiapkan berkas docker-compose.yml dan menjadikan lingkungan terkontainerisasi aktif dan berjalan dengan alat ini.
Langkah 2 — Menyiapkan Berkas docker-compose.yml
Untuk menunjukkan cara menyiapkan berkas docker-compose.yml dan bekerja dengan Docker Compose, kita akan menciptakan suatu lingkungan server web menggunakan citra Nginx resmi dari Docker Hub, yang merupakan registri Docker publik. Lingkungan terkontainerisasi ini akan menyajikan sebuah berkas HTML statis tunggal.
Mulai dengan menciptakan direktori baru di dalam folder rumah Anda, lalu masuk ke dalamnya:
mkdir <^>~/compose-demo<^>
cd <^>~/compose-demo<^>
Dalam direktori ini, siapkan folder aplikasi untuk berperan sebagai root dokumen bagi lingkungan Nginx Anda:
mkdir <^>app<^>
Dengan menggunakan editor teks pilihan Anda, ciptakan berkas index.html yang baru di dalam folder app:
nano app/index.html
Taruh konten berikut ke dalam berkas ini:
[label ~/compose-demo/app/index.html]
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
Simpan dan tutup berkas setelah Anda selesai. Jika Anda menggunakan nano, Anda dapat melakukan itu dengan mengetik CTRL+X, lalu Y, dan ENTER untuk mengonfirmasi.
Selanjutnya, ciptakan berkas docker-compose.yml:
nano docker-compose.yml
Masukkan konten berikut pada berkas docker-compose.yml Anda:
[label docker-compose.yml]
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
Berkas docker-compose.yml biasanya dimulai dengan definisi version. Ini akan memberi tahu Docker Compose tentang versi konfigurasi yang kita gunakan.
Kemudian, kita memiliki blok services, untuk menyiapkan layanan yang merupakan bagian dari lingkungan ini. Dalam kasus ini, kita memiliki sebuah layanan tunggal yang disebut web. Layanan ini menggunakan citra nginx:alpine dan menyiapkan pengalihan porta dengan arahan ports. Semua permintaan pada porta 8000 dari mesin hos (sistem tempat Anda menjalankan Docker Compose) akan dialihkan ke kontainer web pada porta 80, tempat Nginx akan berjalan.
Arahan volumes akan menciptakan volume bersama antara mesin hos dan kontainer. Volume ini akan berbagi folder app lokal dengan kontainer, dan terletak di /usr/share/nginx/html di dalam kontainer, yang kemudian akan menimpa root dokumen asali untuk Nginx.
Simpan dan tutup berkas.
Kita telah menyiapkan laman demo dan berkas docker-compose.yml untuk menciptakan lingkungan server web terkontainerisasi yang akan melengkapinya. Dalam langkah berikutnya, kita akan menjadikan lingkungan ini aktif dengan Docker Compose.
Langkah 3 — Menjalankan Docker Compose
Dengan berkas docker-compose.yml berada di tempatnya, kita kini dapat mengeksekusi Docker Compose untuk menjadikan lingkungan kita aktif. Perintah berikut akan mengunduh citra Docker yang diperlukan, menciptakan kontainer untuk layanan web, dan menjalankan lingkungan terkontainerisasi dalam mode latar belakang:
docker-compose up -d
Docker Compose pertama-tama akan mencari citra yang didefinisikan pada sistem lokal Anda, dan jika Docker Compose tidak dapat menemukan citra tersebut, maka Docker Compose akan mengunduh citra dari Docker Hub. Anda akan melihat keluaran seperti ini:
[secondary_label Output]
Creating network "<^>compose-demo_default<^>" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating <^>compose-demo_web_1<^> ... done
Lingkungan Anda kini telah aktif dan berjalan di latar belakang. Untuk memverifikasi bahwa kontainer sudah aktif, Anda dapat menjalankan:
docker-compose ps
Perintah ini akan menunjukkan informasi kepada Anda tentang kontainer yang sedang berjalan dan keadaannya, serta pengalihan porta apa pun yang aktif:
[secondary_label Output]
Name Command State Ports
----------------------------------------------------------------------------------
<^>compose-demo_web_1<^> /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Anda kini dapat mengakses aplikasi demo dengan mengarahkan peramban Anda ke localhost:8000 jika Anda menjalankan demo ini pada mesin lokal, atau <^>your_server_domain_or_IP<^>:8000 jika Anda menjalankan demo ini pada server jauh.
Anda akan melihat sebuah laman seperti ini:
Karena volume bersama yang Anda siapkan di dalam berkas docker-compose.yml menjaga berkas-berkas folder app Anda tetap sinkron dengan root dokumen kontainer. Jika Anda membuat perubahan apa pun terhadap berkas index.html, perubahan itu akan secara otomatis diambil oleh kontainer dan tercermin pada peramban ketika Anda memuat ulang laman.
Pada langkah selanjutnya, Anda akan melihat cara mengelola lingkungan terkontainerisasi Anda dengan perintah Docker Compose.
Langkah 4 — Membiasakan Diri dengan Perintah Docker Compose
Anda telah melihat cara menyiapkan berkas docker-compose.yml dan menjadikan lingkungan Anda aktif dengan docker-compose up. Anda kini akan melihat cara menggunakan perintah Docker Compose untuk mengelola dan berinteraksi dengan lingkungan terkontainerisasi Anda.
Untuk memeriksa log yang dihasilkan oleh kontainer Nginx, Anda dapat menggunakan perintah logs:
docker-compose logs
Anda akan melihat keluaran yang serupa dengan ini:
[secondary_label Output]
Attaching to <^>compose-demo_web_1<^>
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
Jika Anda ingin menghentikan sejenak eksekusi lingkungan tanpa mengubah keadaan kontainer saat ini, Anda dapat menggunakan:
docker-compose pause
[secondary_label Output]
Pausing <^>compose-demo_web_1<^> ... done
Untuk melanjutkan eksekusi setelah melakukan jeda:
docker-compose unpause
[secondary_label Output]
Unpausing <^>compose-demo_web_1<^> ... done
Perintah stop akan menghentikan eksekusi kontainer, tetapi tidak akan menghancurkan data apa pun yang terasosiasi dengan kontainer Anda:
docker-compose stop
[secondary_label Output]
Stopping <^>compose-demo_web_1<^> ... done
Jika Anda ingin menghapus kontainer, jaringan, dan volume yang terasosiasi dengan lingkungan terkontainerisasi, gunakan perintah down:
docker-compose down
[secondary_label Output]
Removing <^>compose-demo_web_1<^> ... done
Removing network <^>compose-demo_default<^>
Perhatikan bahwa ini tidak akan menghapus citra dasar yang digunakan oleh Docker Compose untuk mengaktifkan lingkungan Anda (dalam kasus kita, nginx:alpine). Dengan cara ini, kapan pun Anda menjadikan lingkungan aktif kembali dengan docker-compose up, prosesnya akan jauh lebih cepat karena citra sudah berada di sistem Anda.
Jika Anda juga ingin menghapus citra dasar dari sistem, Anda dapat menggunakan:
docker image rm nginx:alpine
[secondary_label Output]
Untagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Catatan: Lihat panduan kami tentang Cara Menginstal dan Menggunakan Docker untuk referensi yang lebih mendetail tentang perintah-perintah Docker.
Kesimpulan
Dalam panduan ini, kita telah melihat cara menginstal Docker Compose dan menyiapkan lingkungan terkontainerisasi berdasarkan suatu citra server web Nginx. Kita juga telah melihat cara mengelola lingkungan ini dengan menggunakan perintah-perintah Compose.
Untuk referensi lengkap dari semua perintah docker-compose yang tersedia, lihat dokumentasi resmi.