Cara Menginstal dan Menggunakan Docker Compose pada Ubuntu 20.04

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:

Outputdocker-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:

~/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/[email protected]/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:

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:

OutputCreating 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:

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:

Laman Demo Docker Compose

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:

OutputAttaching 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
OutputPausing compose-demo_web_1 ... done 

Untuk melanjutkan eksekusi setelah melakukan jeda:

  • docker-compose unpause
OutputUnpausing 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
OutputStopping compose-demo_web_1 ... done 

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

  • docker-compose down
OutputRemoving 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
OutputUntagged: nginx:alpine Untagged: [email protected]: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.