
Ketika saya berbicara dengan insinyur Linux dan memberi tahu mereka tentang masalah cluster Kubernetes di Windows, mereka melihat saya dengan curiga. Beberapa bahkan tidak percaya bahwa
ini sah . Wadah di Windows tidak umum dan banyak diminati di Linux. Tapi saya pikir ada baiknya membicarakan topik ini, jika hanya untuk memahami konsep umum dan perbedaan utama antara Windows dan Linux. Entri pertama saya akan pergi ke kanvas dengan kuas lebar, dan kemudian, dalam posting berikutnya, saya akan mencoba untuk secara bertahap menggali nuansa.
Wadah Windows
Menurut
artikel ini:Banyak pengembang .NET atau SQL Server menggigit siku mereka dan iri pada rekan kerja Linux mereka.
Memang, wadah pada Windows masih eksotis hingga saat ini. Dan bagian terburuknya adalah bahwa dokumentasi harus dikumpulkan berkeping-keping, pada setiap sumber daya, apakah itu situs web resmi Docker atau Microsoft, semuanya disajikan dalam bentuk ikhtisar tanpa deskripsi "bagaimana dan mengapa," dan setelah satu atau dua bulan informasi yang ada menjadi usang. Dan tidak ada yang supernatural dalam hal ini - wadah dan teknologi yang terkait dengannya berkembang dengan kecepatan yang tidak realistis.
Saat ini, semuanya lebih baik dengan dokumentasi dan untuk terjun ke dunia kontainer untuk Windows, cukup baca
dokumentasi resmi dari Microsoft dan pantau perubahannya. Menariknya, dokumentasinya ditulis dengan baik dan dalam bahasa Rusia, meskipun dengan studi mendalam Anda tidak dapat menghindari mengklik tautan ke berbagai sumber seperti
https://www.docker.com/ atau
https://kubernetes.io/ di mana semuanya ditulis dalam format lama bahasa inggris yang bagus.
Sekarang jawaban atas pertanyaan apa pun dapat ditemukan dalam dokumentasi resmi, tetapi ada beberapa nuansa yang paling dikenal sebelumnya. Mungkin ini akan berguna bagi Anda dan menghemat waktu ketika terbenam dalam teknologi wadah di bawah bendera Microsoft.
Anda tidak dapat menjalankan wadah Windows di Linux dan Windows *
Teknologi wadah memudahkan penanganan lingkungan berkat gambar aplikasi yang dikonfigurasi ulang. Ini seperti Apple Appstore atau Google Play, tetapi hanya untuk insinyur dan pengembang. Seperti di toko untuk aplikasi seluler, Anda tidak dapat meletakkan aplikasi dari Google Play di iOS. Jadi pada host Docker dengan sistem operasi Linux, Anda tidak dapat memulai wadah dengan sistem operasi Windows. Kebalikannya juga benar, meskipun dengan beberapa "tetapi", karena host Docker dengan Windows masih dapat menyediakan Linux dengan lingkungan untuk menjalankan kontainer.
Selain itu, Anda tidak dapat memulai wadah Windows di lingkungan Windows tanpa memastikan bahwa versi sistem operasi kompatibel. Ketika bekerja dengan kontainer dari Microsoft, Anda harus melihat kembali
Kompatibilitas Versi Windows Container dan secara berkala membuka dokumen ini.
Berbicara tentang versi - Microsoft dengan munculnya wadah memutuskan untuk merilis versi semi-tahunan Windows semi-tahunan. Ini adalah versi seperti windows server 1703, 1709, 1803, 1809, 1903. Angka-angka menunjukkan tahun dan bulan rilis, dan mereka didukung selama 18 bulan. Dua yang pertama sudah dalam damai dan berada di akhir pelayanan. Selain itu, ada versi LTS seperti Windows Server 2016 dan Windows Server 2019.
Daftar versi.Jadi, jika Anda mengumpulkan wadah pada host dengan versi Windows 1803, maka Anda hanya dapat menjalankan kontainer ini pada host dengan Windows 1803. Oleh karena itu, agar tidak membangun kembali wadah itu sendiri setiap kali, Anda harus menggunakan versi LTS Windows, yang dengan kecepatan pengembangan teknologi modern. tidak selalu dibenarkan. Atau, bagaimanapun, pikirkan tentang versi dan masih terus merakit kembali wadah mengikuti program langkah demi langkah untuk semi-tahunan.
Tag terbaru dalam Dokerfile untuk wadah Windows tidak selalu ada dan umumnya
usang . Dengan cara yang baik, Anda selalu perlu tahu apa versi Windows Anda dan membuat perubahan yang sesuai dengan Dockerfile.
Kontainer adalah bagian dari pendekatan Infrastruktur sebagai Kode. Hal ini diperlukan untuk merakit kembali wadah secara terus-menerus, tidak hanya sederhana dan menyenangkan, tetapi ini adalah keajaiban utama, yang memungkinkan aplikasi untuk selalu bekerja pada perangkat lunak yang baru dan lebih baik. Tetapi dalam kasus kami, kami dihadapkan pada batasan: itu tidak akan berfungsi untuk menjaga Dockerfile universal untuk semua sistem Windows. Ini harus diperhitungkan.
Semua hal di atas berlaku untuk kontainer yang berjalan dalam mode isolasi proses. Dalam mode isolasi Hyper-V, kompatibilitas mundur berlaku - Anda dapat menjalankan semua wadah yang dibangun pada versi saat ini dan sebelumnya. Secara umum, menggunakan isolasi Hyper-V, Anda juga dapat menjalankan wadah Linux pada host Windows. Namun mode ini sejauh ini mendukung lebih sedikit barang, yang hanya kekurangan Kubernetes.
Perbedaan antara proses isolasi dan isolasi Hyper-V adalah topik artikel terpisah. Untuk saat ini, saya hanya akan mengatakan bahwa skenario dengan isolasi Hyper-V tidak sepenuhnya jelas bagi saya, dan secara default, Windows menggunakan proses isolasi.
Sakit kepala lainnya adalah menemukan versi gambar yang benar di Docker Hub. Beberapa gambar umumnya hilang untuk Windows. Misalnya, Anda tidak akan menemukan build resmi Nginx, MySQL, Nodejs, serta ratusan aplikasi lain untuk Windows dan Anda harus mengumpulkan sendiri kontainer atau menggunakan kontainer yang dikumpulkan dan disediakan oleh anggota komunitas.
Windows membutuhkan biaya.Jangan lupa bahwa Windows masih merupakan hal berbayar. Misalnya, versi semi-tahunan tersedia melalui langganan Visual Studio atau dengan Jaminan Perangkat Lunak dalam perjanjian lisensi Microsoft yang ada.
TautanTetapi Microsoft memiliki banyak cara untuk mendapatkan bayaran gratis. Ini adalah program BizSpark dan segala macam versi percobaan Windows Server 2019 selama 180 hari dan seterusnya dan seterusnya.
Wadah Windows tidak ringan.Secara umum diterima bahwa wadah itu ringan, tetapi kebenaran untuk Linux tidak selalu benar untuk Windows. Sebagian besar kontainer Windows, pada pandangan pertama, sangat berbobot. Dan sekilas kesan tidak berubah. Misalnya, aspnet dasar: 4,8 gambar beratnya sekitar 7,5 GB.

Bahkan jika Anda meng-host gambar dasar dalam repositori lokal, unggahan awal gambar ke host akan memakan waktu cukup lama, apalagi repositori jarak jauh seperti Docker Hub.
Ya, Anda dapat menggunakan Windows Nano Server yang ringan dalam beberapa skenario, tetapi sayangnya, ia memiliki banyak keterbatasan. Dan terlebih lagi, Anda tidak berada di jalan dengan Windows Nano Server jika Anda mengembangkan untuk .Net Framework.
Untuk mengelola, Anda harus tahu CMD dan Powershell dengan baik.Kemungkinan besar Anda harus bekerja dengan versi inti Windows Server pada host Docker. Windows Server memiliki banyak kemampuan manajemen jarak jauh. Pendekatan umum adalah memiliki Windows Server dengan antarmuka grafis, Anda dapat menghubungkan semua snap-in grafis ke server inti.
Pendekatan ini tidak berfungsi dalam skenario wadah, meskipun wadah berisi versi lengkap dari Windows Server. Di dalam wadah Windows, secara teori dimungkinkan untuk terhubung melalui WMI, tetapi ini tidak begitu sederhana, jika saja karena host OS akan memotong lalu lintas ini untuk dirinya sendiri. Mungkin ada beberapa puluh dan ratusan kontainer di host, dan dalam hal ini, mengarahkan lalu lintas ke kontainer yang tepat adalah keseluruhan.
CMD dan Powershell akan dibutuhkan untuk administrasi kontainer dan untuk host tempat Docker diinstal. Juga, pengetahuan tentang shell ini diperlukan untuk menulis Dockerfile, karena semua instruksi RUN akan dieksekusi di shell yang disebutkan di atas.
Mengingat semua cmdlet Powershell yang panjang cukup rumit. Ini bukan perintah bash ringkas untuk Anda. Meskipun sekarang sebagian besar cmdlet memiliki alias yang jelas untuk setiap insinyur Linux. Di PowerShell, Anda dapat menggunakan:
rm Remove-Item pwd Get-Location. cat Get-Content touch New-Item etc. # Linux . rm –rf . # Powershell man Get-Help <>
Dari hal-hal yang sangat berguna, ini adalah bahwa dengan menggunakan Powershell Anda dapat menjalankan
server web sederhana dalam sebuah wadah untuk tujuan pengujian. Di Powershell, semuanya muncul sebagai objek. Jika Anda adalah pendukung OOP, maka Anda akan segera menghargai manfaat dari shell ini.
Sebagai kesimpulan dari artikel pengantar, saya ingin mengatakan bahwa saya sengaja tidak membahas masalah orkestrasi dan manajemen cluster. Docker pada Windows sedang mengejar ketinggalan dan aplikasi orkestrasi seperti Swarm dan Kubernetes pada Windows tidak sepenuhnya menyadari fungsinya.
Juga saat ini, jika Anda ingin menaikkan cluster Docker, maka kemungkinan besar multi-platform. Artinya, Anda harus memiliki satu atau lebih host Linux di cluster. Misalnya, untuk Kubernetes, master node harus ada di Linux. Dan di Swarm, kontainer Linux diperlukan, misalnya, untuk mengimplementasikan balancer di Nginx atau menjalankan aplikasi cluster populer lainnya yang hanya tersedia untuk Linux.
PS Menggunakan Windows dalam wadah memiliki serangkaian skrip yang sangat terbatas untuk digunakan. Namun, skenario ini bisa sangat produktif. Tentu saja, hal pertama yang terlintas dalam pikiran adalah aplikasi web IIS, tetapi pengalaman saya menunjukkan bahwa layanan mandiri Windows dan beberapa layanan seperti MSMQ terisolasi dengan baik dalam wadah.
UPD Ada sedikit ketidakakuratan dalam artikel ini, Anda dapat membangun cluster Docker di host Windows saja. Selain itu, ini tidak hanya Swarm, tetapi juga produk yang dikembangkan oleh Micrisoft untuk mengatur cluster Fabric Layanan
UPD2. Wadah Docker untuk Windows 10 hanya tersedia dalam mode isolasi Hyper-V dan menggunakan gambar dasar selain Windows Server.