Setiap state pada Chapter Container State menggambarkan container dalam dimensi waktu, sedangkan driver jaringan menempatkan container dalam dimensi ruang: siapa yang bisa menjangkaunya, melalui kabel virtual apa, dan dengan alamat berapa. Docker menyediakan enam network driver resmi yang menentukan seluruh mekanisme itu — dari bridge bawaan yang kita pakai tanpa sadar sejak container pertama, sampai overlay yang menyatukan container lintas host fisik, peta yang sudah kita bedah pada Chapter Konsep Networking Docker. Chapter ini merangkum keenam driver, sembilan perintah jaringan yang melayani mereka, dan tiga alamat istimewa yang muncul terus di dalam container.

Enam Driver Jaringan #

Driver menentukan bagaimana sebuah network dibangun di balik layar: apakah container mendapat namespace sendiri, apakah paket melewati NAT, dan apakah container bisa dijangkau dari luar host. Tabel berikut memetakan keenamnya dengan empat kolom — Driver, Isolasi, Use case, dan Catatan:

DriverIsolasiUse caseCatatan
bridgeNamespace jaringan sendiri, terhubung lewat veth ke docker0Default — komunikasi antar container pada satu hostEmbedded DNS hanya aktif di custom network; akses dari luar lewat -p; satu host saja
hostTanpa namespace — stack jaringan host dipakai langsungKinerja jaringan maksimal atau akses penuh ke interface hostPort container adalah port host — -p dibuang sama sekali; Linux saja
noneNamespace tetap dibuat, tanpa interface selain loopbackIsolasi total — batch job dan komputasi tanpa akses jaringanTidak ada konektivitas keluar maupun masuk
overlayJaringan virtual lintas host lewat enkapsulasi VXLANContainer di beberapa host fisik sebagai satu networkService discovery bawaan Swarm; butuh cluster, materi Chapter Docker Swarm
macvlanContainer mendapat MAC address sendiri di jaringan fisikContainer harus tampil sebagai perangkat nyata di LANTanpa NAT; port switch harus mengizinkan banyak MAC address
ipvlanContainer berbagi MAC induk dengan alamat IP unikLingkungan yang membatasi jumlah MAC per port switchBeroperasi di lapisan L3 — routing, bukan switching

Satu aturan tentang driver bridge menyelamatkan kita dari kebingungan yang paling klasik: embedded DNS di 127.0.0.11 hanya aktif pada user-defined network, bukan pada bridge default — jadi komunikasi antar-container dengan nama memang mustahil di bridge bawaan, dan solusinya selalu membuat custom network seperti net-aplikasi kita, praktik standar dari Chapter Membuat Custom Network. Bridge default tetap berguna untuk container tunggal yang hanya butuh keluar ke internet, tetapi begitu dua container perlu saling memanggil, custom network adalah satu-satunya jalur yang benar — materi lengkap Chapter Container DNS dan Komunikasi Antar Container.

Sembilan Perintah Network #

Sembilan perintah berikut mengurus seluruh daur hidup jaringan — menciptakan, memeriksa, mengisi, dan membongkar. Daftar network di host bisa dibaca kapan saja lewat docker network ls:

bash
$ docker network ls

Output yang Dihasilkan:

text
NETWORK ID     NAME           DRIVER    SCOPE
a1b2c3d4e5f6   bridge         bridge    local
9f8e7d6c5b4a   host           host      local
3e4f5a6b7c8d   none           null      local
7c8d9e0f1a2b   net-aplikasi   bridge    local

Mari kita telaah tiga baris pertama pada output tersebut:

  1. bridge, host, none — tiga network bawaan yang hadir sejak daemon pertama menyala, satu untuk setiap driver inti.
  2. Driver null pada none — nama driver di kolom keempat untuk network tanpa jaringan; inilah pasangan network none yang kita bedah pada Chapter None Network.
  3. net-aplikasi — satu-satunya baris buatan kita; network inilah rumah bagi web, app, dan db sepanjang Section Jaringan Container.

Perintah-perintah yang bekerja di atas network-network tersebut:

PerintahFungsiContoh
docker network createMembuat user-defined networkdocker network create net-aplikasi
docker network lsMenampilkan daftar network beserta driver-nyadocker network ls
docker network inspectMenampilkan subnet, gateway, dan anggota containerdocker network inspect net-aplikasi
docker network connectMemasukkan container berjalan ke sebuah networkdocker network connect net-aplikasi web
docker network disconnectMelepas container dari sebuah networkdocker network disconnect net-aplikasi web
docker network rmMenghapus network kosongdocker network rm net-aplikasi
docker network pruneMenghapus seluruh network tanpa penghunidocker network prune
docker run --networkMenempatkan container baru di network tertentudocker run -d --network net-aplikasi --name db postgres:18-alpine
docker run --network-aliasMemberi nama panggilan tambahan saat membuat containerdocker run -d --network net-aplikasi --network-alias cache redis:7-alpine

Tiga Alamat Istimewa #

Di dalam sebuah container, tiga alamat memegang peran tetap dan muncul berulang kali sepanjang Course — dari resolv.conf sampai koneksi database. Tabel berikut merangkum ketiganya:

AlamatPerannyaKapan tersedia
127.0.0.11Nameserver embedded DNS di dalam containerHanya pada user-defined network
host.docker.internalNama khusus yang menunjuk ke hostBawaan Docker Desktop; di Linux perlu --add-host=host.docker.internal:host-gateway
172.17.0.1Gateway docker0 — wajah host di bridge defaultSelalu; custom network mendapat pool berurutan berikutnya

Aturan pool subnet-nya satu baris: daemon membagi alamat secara berurutan — 172.17.0.0/16 untuk docker0, lalu network baru menerima 172.18.0.0/16, 172.19.0.0/16, dan seterusnya, sehingga gateway net-aplikasi kita adalah 172.18.0.1. Nomor pool ini tidak boleh dihafal sebagai identitas — container bisa pindah-pindah alamat — melainkan sebagai pola pembagian wilayah.

Alamat 127.0.0.11 adalah pintu ke dua dunia DNS sekaligus. Daemon menjalankan satu server DNS kecil di setiap container user-defined network: untuk pertanyaan tentang nama internal — nama container, alias, nama service Compose — server menjawab sendiri dari tabelnya; untuk pertanyaan tentang domain luar seperti example.com, server meneruskan (forward) ke nameserver upstream yang dibawa dari konfigurasi host. Satu alamat, dua sumber jawaban — pembagian kerja yang kita buktikan lewat nslookup dan getent pada Chapter Container DNS, dan alasan container bisa memanggil db dan registry-1.docker.io lewat nameserver yang sama.

Driver jaringan mengatur lalu lintas, tetapi Docker juga punya dunia bawah tanah yang bekerja setiap kali image dibangun dan container menulis berkas: storage driver dan snapshotter. Chapter berikutnya, Storage Driver dan Snapshotter, membedakan keduanya — keluarga driver lawas dari era sebelum containerd dan pasangan snapshotter modern yang kini menjadi bawaan Engine 29.

Referensi #