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.
Untuk mengikuti artikel ini, Anda akan memerlukan:
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.
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:
<!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:
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.
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:
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.
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: 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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!