Mode Isolasi

Berlaku untuk: Windows Server 2022, Windows Server 2019, Windows Server 2016

Kontainer Windows menawarkan dua mode isolasi runtime yang berbeda: process dan Hyper-V isolasi. Kontainer yang berjalan di bawah kedua mode isolasi dibuat, dikelola, dan berfungsi secara identik. Mereka juga menghasilkan dan mengonsumsi gambar kontainer yang sama. Perbedaan antara mode isolasi adalah dengan tingkat isolasi apa yang dibuat antara kontainer, sistem operasi host, dan semua kontainer lain yang berjalan pada host tersebut.

Isolasi Proses

Ini adalah mode isolasi "tradisional" untuk kontainer dan itulah yang dijelaskan dalam gambaran umum kontainer Windows. Dengan isolasi proses, beberapa instans kontainer berjalan bersamaan pada host tertentu dengan isolasi yang disediakan melalui namespace, kontrol sumber daya, dan teknologi isolasi proses lainnya. Saat berjalan dalam mode ini, kontainer berbagi kernel yang sama dengan host serta satu sama lain. Ini kira-kira sama dengan cara kontainer Linux berjalan.

Diagram yang menunjukkan kontainer yang penuh dengan aplikasi yang diisolasi dari OS dan perangkat keras.

Apa yang akan terisolasi

Kontainer Windows memvirtualisasikan akses ke berbagai namespace sistem operasi. Namespace menyediakan akses ke informasi, objek, atau sumber daya melalui nama. Misalnya, sistem file mungkin merupakan namespace layanan yang paling terkenal. Ada banyak namespace layanan di Windows yang diisolasi berdasarkan per kontainer:

  • sistem file
  • registri
  • port jaringan
  • ruang ID proses dan utas
  • Namespace Object Manager

Menusuk batas isolasi

Ada beberapa kasus ketika berguna untuk menembus batas isolasi. Operasi ini harus sengaja diminta oleh pengguna dan harus dilakukan dengan pertimbangan yang cermat karena dapat membahayakan postur keamanan kontainer. Kontainer Windows mendukung hal berikut:

Kontainer Windows saat ini tidak mendukung:

  • memori bersama
  • berbagi objek sinkronisasi (semaphores, mutex, dll)
  • namespace proses bersama

Isolasi Hyper-V

Mode isolasi ini menawarkan keamanan yang ditingkatkan dan kompatibilitas yang lebih luas antara versi host dan kontainer. Dengan isolasi Hyper-V, beberapa instans kontainer berjalan bersamaan pada host; namun, setiap kontainer berjalan di dalam komputer virtual yang sangat dioptimalkan dan secara efektif mendapatkan kernelnya sendiri. Kehadiran komputer virtual menyediakan isolasi tingkat perangkat keras antara setiap kontainer serta host kontainer.

Diagram kontainer yang sedang diisolasi dalam OS pada komputer visual yang berjalan pada OS dalam komputer fisik.

Contoh isolasi

Membuat kontainer

Mengelola kontainer yang terisolasi Hyper-V dengan Docker hampir identik dengan mengelola kontainer yang terisolasi proses. Untuk membuat kontainer dengan isolasi Hyper-V menggunakan Docker, gunakan --isolation parameter untuk mengatur --isolation=hyperv.

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Untuk membuat kontainer dengan isolasi proses melalui Docker, gunakan --isolation parameter untuk mengatur --isolation=process.

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Kontainer Windows yang berjalan di Windows Server default untuk berjalan dengan isolasi proses. Kontainer Windows yang berjalan pada Windows 10 Pro dan Enterprise default untuk berjalan dengan isolasi Hyper-V. Dimulai dengan pembaruan Windows 10 Oktober 2018, pengguna yang menjalankan Windows 10 Pro atau host Enterprise dapat menjalankan kontainer Windows dengan isolasi proses. Pengguna harus langsung meminta isolasi proses dengan menggunakan --isolation=process bendera .

Peringatan

Berjalan dengan isolasi proses pada Windows 10 Pro dan Enterprise dimaksudkan untuk pengembangan/pengujian. Host Anda harus menjalankan Windows 10 build 17763+ dan Anda harus memiliki versi Docker dengan Engine 18.09 atau yang lebih baru.

Anda harus terus menggunakan Windows Server sebagai host untuk penyebaran produksi. Dengan menggunakan fitur ini pada Windows 10 Pro dan Enterprise, Anda juga harus memastikan bahwa tag versi host dan kontainer Anda cocok, jika tidak, kontainer mungkin gagal memulai atau menunjukkan perilaku yang tidak terdefinisi.

Penjelasan isolasi

Contoh ini menunjukkan perbedaan kemampuan isolasi antara proses dan isolasi Hyper-V.

Di sini, kontainer yang terisolasi proses sedang disebarkan dan akan menghosting proses ping yang berjalan lama.

docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

docker top Dengan menggunakan perintah , proses ping dikembalikan seperti yang terlihat di dalam kontainer. Proses dalam contoh ini memiliki ID 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Pada host kontainer, get-process perintah dapat digunakan untuk mengembalikan proses ping yang sedang berjalan dari host. Dalam contoh ini ada satu, dan id proses cocok dengan yang dari kontainer. Ini adalah proses yang sama yang terlihat dari kontainer dan host.

get-process -Name ping

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
     67       5      820       3836 ...71     0.03   3964   3 PING

Sebaliknya, contoh ini memulai kontainer terisolasi Hyper-V dengan proses ping juga.

docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Demikian juga, docker top dapat digunakan untuk mengembalikan proses yang sedang berjalan dari kontainer.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

Namun, saat mencari proses pada host kontainer, proses ping tidak ditemukan dan kesalahan dilemparkan.

get-process -Name ping

get-process : Cannot find a process with the name "ping". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -Name ping
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (ping:String) [Get-Process], ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Akhirnya, pada host, vmwp prosesnya terlihat, yang merupakan komputer virtual yang sedang berjalan yang merangkum kontainer yang sedang berjalan dan melindungi proses yang berjalan dari sistem operasi host.

get-process -Name vmwp

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
   1737      15    39452      19620 ...61     5.55   2376   0 vmwp