Alat platform wadah pada Windows

Platform kontainer Windows sedang diperluas! Docker adalah bagian pertama dari perjalanan kontainer, sekarang kami sedang membangun alat platform kontainer lainnya.

  • containerd/cri - baru di Windows Server 2019/Windows 10 1809.
  • runhcs - padanan host kontainer Windows untuk runc.
  • hcs - Host Compute Service + shims praktis untuk membuatnya lebih mudah digunakan.
    • hcsshim
    • dotnet-computevirtualization

Artikel ini akan berbicara tentang platform kontainer Windows dan Linux serta setiap alat platform kontainer.

Platform kontainer Windows dan Linux

Di lingkungan Linux, alat manajemen kontainer seperti Docker dibangun di atas serangkaian alat kontainer yang lebih terperinci: runc dan containerd.

arsitektur Docker di Linux

runc adalah alat baris perintah Linux untuk membuat dan menjalankan kontainer sesuai dengan spesifikasi runtime kontainer OCI.

containerd adalah daemon yang mengelola siklus hidup kontainer dari mengunduh dan membuka kemasan gambar kontainer ke eksekusi dan pengawasan kontainer.

Di Windows, kami mengambil pendekatan yang berbeda. Ketika kami mulai bekerja dengan Docker untuk mendukung kontainer Windows, kami membangun langsung pada HCS (Host Compute Service). Posting blog ini penuh dengan informasi tentang mengapa kami membangun HCS dan mengapa kami mengambil pendekatan ini ke kontainer pada awalnya.

Arsitektur Awal Mesin Docker di Windows

Pada titik ini, Docker masih memanggil langsung ke HCS. Namun, ke depannya, alat manajemen kontainer yang diperluas untuk menyertakan kontainer Windows dan host kontainer Windows dapat memanggil containerd dan runhcs seperti mereka memanggil containerd dan runc di Linux.

runhcs

runhcs adalah fork runc. Seperti runc, runhcs adalah klien baris perintah untuk menjalankan aplikasi yang dikemas sesuai dengan format Open Container Initiative (OCI) dan merupakan implementasi yang sesuai dari spesifikasi Open Container Initiative.

Perbedaan fungsional antara runc dan runhc meliputi:

  • runhcs berjalan pada Windows. Ini berkomunikasi dengan HCS untuk membuat dan mengelola kontainer.

  • runhcs dapat menjalankan berbagai jenis kontainer yang berbeda.

    • Windows dan Linux Hyper-V isolasi
    • Kontainer proses Windows (gambar kontainer harus cocok dengan host kontainer)

Penggunaan :

runhcs run [ -b bundle ] <container-id>

<container-id> adalah nama yang Anda berikan untuk instans kontainer yang Anda mulai. Nama harus unik pada host kontainer Anda.

Direktori bundel (menggunakan -b bundle) bersifat opsional. Seperti halnya runc, kontainer dikonfigurasi menggunakan bundel. Bundel kontainer adalah direktori dengan file spesifikasi OCI kontainer, "config.json". Nilai default untuk "bundel" adalah direktori saat ini.

File spesifikasi OCI, "config.json", harus memiliki dua bidang untuk berjalan dengan benar:

  • Jalur ke ruang sementara kontainer
  • Jalur ke direktori lapisan kontainer

Perintah kontainer yang tersedia dalam runhc meliputi:

  • Alat untuk membuat dan menjalankan kontainer

    • menjalankan membuat dan menjalankan kontainer
    • membuat membuat kontainer
  • Alat untuk mengelola proses yang berjalan dalam kontainer:

    • memulai menjalankan proses yang ditentukan pengguna dalam kontainer yang dibuat
    • exec menjalankan proses baru di dalam kontainer
    • menjeda menangguhkan semua proses di dalam kontainer
    • melanjutkan melanjutkan semua proses yang sebelumnya telah dijeda
    • ps ps menampilkan proses yang berjalan di dalam kontainer
  • Alat untuk mengelola status kontainer

    • keadaan memperlihatkan keadaan kontainer
    • mematikan mengirim sinyal yang ditentukan (default: SIGTERM) ke proses init kontainer
    • menghapus menghapus semua sumber daya yang dimiliki oleh kontainer, sering digunakan bersama kontainer terpisah.

Satu-satunya perintah yang dapat dianggap multi-kontainer adalah daftar . Ini mencantumkan kontainer yang berjalan atau dijeda yang dimulai oleh runhcs dengan root yang ditentukan.

HCS

Kami memiliki dua pembungkus yang tersedia di GitHub untuk berinteraksi dengan HCS. Karena HCS adalah C API, pembungkus memudahkan untuk memanggil HCS dari bahasa tingkat yang lebih tinggi.

  • hcsshim - HCSShim ditulis dalam Go dan itu adalah dasar untuk runhc. Dapatkan yang terbaru dari AppVeyor atau buat sendiri.
  • dotnet-computevirtualization - dotnet-computevirtualization adalah pembungkus C# untuk HCS.

Jika Anda ingin menggunakan HCS (baik secara langsung atau melalui pembungkus), atau Anda ingin membuat pembungkus Rust/Haskell/InsertYourLanguage di sekitar HCS, silakan tinggalkan komentar.

Untuk melihat lebih dalam tentang HCS, tonton presentasi DockerCon dari John Stark.

containerd/cri

Penting

Dukungan CRI hanya tersedia di Windows Server 2019/Windows 10 1809 dan yang lebih baru.

Sementara spesifikasi OCI mendefinisikan satu kontainer, CRI (antarmuka runtime kontainer) menggambarkan kontainer sebagai beban kerja di lingkungan kotak pasir bersama yang disebut pod. Pod dapat berisi satu atau beberapa beban kerja kontainer. Pod memungkinkan orkestrator kontainer seperti Kubernetes dan Service Fabric Mesh menangani beban kerja yang dikelompokkan yang harus berada di host yang sama dengan beberapa sumber daya bersama seperti memori dan vNET.

Meskipun runHCS dan containerd keduanya dapat digunakan pada sistem Windows Server 2016 atau yang lebih baru, mendukung Pods (kelompok kontainer) memerlukan perubahan besar pada alat kontainer di Windows. Dukungan CRI tersedia di Windows Server 2019/Windows 10 1809 dan yang lebih baru.