Kontainer di Windows Server 2016: Apa yang perlu Anda ketahui

Dalam sebuah cerita yang saya tulis untuk Computerworld pada bulan Januari, yang merupakan review dari Windows Server 2016 Technical Preview 4, saya menyebutkan dukungan baru Windows Server untuk wadah Hyper-V yang telah ditambahkan ke dukungannya untuk wadah bergaya Docker (hadir dalam versi beta produk sejak rilis tonggak beta sebelumnya).

Namun, kehadiran dua opsi penampung tersebut menimbulkan banyak pertanyaan. Apa perbedaan antara container Docker dan container Hyper-V baru? Dalam skenario apa Anda ingin menggunakan satu solusi kontainer di atas yang lain? Apakah ada metode terpisah untuk menerapkan masing-masing ini?

Microsoft belum melakukan pekerjaan yang bagus untuk mendokumentasikan dua opsi kontainer ini, dan kontainer itu sendiri baru untuk platform Windows Server. Mengingat kedua faktor tersebut, saya ingin mendedikasikan keseluruhan cerita untuk apa solusi wadah tertentu yang disediakan Windows Server 2016 sekarang dalam bentuk pratinjau dalam rilis yang tersedia, atau berjanji untuk memberikan sebelum rilis perangkat lunak ke tanggal manufaktur (RTM), kemungkinan besar di paruh kedua 2016.

Gambaran

Ada dua jenis container yang ada di Windows Server 2016 saat ini: container Windows Server dan container Hyper-V. Keduanya hanya mendukung Windows Server; keduanya tidak dapat mencampur-dan-mencocokkan Linux dan / atau Unix, misalnya.

Untuk administrator yang malas seperti saya, mari kita bahas pertanyaan penting sebelumnya: Apakah salah satu dari dua jenis penampung lebih sulit untuk diterapkan daripada yang lain? Jawabannya adalah tidak.

[Bacaan lebih lanjut: Tampilan pertama: Jalankan VM di VM dengan container Hyper-V]

Jenis kontainer dijalankan secara berbeda dan memiliki tingkat isolasi dan kepercayaan yang berbeda pada hypervisor. Namun pada intinya, ini adalah keputusan waktu penerapan yang dibuat oleh pemilik mesin fisik - pemilik host - tentang jenis penampung yang akan digunakan, dan itu sesederhana memeriksa tombol radio yang benar di wizard . Anda cukup memilih di antara keduanya pada saat pembuatan. Keputusan tersebut memengaruhi bagaimana Windows Server 2016 - sistem operasi itu sendiri (hypervisor, yang berada di bagian bawah semua hal ini, berjalan di atas silikon dan besi fisik) - mengisolasi dan menjalankan beban kerja dalam setiap wadah.

Jadi sekarang Anda tahu bahwa opsi penampung sama dengan jumlah pekerjaan Anda, bagaimana Anda dengan cerdas memutuskan di antara keduanya? Pada dasarnya, ini adalah kepercayaan: Jika Anda mempercayai kode yang berjalan di dalam wadah, maka Anda akan memilih wadah Windows Server (baca: tradisional, gaya Docker). Jika Anda tidak mempercayai kode, atau tidak dapat memverifikasinya, atau tidak berasal dari pengembang internal Anda dalam organisasi Anda sendiri, maka wadah Hyper-V adalah cara yang tepat. Mari kita lihat setiap opsi secara mendetail.

Wadah Windows Server

Wadah Windows Server sebenarnya hanyalah sebagian dari proyek wadah sumber terbuka Docker, jadi jika Anda memikirkan wadah bergaya Docker, Anda akan memikirkan wadah Windows Server. Kontainer ini pada dasarnya adalah jenis baru mesin virtual yang dalam beberapa hal memiliki isolasi yang lebih sedikit daripada mesin virtual tradisional - yaitu karena, dalam banyak kasus, hal-hal yang umum untuk semua kontainer yang berjalan pada host dibagikan. Di antara item bersama ini adalah file sistem operasi, direktori, dan layanan yang berjalan. Ini dilakukan untuk efisiensi yang lebih baik, karena jika Anda menjalankan tiga wadah berbeda pada sebuah host, semuanya dengan versi Windows Server yang sama sebagai tamu, Anda hanya memerlukan satu salinan direktori C: \ Windows pada waktu tertentu.

Pembagian ini masih memisahkan container dari aplikasi tertentu yang mungkin berjalan di host - tetapi juga mengurangi overhead dan membuat container lebih ringan. Anda memiliki lebih banyak ruang kepala per server yang menjalankan kontainer karena pembagian ini, dibandingkan dengan menjalankan mesin virtual tradisional, yang lebih terisolasi dan tidak berbagi apa pun - dan dengan demikian cenderung memiliki lebih banyak duplikasi. Anda juga biasanya akan menggunakan wadah Windows Server ketika host dan tamu Anda semua menjalankan sistem operasi yang sama untuk memanfaatkan pembagian ini; akibatnya, Anda tidak dapat menjalankan kontainer dengan Server Ubuntu yang dijalankan pada host Windows Server 2016. (Untuk jenis beban kerja tersebut, Anda akan menggunakan mesin virtual tradisional. Container tidak sesuai untuk ini. Anda hanya akan menggunakan VM, yang telah didukung di Windows sejak 2008.)

Untuk apa nilainya, saat ini dua sistem operasi gambar kontainer yang didukung oleh kontainer Windows Server adalah Server Core (Windows tanpa antarmuka pengguna grafisnya) dan Windows Nano Server, mikroserver yang direfraktor secara radikal yang cocok untuk peran kecil yang berorientasi pada layanan mikro. (Lebih lanjut tentang layanan mikro sebentar lagi.)

Jadi bagaimana Docker cocok dengan semua ini? Docker menyediakan "lapisan manajemen", jika Anda mau, dari API dan mesin untuk mengelola kontainer - yang dengan cepat menjadi standar industri, sangat mungkin karena Docker sendiri adalah sumber terbuka dan digunakan secara luas. Docker Hub, tersedia untuk digunakan oleh siapa saja di Internet, adalah repositori aplikasi bergaya pasar sejati yang semuanya berjalan dalam wadah bergaya Docker.

Docker juga menyediakan kerangka kerja mental yang dapat digunakan pengembang untuk mendekati operasi sebenarnya dari kode mereka dan untuk membangun seluruh wadah dari lingkungan yang diperlukan kode mereka untuk dijalankan. Pengembang pada dasarnya membuat gambar kontainer, yang kemudian dikirim ke operasi dengan cukup mudah, dan pada dasarnya berjalan sebagaimana mereka sebagai tamu di host tersebut. Pembaruan dan perbaikan kode dapat ditangani dengan cepat dan mudah dengan cara yang sama.

Masing-masing gambar container ini bahkan dapat berfungsi pada sebagian kecil dari keseluruhan aplikasi, yang mengkomponen solusi dan membuatnya lebih mudah untuk bekerja di lingkungan berorientasi layanan mikro. Dari perspektif gambaran besar, bekerja dengan penampung meningkatkan akuntabilitas bagi pengembang untuk menulis kode yang baik yang bekerja tepat di lingkungan mereka. Pengembang tidak dapat lagi menulis kode yang berfungsi sempurna pada mesin pengembangan mereka, tetapi gagal saat diterapkan pada perangkat lunak produksi - karena keduanya satu dan sama, kode harus berfungsi di kedua tempat. Hal ini juga mengurangi gesekan antara operasi dan TI - TI dengan lingkungan server aslinya dan pengembang yang mengharapkan konfigurasi tertentu tetapi seringkali tidak memiliki kemampuan atau alasan untuk mengubah lingkungan produksi agar sesuai dengan harapan mereka.

Wadah Windows Server bergaya Docker ini menyiratkan sejumlah kepercayaan - baik bahwa Anda telah mengunduh aplikasi tepercaya dari Docker Hub, atau bahwa pengembang internal atau pengembang kontrak Anda memberi Anda kode yang menjalankan wadah yang Anda percayai. Untuk aplikasi dalam wadah yang memiliki kode terpercaya di dalamnya, wadah Windows Server direkomendasikan dan sesuai. Berbagi dan proyeksi file sistem operasi seharusnya tidak menjadi masalah untuk kode tepercaya.

Namun, apa yang terjadi jika ada kebutuhan akan keamanan yang lebih, sedikit lebih banyak isolasi, dengan kode atau aplikasi yang kurang tepercaya?

Kontainer Hyper-V

Saat itulah Anda mulai melihat wadah Hyper-V, yang menggabungkan model isolasi dan abstraksi dari mesin virtual tradisional dengan fleksibilitas, gambar, dan format penyebaran yang mudah dari wadah Windows Server bergaya Docker, bersama dengan API Docker dan alat manajemen yang Saya bahas di bagian sebelumnya.

Mark Russinovich, CTO untuk Microsoft Azure, menjelaskannya seperti ini dalam entri blog tahun lalu: wadah Hyper-V "mengisolasi aplikasi dengan jaminan yang terkait dengan virtualisasi tradisional, tetapi dengan kemudahan, format gambar, dan model pengelolaan Wadah Server Windows, termasuk dukungan dari Mesin Docker. " Perbedaannya di sini adalah tingkat isolasi: Kontainer Hyper-V tidak langsung membagikan file sistem operasi, proses, dan layanan dengan host. Sebaliknya, Windows Server membungkus setiap gambar kontainer kecil dalam mesin virtual dengan overhead yang sangat rendah, yang mencapai batas abstraksi dan kepercayaan yang tidak dapat dicapai oleh kontainer Windows Server bergaya Docker.

Namun, mesin virtual ini, untuk semua maksud dan tujuan, transparan bagi administrator. Gambar kontainer itu sendiri yang menjalankan Windows Server memahami bahwa gambar tersebut sebenarnya adalah gambar kontainer dan tidak berjalan pada silikon biasa yang tidak dibatasi, dan dengan demikian dapat memanfaatkan pengoptimalan ke OS yang berasal dari kesadaran tersebut. Namun meskipun gambar kontainer tersebut lebih terisolasi, mereka tidak diterapkan secara berbeda dari kontainer Windows Server. Anda masih menggunakan API Docker. Anda masih menggunakan klien Docker. Anda cukup mencentang kotak lain, tetapi gambar container itu sendiri dibuat dan dikirim dengan cara yang sama terlepas dari model isolasi mana yang ingin Anda gunakan untuk menjalankannya.

Sisi negatif dari pendekatan ini: Ada lebih banyak biaya tambahan. Karena isolasi tambahan, lebih banyak kode dan proses diduplikasi. Ada juga fakta bahwa, meskipun pembungkus mesin virtual yang ringan untuk container Hyper-V berukuran kecil, ini memang menambah "pajak" untuk biaya menjalankan image container. Jadi sementara Anda dapat mengisi host yang kuat penuh dengan kontainer Windows Server bergaya Docker, kontainer Hyper-V akan dibatasi ke sejumlah kecil kontainer, semua yang lain sama-sama bijaksana perangkat keras.

Sekali lagi, gambar kontainer ini hanya akan mendukung Windows Server. Meskipun ada isolasi, masih ada kesamaan yang dibagikan antara gambar container dan sistem operasi host. Jadi jika gambar kontainer Anda menjalankan Linux, rasa lain dari Unix, BSD, atau sistem operasi alternatif lainnya, tidak satu pun dari fitur Windows Server 2016 yang baru ini akan menjadi masalah bagi Anda.

Intinya: Kode pihak ketiga, kode pasar, atau kode yang sebaliknya tidak dipercaya sepenuhnya oleh bagian mana pun dari organisasi Anda harus dijalankan dalam wadah Hyper-V. Ini juga merupakan pilihan terbaik untuk cloud publik multitenant dan lingkungan serupa lainnya. Anda tidak akan kehilangan apa pun kecuali kapasitas dan Anda mendapatkan manfaat keamanan karena menjadi lebih terisolasi.

Kontainer Docker

Sekarang untuk membuktikan bahwa branding selalu menjadi bagian tersulit dari teknologi apa pun, izinkan saya untuk memperkenalkan container Docker. Di atas, saya menyebutkan bahwa kontainer Windows Server adalah bagian dari proyek sumber terbuka Docker. Kontainer Docker berbeda dari kontainer Windows Server. Wadah Windows Server dapat menggunakan semua teknologi yang mendasari Docker, tetapi perangkat Docker yang ada untuk mengelola wadah Docker tidak berfungsi (setidaknya dalam rilis ini) dengan wadah Windows Server. Alat manajemen kontainer Windows Server juga tidak dapat - pada titik ini, sekumpulan perintah PowerShell - melakukan apa pun yang berharga dengan kontainer Docker itu sendiri.

Kontainer Docker adalah barang khusus mereka sendiri, dan sementara kontainer Windows Server bertindak seperti kontainer Docker dalam kemampuannya untuk berbagi tetapi mengisolasi - itulah sebabnya saya menyebutnya sebagai kontainer Windows Server bergaya Docker - mereka bukan kontainer Docker per se . Ini dapat berubah di masa mendatang, terutama dalam paket layanan atau rilis Windows Server berikutnya, tetapi untuk saat ini, ketiga jenis wadah ini, meskipun semuanya mungkin serupa, tetap merupakan konsep yang berbeda. Saat ini hanya dua yang didukung oleh Windows Server.

Dimana teknologinya saat ini

Saat ini, dukungan kontainer di Windows Server 2016 sedang dalam proses. Ada banyak bagian yang dipindahkan ke container: Menghapus dependensi pada host dan file sistem operasi, serta versi dan level patch tertentu; mencapai isolasi yang tepat dan memastikan tidak ada kode yang dapat melanggar batas keamanan dan kepercayaan itu; membuat kisah pengembang tepat dengan alat dan otomatisasi yang memungkinkan pengembang untuk bekerja dengan wadah dalam lingkungan pengembangan terintegrasi (IDE) pilihan mereka dan "mengekspor" aplikasi mereka langsung ke wadah; memastikan kontainer dapat naik dan turun ke cloud publik dengan mulus; dan lainnya.

Dalam semua kasus ini, masih ada kesalahan fatal dan bug yang harus diselesaikan. Jika kontainer sangat penting untuk peta jalan penawaran layanan Anda di toko Anda, maka Anda mungkin ingin mulai menguji kapabilitas kontainer Windows Server dan kontainer Hyper-V sekarang, dan terutama memeriksa perintah PowerShell yang tersedia untuk mengaktifkan kontainer dan mengelolanya. di host Windows Server 2016.

Namun, jika wadah adalah pilihan yang bagus tetapi tidak harus dimiliki untuk organisasi Anda, maka rekomendasi saya adalah menunda mencoba apa pun kecuali eksplorasi yang paling mendasar menggunakan Pratinjau Teknis 4 bit. Masih ada terlalu banyak kutil - termasuk kesalahan fatal dan bug yang disebutkan sebelumnya - untuk benar-benar memahami apa yang terjadi.

Dukungan kontainer akan menjadi tambahan yang menarik untuk platform Windows. Masih banyak cerita yang tersisa untuk ditulis dan diceritakan.

Kisah ini, "Kontainer di Windows Server 2016: Apa yang perlu Anda ketahui" awalnya diterbitkan oleh Computerworld.