Jaringan Kustom

Bridge buatan pengguna, isolasi antar jaringan, dan alasan jaringan kustom menjadi praktik baku.

Daftar isi

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.

bash
# 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 catatan

Daftar 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.

bash
# 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-catatan

Keunggulan 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.

AspekBridge defaultJaringan kustom
Resolusi nama antar containerTidak tersedia, hanya alamat IPOtomatis berdasarkan nama container
Isolasi antar aplikasiSeluruh container tanpa opsi --network berkumpul di satu jaringan yang samaSatu jaringan per aplikasi, tidak saling terjangkau
Keanggotaan containerHanya dapat ditetapkan saat docker runDapat 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.

jaringan-catatancontainercatatan-webcontainerdbjembatan privat dan DNSDNS mengenal: catatan-web, dbjaringan-laincontaineraplikasi lainjembatan privat dan DNSDNS mengenal: anggotanya saja
Dua jaringan kustom yang saling terisolasi

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.

bash
# 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-web

Setiap 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 create membuat jaringan bridge buatan pengguna, sedangkan docker network ls, inspect, dan rm mengelola 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#