Topik ini membahas jaringan bridge buatan pengguna, yaitu jembatan jaringan yang dibuat melalui perintah Docker alih-alih jaringan bawaan yang digunakan bersama oleh seluruh container. Pembahasan mencakup pembuatan jaringan, keunggulannya dibandingkan bridge default, pemasangan dan pelepasan container, serta alasan satu jaringan per aplikasi menjadi praktik baku. Setelah membacanya, aplikasi catatan beserta basis data PostgreSQL dapat dipasangkan pada jaringan yang dikhususkan bagi aplikasi tersebut.
Membuat jaringan buatan pengguna#
Perintah docker network create membuat jaringan baru dengan driver bridge secara default, sehingga satu baris perintah sudah cukup untuk menyiapkan jembatan milik sebuah aplikasi. Jaringan hasil perintah ini bersifat privat bagi Docker pada host, komputer tempat Docker berjalan, dan tidak dapat dijangkau dari luar, kecuali oleh container yang menjadi anggotanya. Nama jaringan sebaiknya mengikuti nama aplikasinya, misalnya jaringan-catatan untuk aplikasi catatan, sehingga jaringan milik aplikasi mana langsung terbaca dari namanya. Container dapat dipasang kepadanya pada saat container dibuat maupun sesudahnya.
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# membuat jaringan bridge milik aplikasi catatan
docker network create jaringan-catatan
# memasang container baru langsung ke jaringan tersebut
docker run -d --name catatan-web --network jaringan-catatan -p 8000:8000 catatanDaftar jaringan yang ada diperiksa dengan docker network ls, sedangkan rincian satu jaringan dibaca melalui docker network inspect. Rincian tersebut mencakup rentang subnet, yaitu rentang alamat IP privat yang dialokasikan Docker untuk jaringan itu, beserta daftar container terpasang. Jaringan yang tidak lagi digunakan dihapus dengan docker network rm, dengan syarat tidak ada container yang masih terpasang padanya. Apabila masih ada, keanggotaannya dilepas terlebih dahulu agar penghapusan tidak ditolak. Tiga perintah tersebut sudah memadai untuk pengelolaan sehari-hari.
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# daftar seluruh jaringan yang dikenal Docker
docker network ls
# rincian satu jaringan, termasuk subnet dan container terpasang
docker network inspect jaringan-catatan
# menghapus jaringan yang tidak lagi digunakan
docker network rm jaringan-catatanKeunggulan dibandingkan bridge default#
Jaringan buatan pengguna mengatasi kekurangan jaringan default secara sekaligus, bukan satu per satu. Perbedaan terpentingnya terletak pada DNS, yang pada jaringan kustom menerjemahkan nama container secara otomatis sehingga alamat IP tidak perlu dicatat. Perbedaan kedua menyangkut isolasi, karena dua jaringan yang berbeda tidak memiliki jalur di antara keduanya. Perbedaan ketiga menyangkut keanggotaan yang dinamis, dan ketiganya dirangkum pada tabel berikut.
| Aspek | Bridge default | Jaringan kustom |
|---|---|---|
| Resolusi nama antar container | Tidak tersedia, hanya alamat IP | Otomatis berdasarkan nama container |
| Isolasi antar aplikasi | Seluruh container tanpa opsi --network berkumpul di satu jaringan yang sama | Satu jaringan per aplikasi, tidak saling terjangkau |
| Keanggotaan container | Hanya dapat ditetapkan saat docker run | Dapat dipasang dan dilepas kapan saja dengan docker network connect |
Isolasi antar jaringan bekerja dua arah. Container yang hanya terpasang pada jaringan A tidak dapat menjangkau container pada jaringan B, demikian pula sebaliknya, karena tidak ada jalur yang menghubungkan kedua jembatan tersebut. Gambar berikut memperlihatkan dua jaringan kustom yang saling terpisah, beserta DNS masing-masing yang hanya mengenal anggotanya sendiri.
Sisi kanan gambar tidak pernah menjangkau sisi kiri, dan hal itu berlaku meskipun kedua jaringan berada pada host yang sama. Docker tidak menyediakan jalur antar jaringan secara default, sehingga koneksi semacam itu hanya mungkin bila sebuah container sengaja dipasang pada keduanya. Container semacam itu menjadi satu-satunya jalur di antara kedua jaringan, dan pemasangannya sebaiknya disengaja dengan alasan yang jelas, misalnya antarmuka pemantauan yang membaca dua aplikasi sekaligus.
Memasang dan melepas container#
Keanggotaan sebuah jaringan tidak harus diputuskan sekali untuk selamanya. Opsi --network pada docker run memasang container baru saat dibuat, sedangkan docker network connect memasang container yang sudah berjalan tanpa perlu menghentikannya terlebih dahulu. Pasangan docker network disconnect melepas container dari jaringan tersebut, dan satu container boleh menjadi anggota beberapa jaringan sekaligus apabila aplikasinya memang melayani dua kelompok container.
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# memasang container yang sudah berjalan ke jaringan kustom
docker network connect jaringan-catatan catatan-web
# melepas container yang sama dari jaringan tersebut
docker network disconnect jaringan-catatan catatan-webSetiap perubahan keanggotaan dapat diverifikasi dengan docker network inspect jaringan-catatan, yang menampilkan daftar container pada bagian Containers. Pemasangan dan pelepasan ini berlangsung tanpa memulai ulang container, karena Docker hanya menambah atau menghapus antarmuka virtual pada container yang bersangkutan. Karena itu, layanan yang sedang melayani permintaan tidak terganggu ketika jaringannya diatur ulang. Kemampuan ini menjadi dasar pola pemasangan bertahap, misalnya menambahkan container pemantauan ke jaringan aplikasi yang sudah berjalan.
Praktik baku: satu jaringan untuk setiap aplikasi#
Praktik yang dianjurkan adalah membuat satu jaringan untuk setiap aplikasi dan menghubungkan seluruh container milik aplikasi tersebut ke jaringan yang sama. Sebagai contoh, aplikasi catatan yang menggunakan basis data PostgreSQL cukup dijalankan pada jaringan jaringan-catatan, yang menghubungkan container aplikasi dengan container db. Isolasi ini mencegah aplikasi lain pada host yang sama mengakses basis data catatan melalui jaringan tersebut, meskipun container lain tidak memiliki pembatasan akses tambahan.
Konvensi ini juga membuat daftar jaringan lebih mudah dikelola. Setiap jaringan yang ditampilkan oleh docker network ls mewakili satu aplikasi yang masih dipelihara. Dengan demikian, jaringan yang tidak lagi digunakan oleh aplikasi mana pun dapat dikenali dan dihapus dengan mudah. Pada host yang menjalankan banyak aplikasi, jumlah jaringan tetap terkendali karena hanya bertambah ketika aplikasi baru ditambahkan. Siklus hidup jaringan pun mengikuti siklus hidup aplikasinya: jaringan dibuat ketika aplikasi pertama kali dijalankan dan dihapus ketika aplikasi tidak lagi dipelihara.
Ringkasan#
docker network createmembuat jaringan bridge buatan pengguna, sedangkandocker network ls,inspect, danrmmengelola daftar jaringannya.- Jaringan kustom menyediakan DNS antar container, isolasi penuh antar jaringan, dan keanggotaan dinamis melalui
docker network connect. - Satu container dapat menjadi anggota beberapa jaringan sekaligus, dan pemasangan maupun pelepasannya berlangsung tanpa memulai ulang container.
- Praktik bakunya adalah satu jaringan per aplikasi, sehingga DNS, isolasi, dan siklus hidup jaringan mengikuti siklus aplikasinya.
Referensi#
- docker network create — Docker Docs — Sintaks pembuatan jaringan beserta opsi driver dan subnetnya.
- docker network connect — Docker Docs — Memasang container yang sedang berjalan ke sebuah jaringan.
- Standalone networking tutorial — Docker Docs — Langkah praktis menggunakan jaringan kustom pada container mandiri.