Topik ini menyiapkan lingkungan kerja Docker dari awal hingga siap diuji. Pembahasannya mencakup dua produk resmi Docker, langkah pemasangan pada Linux, macOS, dan Windows, pengujian dengan perintah docker version dan docker run hello-world, serta arsitektur client-daemon. Arsitektur tersebut adalah pembagian peran antara alat baris perintah sebagai klien dan daemon sebagai proses layanan yang melaksanakan seluruh pekerjaan Docker. Setelah lingkungan berjalan, seluruh contoh perintah pada jalur ini dapat dipraktikkan secara langsung.
Dua produk resmi Docker#
Docker mendistribusikan kemampuannya melalui dua produk resmi. Produk pertama adalah Docker Engine, yaitu perangkat lunak inti berupa daemon beserta Docker CLI (command line interface) yang dipasang langsung pada distribusi Linux. Produk kedua adalah Docker Desktop, yaitu aplikasi berantarmuka grafis untuk macOS dan Windows yang mengemas Docker Engine di dalamnya. Keduanya memakai CLI dan daemon yang sama, sehingga perintah yang dipelajari berlaku sama pada semua sistem operasi.
Pembagian produk ini berakar pada fakta bahwa container, yaitu bungkusan aplikasi terisolasi, memerlukan kernel Linux untuk berjalan. Docker Engine dapat dipasang langsung karena Linux sudah memiliki kernel yang dibutuhkan. Pada macOS dan Windows, Docker Desktop menyediakan kernel tersebut dengan menjalankan mesin virtual Linux kecil di latar belakang, sehingga Docker Engine tetap beroperasi di dalam lingkungan Linux tanpa terlihat. Pada Windows, mesin virtual tersebut berjalan di atas WSL 2 (Windows Subsystem for Linux 2) secara bawaan, yaitu subsistem Windows yang menjalankan kernel Linux di dalam mesin virtual ringan.
Memasang Docker Engine di Linux#
Docker Engine dipasang dari repositori resmi Docker, bukan dari paket bawaan distribusi, karena versi pada repositori distribusi umumnya tertinggal dan penamaannya berbeda. Halaman pemasangan pada dokumentasi resmi memuat perintah lengkap untuk setiap distribusi, sedangkan urutan intinya selalu sama dan diuraikan sebagai berikut:
- Hapus paket lama yang mungkin tersisa dan dapat bertabrakan, misalnya
docker.ioataucontainerdbawaan distribusi. - Daftarkan kunci GPG resmi Docker beserta repositori Docker pada pengelola paket.
- Pasang paket Docker Engine beserta CLI-nya, yang pada distribusi berbasis Debian bernama
docker-ce. - Aktifkan layanan daemon agar berjalan setiap kali sistem dinyalakan, misalnya melalui systemd dengan
systemctl enable --now docker.
Rangkaian perintah untuk distribusi Ubuntu dirangkum pada blok berikut, dengan catatan seluruhnya memerlukan hak root melalui sudo.
# tidak-dijalankan: pemasangan sistem memerlukan akses root dan jaringan
# hapus versi lama yang mungkin bertabrakan
sudo apt-get remove docker docker-engine docker.io containerd runc
# siapkan dependensi dan kunci GPG resmi Docker
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# daftarkan repositori resmi Docker, lalu pasang Engine beserta CLI-nya
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginPada distribusi berbasis Red Hat seperti Fedora, langkah-langkahnya setara, yaitu mendaftarkan repositori resmi Docker pada pengelola paket dnf, sedangkan nama paket intinya tetap sama. Apabila pengelola paket pada distribusi yang dipakai berbeda, halaman pemasangan resmi memuat perintah persisnya dan tautannya tercantum pada Referensi. Setelah pemasangan selesai, layanan daemon pada umumnya langsung aktif, dan langkah berikutnya adalah mengujinya.
Memasang Docker Desktop#
Pada macOS dan Windows, pemasangan berpusat pada aplikasi Docker Desktop. Langkah untuk macOS:
- Unduh Docker Desktop dari situs resmi, dengan varian Apple silicon untuk Mac dengan chip Apple dan varian Intel untuk Mac generasi lama.
- Buka berkas DMG hasil unduhan, seret Docker ke folder Applications, lalu jalankan aplikasinya.
- Ikuti layar sambutan hingga ikon Docker muncul stabil di bilah menu, yang menandakan daemon telah berjalan.
Langkah untuk Windows:
- Aktifkan WSL 2 terlebih dahulu, umumnya cukup dengan menjalankan
wsl --installpada PowerShell sebagai administrator, lalu mulai ulang komputer. - Unduh pemasang Docker Desktop untuk Windows dari situs resmi, jalankan, dan biarkan opsi Use WSL 2 based engine tetap terpilih.
- Buka Docker Desktop dari menu Start dan tunggu hingga statusnya menunjukkan aplikasi berjalan.
Setelah salah satu produk terpasang, perintah docker tersedia di terminal pada ketiga sistem operasi dengan perilaku yang sama. Perbedaannya hanya letak daemon yang melayaninya. Pada Docker Engine, daemon berjalan langsung pada host, yakni mesin tempat Docker dipasang, sedangkan pada Docker Desktop daemon berjalan di dalam mesin virtual kecil. Sisa topik menguji pemasangan tersebut dan membedah arsitektur client-daemon yang menaunginya.
Pengujian pemasangan#
Dua perintah resmi menguji pemasangan dari dua sisi. Perintah docker version memeriksa versi dan koneksi antara CLI dan daemon, sedangkan perintah docker run hello-world menguji seluruh rantai secara nyata, mulai dari menarik image sebagai cetakan aplikasi hingga menjalankan container.
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
docker versionKeluaran docker version terbagi menjadi dua bagian berlabel Client dan Server. Bagian Client memuat versi Docker CLI beserta sistem operasi dan arsitektur tempat CLI berjalan, sedangkan bagian Server memuat versi daemon beserta informasi sistem operasi, arsitektur, dan kernel host. Bila bagian Server tidak muncul dan yang tampil justru pesan error koneksi, CLI bekerja tetapi daemon belum terjangkau, sehingga masalahnya terletak pada layanan Docker yang belum berjalan.
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
docker run hello-worldPengujian kedua menggerakkan seluruh arsitektur sekaligus. Daemon memeriksa apakah image bernama hello-world sudah ada di host. Karena pemasangan baru tidak memilikinya, daemon menarik image tersebut dari registry, yakni layanan penyimpanan image, dengan Docker Hub sebagai registry bawaan. Setelah itu daemon membuat satu container dari image tersebut, lalu menjalankannya hingga programnya selesai. Pesan yang tampil memuat keluaran program hello-world disusul uraian langkah yang baru saja dilakukan, dan kehadirannya menandakan seluruh rantai dari CLI, daemon, hingga registry berfungsi baik.
Arsitektur client-daemon#
Perilaku kedua perintah pengujian tadi masuk akal setelah arsitektur client-daemon dipahami. Docker CLI hanyalah klien, yaitu program yang menerjemahkan perintah yang diketik menjadi panggilan API (application programming interface) dan mengirimkannya kepada daemon. Penerima pekerjaannya adalah dockerd, yaitu layanan yang berjalan terus-menerus di host dan menangani seluruh pekerjaan berat, mulai dari menarik image, membangun image, hingga menjalankan dan menghentikan container. CLI tidak pernah menjalankan container sendiri, sehingga setiap perintah docker pada dasarnya adalah permintaan kepada daemon.
Komunikasi keduanya pada Linux berlangsung melalui socket Unix, yaitu kanal komunikasi antarproses yang diwakili oleh sebuah berkas, secara bawaan /var/run/docker.sock. Daemon juga dapat diatur agar dijangkau melalui socket jaringan dari mesin lain. Inilah alasan Docker Desktop yang tampak sebagai aplikasi grafis tetap melayani perintah di terminal, karena CLI dan daemon tetap berpasangan melalui mekanisme yang sama. Konsekuensinya, keadaan daemon menentukan apakah sebuah perintah dapat dijalankan, dan apabila daemon berhenti, perintah docker tetap dapat diketik tetapi tidak ada pekerjaan yang terjadi. Arah tujuan klien pun dapat diubah, misalnya menuju daemon pada mesin lain, melalui variabel lingkungan DOCKER_HOST.
Kesalahan umum#
- Perintah
dockerberakhir dengan pesanpermission deniedpadadocker.sock. Penyebabnya adalah pengguna yang menjalankan perintah tidak memiliki akses ke socket daemon. Perbaikannya dengan menambahkan pengguna ke grupdockermelaluisudo usermod -aG docker <nama-pengguna>, lalu keluar dan masuk kembali agar keanggotaan grup berlaku. Karena akses ke socket setara dengan hak root pada host, mode rootless, yaitu pemasangan yang menjalankan daemon tanpa hak root, menjadi alternatif yang lebih ketat untuk lingkungan bersama. - Keluaran
docker versionmenampilkan pesanCannot connect to the Docker daemon. Penyebabnya adalah CLI bekerja tetapi daemon belum berjalan, misalnya layanan docker belum diaktifkan pada Linux atau Docker Desktop belum dibuka. Perbaikannya dengan menjalankan layanan daemon terlebih dahulu, pada Linux melaluisystemctl start docker, dan pada macOS atau Windows dengan membuka Docker Desktop sampai statusnya menunjukkan berjalan. - Pengujian
hello-worldgagal saat menarik image. Penyebabnya umumnya jaringan, misalnya proxy korporat yang membatasi akses ke registry. Perbaikannya dengan mengatur konfigurasi proxy pada Docker Desktop atau pada daemon, lalu mengulangi pengujian.
Ringkasan#
- Dua produk resmi Docker adalah Docker Engine untuk Linux dan Docker Desktop untuk macOS serta Windows, dan yang terakhir menyediakan kernel Linux melalui mesin virtual kecil.
- Pemasangan diuji dengan
docker versionuntuk memeriksa versi CLI dan daemon sertadocker run hello-worlduntuk menguji seluruh rantai hingga registry. - Docker CLI hanyalah klien yang mengirim panggilan API kepada daemon melalui socket Unix atau jaringan, sedangkan daemon menarik image, membangun, dan menjalankan container.
- Akses ke socket daemon setara dengan hak root pada host, sehingga keanggotaan grup
dockerdiberikan secara sadar dan mode rootless tersedia untuk kebutuhan yang lebih ketat.
Referensi#
- Install Docker Engine — Docker Docs — Panduan resmi pemasangan Docker Engine untuk setiap distribusi Linux beserta perintah lengkapnya.
- Docker Desktop — Docker Docs — Panduan resmi pemasangan dan pengaturan Docker Desktop pada macOS dan Windows.
- Docker overview — Docker Docs — Penjelasan arsitektur client-daemon beserta peran API dan socket di dalamnya.