Tutorial Docker: Memulai jaringan Docker

Kasus penggunaan umum untuk Docker adalah layanan berjaringan, dan Docker memiliki model jaringannya sendiri yang memungkinkan kontainer berbicara satu sama lain dan dengan dunia luar.

Awalnya, kontainer Docker harus dihubungkan bersama dengan tangan, atau diekspos secara manual ke dunia luar. Model jaringan saat ini memungkinkan container menemukan satu sama lain secara otomatis di host yang sama (atau di berbagai host), dan diekspos ke dunia luas dengan cara yang lebih terkontrol.

Ada empat cara dasar Docker memasok pengembang dengan jaringan untuk kontainer. Dua yang pertama, jaringan jembatan dan overlay , mencakup kasus penggunaan paling umum dalam produksi. Dua lainnya, jaringan host dan Macvlan , ada untuk mencakup kasus yang kurang umum.

Jaringan Docker: Jaringan jembatan

Jaringan jembatan memungkinkan kontainer yang berjalan pada host Docker yang sama berkomunikasi satu sama lain. Instance baru Docker hadir dengan jaringan bridge default bernama bridge, dan secara default semua container yang baru dimulai terhubung dengannya.

The bridgejaringan dilengkapi dengan banyak out-of-the-box default nyaman, tetapi mereka mungkin perlu fine-tuning dalam produksi. Misalnya, kontainer aktif bridgesecara otomatis membuat semua port terpapar satu sama lain, tetapi tidak ada yang terbuka ke dunia luar. Itu berguna saat Anda perlu menguji komunikasi antar container, tetapi tidak untuk men-deploy layanan langsung.

Untuk hasil terbaik, buat jaringan jembatan Anda sendiri. Jembatan yang ditentukan pengguna memiliki banyak fitur yang bridgetidak dimiliki jembatan:

  • Resolusi DNS bekerja secara otomatis di antara penampung di jembatan khusus. Dengan cara ini, Anda tidak perlu menggunakan alamat IP mentah untuk berkomunikasi di antara mereka seperti yang Anda lakukan di bridgejembatan. Penampung dapat menemukan penampung lain melalui DNS menggunakan nama penampung.
  • Penampung dapat ditambahkan dan dihapus dari jembatan khusus saat sedang berjalan.
  • Variabel lingkungan dapat dibagikan di antara penampung di jembatan khusus.

Singkatnya, Anda dapat mulai mengutak-atik kontainer menggunakan jembatan default, tetapi untuk pekerjaan produksi yang serius Anda ingin membuat jembatan khusus.

Jaringan Docker: Overlay jaringan

Jaringan jembatan adalah untuk kontainer di host yang sama. Jaringan overlay adalah untuk kontainer yang berjalan di host yang berbeda, seperti yang ada di kawanan Docker. Ini memungkinkan penampung di seluruh host menemukan satu sama lain dan berkomunikasi, tanpa Anda harus khawatir tentang cara menyiapkannya untuk setiap penampung yang berpartisipasi.

Swarm mode orchestrator Docker secara otomatis membuat jaringan overlay , ingress. Secara default, semua layanan di swarm menempelkan dirinya sendiri ingress. Tetapi seperti default bridge, ini bukan pilihan terbaik untuk sistem produksi, karena defaultnya mungkin tidak sesuai. Taruhan terbaik Anda adalah membuat jaringan overlay kustom, dengan atau tanpa swarm, dan melampirkan node ke sana sesuai kebutuhan.

Jika Anda ingin menggunakan jaringan overlay dengan container yang tidak berjalan dalam kerumunan, itu kasus penggunaan lain untuk membuat jaringan overlay kustom. Perhatikan bahwa setiap host Docker pada jaringan overlay harus memiliki port yang tepat yang terbuka untuk rekan-rekannya agar dapat dilihat, dan tanpa mode swarm setiap node memerlukan akses ke penyimpanan nilai kunci dari beberapa jenis.

Perhatikan juga bahwa jaringan overlay, secara default, hanya mengizinkan 256 alamat IP yang berbeda. Anda dapat meningkatkan batas ini, tetapi Docker merekomendasikan untuk menggunakan banyak overlay sebagai gantinya.

Jaringan Docker: Jaringan host

The hostSopir jaringan memungkinkan kontainer telah tumpukan jaringan mereka berjalan berdampingan dengan tumpukan pada host. Server web pada port 80 dalam hostwadah jaringan tersedia dari port 80 pada host itu sendiri.

Keuntungan terbesar dari jaringan host adalah kecepatan. Jika Anda perlu memberikan akses port kontainer dan Anda ingin membuatnya sedekat mungkin dengan OS yang mendasarinya, inilah cara yang harus dilakukan. Tapi itu datang dengan biaya fleksibilitas: Jika Anda memetakan port 80 ke sebuah kontainer, tidak ada kontainer lain yang dapat menggunakannya pada host tersebut.

Jaringan Docker: Jaringan Macvlan

Jaringan Macvlan adalah untuk aplikasi yang bekerja secara langsung dengan jaringan fisik yang mendasarinya, seperti aplikasi pemantauan lalu lintas jaringan. The macvlandriver tidak hanya menetapkan alamat IP untuk kontainer, tapi alamat MAC fisik juga.

Perhatikan bahwa jenis jaringan Docker ini hadir dengan banyak peringatan yang sama yang Anda miliki jika, katakanlah, Anda membuat alamat MAC virtual menggunakan VM. Singkatnya, Macvlan harus dicadangkan hanya untuk aplikasi yang tidak berfungsi kecuali mereka bergantung pada alamat jaringan fisik.

Jaringan Docker: Membuat dan mengelola jaringan

Semua manajemen jaringan di Docker dilakukan dengan menggunakan docker networkperintah. Banyak dari sub-perintahnya mirip dengan perintah Docker lainnya; misalnya, docker network lsmenampilkan semua jaringan yang dikonfigurasi pada instance Docker saat ini:

$ jaringan docker ls ID JARINGAN NAMA DRIVER LINGKUP 2e0adaa0ce4a jembatan lokal 0de3da43b973 host host lokal 724a28c6d86d tidak ada null lokal

Untuk membuat jaringan, gunakan createsubperintah bersama dengan --driverbendera untuk menunjukkan driver mana yang akan digunakan ( bridge, overlay, macvlan):

$ docker network create --driver bridge my-bridge 

Kontainer jaringan host tidak memerlukan jaringan yang akan dibuat untuk mereka. Sebagai gantinya, luncurkan wadah dengan --network hostbendera. Semua proses di penampung mendengarkan di port yang telah dikonfigurasikan sebelumnya, jadi pastikan semua itu disetel terlebih dahulu.

Opsi untuk membuat jaringan juga termasuk menentukan subnet, rentang alamat IP, dan gateway jaringannya, seperti halnya membuat jaringan menggunakan cara lain.

Kontainer dijalankan secara default di bridgejaringan. Untuk menggunakan jaringan tertentu, cukup gunakan --networkbendera saat meluncurkan wadah dan tentukan nama jaringan.

Anda juga dapat memasangkan container yang sedang berjalan dengan jaringan:

$ docker network menghubungkan jembatan my_container

Ini menempel  my_containerke bridgejaringan, sambil mempertahankan koneksi jaringan yang sudah ada.

Saat container di-spin down, jaringan apa pun yang terkait dengannya dibiarkan utuh. Jika Anda ingin menghapus jaringan secara manual, Anda dapat melakukannya dengan docket network rm perintah, atau gunakan docker network pruneuntuk menghapus semua jaringan yang tidak lagi digunakan pada host.

Jaringan Docker dan jaringan Kubernetes

Jika Anda mengincar Kubernetes sebagai solusi orkestrasi, tetapi sudah memiliki cukup banyak pekerjaan yang dimasukkan ke dalam pengaturan jaringan Docker, Anda tidak akan senang mendengar tidak ada korespondensi satu-ke-satu antara cara Docker dan Kubernetes menangani jaringan.

Detailnya dijelaskan dalam dokumentasi Kubernetes, tetapi versi singkatnya adalah bahwa keduanya memiliki model yang berbeda secara fundamental tentang bagaimana sumber daya jaringan dialokasikan dan dikelola. Jadi, Anda harus merancang pengaturan jaringan khusus Kubernetes untuk aplikasi Anda.

Salah satu pendekatan setengah jalan yang mungkin adalah menggunakan plugin Kubernetes Container Network Interface (CNI) yang bekerja dengan kontrol jaringan Docker sendiri. Tapi ini adalah solusi sementara yang terbaik; pada titik tertentu, Anda perlu membangun proyek Kubernetes menggunakan metafora jaringannya sendiri dari dalam ke luar.