Tutorial Docker: Mulakan dengan rangkaian Docker

Kes penggunaan umum untuk Docker adalah perkhidmatan rangkaian, dan Docker mempunyai model rangkaian sendiri untuk membiarkan kontena berbicara antara satu sama lain dan dunia luar.

Pada asalnya, kontena Docker harus dihubungkan bersama dengan tangan, atau terkena secara manual ke dunia luar. Model rangkaian semasa membolehkan kontena mencari satu sama lain secara automatik di host yang sama (atau di seluruh host yang berbeza), dan terdedah kepada dunia pada umumnya dengan cara yang lebih terkawal.

Terdapat empat cara asas bahawa Docker membekalkan rangkaian kepada kontena kepada pembangun. Rangkaian dua, jambatan dan overlay pertama merangkumi kes penggunaan yang paling biasa dalam pengeluaran. Dua lagi, rangkaian host dan Macvlan , wujud untuk menutup kes yang kurang biasa.

Rangkaian Docker: Rangkaian jambatan

Rangkaian jambatan membenarkan kontena yang berjalan di host Docker yang sama berkomunikasi antara satu sama lain. Contoh baru Docker dilengkapi dengan rangkaian jambatan lalai yang dinamakan bridge, dan secara lalai semua kontena yang baru bermula menyambungkannya.

The bridgerangkaian datang dengan banyak sesuai yang out-of-the-box mungkir, tetapi mereka mungkin memerlukan penalaan halus dalam pengeluaran. Contohnya, kontena dihidupkan bridgesecara automatik mempunyai semua port yang terkena satu sama lain, tetapi tidak ada ke dunia luar. Itu berguna ketika anda perlu menguji komunikasi antara kontena, tetapi tidak untuk menggunakan perkhidmatan langsung.

Untuk hasil terbaik, buat rangkaian jambatan anda sendiri. Jambatan yang ditentukan pengguna mempunyai banyak ciri yang bridgetidak dimiliki oleh jambatan:

  • Resolusi DNS berfungsi secara automatik antara kontena di jambatan khas. Dengan cara ini, anda tidak perlu menggunakan alamat IP mentah untuk berkomunikasi di antara mereka seperti yang anda lakukan di bridgejambatan. Kontena dapat mencari bekas lain melalui DNS menggunakan nama kontena.
  • Kontena boleh ditambahkan dan dikeluarkan dari jambatan khas semasa mereka berjalan.
  • Pemboleh ubah persekitaran dapat dikongsi antara kontena di jambatan khas.

Ringkasnya, anda boleh mula bermain-main dengan bekas menggunakan jambatan lalai, tetapi untuk kerja-kerja pengeluaran yang serius, anda pasti ingin membuat jambatan khas.

Rangkaian Docker: Rangkaian overlay

Jaringan jambatan adalah untuk kontena di host yang sama. Rangkaian overlay adalah untuk kontena yang berjalan di host yang berbeza, seperti yang ada di Docker kawanan. Ini membolehkan kontena di seluruh hos saling mencari dan berkomunikasi, tanpa anda perlu bimbang tentang cara mengaturnya untuk setiap kontena yang mengambil bahagian.

Orkestrator mod kawanan Docker secara automatik membuat rangkaian overlay , ingress. Secara lalai, sebarang perkhidmatan di kawanan melekat ingress. Tetapi seperti default bridge, ini bukan pilihan terbaik untuk sistem pengeluaran, kerana defaultnya mungkin tidak sesuai. Pertaruhan terbaik anda ialah membuat rangkaian overlay tersuai, dengan atau tanpa kawanan, dan melampirkan simpul padanya jika diperlukan.

Sekiranya anda ingin menggunakan rangkaian overlay dengan kontena tidak berjalan di kawanan, itu adalah kes penggunaan lain untuk membuat rangkaian overlay tersuai. Perhatikan bahawa setiap host Docker pada rangkaian overlay mesti mempunyai port yang sesuai untuk dilihat oleh rakan sejawatnya, dan tanpa mod kawanan, setiap simpul memerlukan akses ke kedai nilai kunci.

Perhatikan juga bahawa rangkaian overlay, secara lalai, hanya membenarkan 256 alamat IP yang berbeza. Anda boleh menaikkan had ini, tetapi Docker mengesyorkan menggunakan beberapa tindanan sebagai gantinya.

Rangkaian Docker: Rangkaian hos

The hostpemandu rangkaian membolehkan bekas telah susunan rangkaian mereka berjalan sebelah menyebelah dengan timbunan pada tuan rumah. Pelayan web pada port 80 dalam hostwadah -networked tersedia dari port 80 pada host itu sendiri.

Keuntungan terbesar rangkaian host adalah kepantasan. Sekiranya anda perlu memberi akses port kontena dan anda ingin menjadikannya sedekat mungkin dengan OS yang mendasari, ini adalah cara untuk pergi. Tetapi ia memerlukan kos fleksibiliti: Sekiranya anda memetakan port 80 ke wadah, tidak ada wadah lain yang dapat menggunakannya di host tersebut.

Rangkaian Docker: Rangkaian Macvlan

Rangkaian Macvlan adalah untuk aplikasi yang bekerja secara langsung dengan jaringan fizikal yang mendasari, seperti aplikasi pemantauan lalu lintas rangkaian. The macvlanpemandu tidak hanya menetapkan alamat IP kepada bekas, tetapi alamat MAC fizikal juga.

Perhatikan bahawa rangkaian Docker jenis ini dilengkapi dengan banyak peringatan yang sama seperti yang anda miliki jika, katakan, anda membuat alamat MAC maya menggunakan VM. Ringkasnya, Macvlan harus disediakan hanya untuk aplikasi yang tidak berfungsi kecuali mereka bergantung pada alamat rangkaian fizikal.

Rangkaian Docker: Membuat dan mengurus rangkaian

Semua pengurusan rangkaian di Docker dilakukan menggunakan docker networkperintah. Sebilangan besar sub-perintahnya serupa dengan arahan Docker yang lain; sebagai contoh, docker network lsmemaparkan semua rangkaian yang dikonfigurasi pada contoh Docker semasa:

$ docker network ls NETWORK ID NAME DRIVER SCOPE 2e0adaa0ce4a jambatan jambatan tempatan 0de3da43b973 hos tuan rumah tempatan 724a28c6d86d tiada nol tempatan

Untuk membuat rangkaian, gunakan createsubcommand bersama --driverbendera untuk menunjukkan pemacu yang akan digunakan ( bridge, overlay, macvlan):

$ docker network create --driver bridge my-bridge 

Kontena rangkaian host tidak memerlukan rangkaian dibuat untuknya. Sebaliknya, lancarkan bekas dengan --network hostbendera. Sebarang proses pada kontena akan mendengar pada port yang telah dikonfigurasikan, jadi pastikan proses tersebut disiapkan terlebih dahulu.

Pilihan untuk membuat jaringan juga termasuk menentukan subnetnya, rentang alamat IP, dan gateway jaringan, seperti halnya untuk membuat jaringan menggunakan cara lain.

Kontena dijalankan secara lalai di bridgerangkaian. Untuk menggunakan rangkaian tertentu, cukup gunakan --networkbendera ketika melancarkan wadah dan tentukan nama rangkaian.

Anda juga dapat memasangkan wadah yang sedang berjalan dengan rangkaian:

$ docker network connect bridge my_container

Ini melekat  my_containerpada bridgerangkaian, sambil mengekalkan semua sambungan rangkaian yang sudah ada.

Apabila wadah diputar, rangkaian yang berkaitan dengannya dibiarkan utuh. Sekiranya anda ingin membuang rangkaian secara manual, anda boleh melakukannya dengan docket network rm arahan, atau gunakan docker network pruneuntuk membuang semua rangkaian yang tidak lagi digunakan pada host.

Rangkaian Docker dan Kubernetes

Sekiranya anda melihat Kubernetes sebagai penyelesaian orkestrasi, tetapi sudah memiliki banyak pekerjaan yang disusun dalam penyediaan rangkaian Docker, anda tidak akan senang mendengar tidak ada persamaan antara satu sama lain antara bagaimana Docker dan Kubernetes menangani rangkaian.

Perinciannya dijelaskan dalam dokumentasi Kubernetes, tetapi versi pendek adalah bahawa mereka mempunyai model yang secara asasnya berbeza untuk bagaimana sumber rangkaian diperuntukkan dan dikendalikan. Oleh itu, anda perlu membuat persediaan rangkaian khusus Kubernetes untuk aplikasi anda.

Salah satu pendekatan yang mungkin dilakukan adalah menggunakan plugin Kubernetes Container Network Interface (CNI) yang berfungsi dengan kawalan rangkaian Docker sendiri. Tetapi ini adalah penyelesaian sementara yang terbaik; pada satu ketika, anda perlu membina projek Kubernetes anda menggunakan metafora rangkaiannya sendiri dari dalam ke luar.