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

docker compose illustration for: 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.

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 &lt;^&gt;compose-demo_web_1&lt;^&gt;

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 &lt;^&gt;compose-demo_web_1&lt;^&gt; ... done

				
			

Untuk melanjutkan eksekusi setelah melakukan jeda:

				
					
docker-compose unpause

				
			
				
					
[secondary_label Output]

Unpausing &lt;^&gt;compose-demo_web_1&lt;^&gt; ... 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 &lt;^&gt;compose-demo_web_1&lt;^&gt; ... done

				
			

Jika Anda ingin menghapus kontainer, jaringan, dan volume yang terasosiasi dengan lingkungan terkontainerisasi, gunakan perintah down:

				
					
docker-compose down

				
			
				
					
[secondary_label Output]

Removing &lt;^&gt;compose-demo_web_1&lt;^&gt; ... done

Removing network &lt;^&gt;compose-demo_default&lt;^&gt;

				
			

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.