Bagikan melalui


Mode Isolasi

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

Kontainer Windows menawarkan dua mode isolasi runtime yang berbeda: process dan isolasi Hyper-V. 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 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 yang paling dikenal. Ada banyak namespace di Windows yang diisolasi berdasarkan per kontainer:

  • sistem berkas
  • Registri
  • port jaringan
  • ruang ID proses dan utas
  • Namespace Manajer Objek

Menembus batas isolasi

Terdapat situasi di mana 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

Hyper-V isolasi

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 sebuah kontainer yang diisolasi dalam OS pada mesin virtual yang berjalan pada OS dalam mesin 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 parameter --isolation 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 parameter --isolation untuk mengatur --isolation=process.

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

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

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 Mesin 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 ditentukan.

Penjelasan isolasi

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

Di sini, kontainer terisolasi proses sedang disebarkan dan akan menghosting proses ping jangka panjang.

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

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

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Pada host kontainer, perintah get-process 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

Sebagai perbandingan, 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 tersebut pada host kontainer, proses ping tidak ditemukan dan terjadi kesalahan.

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, proses vmwp dapat terlihat, yang merupakan komputer virtual yang berjalan yang mengenkapsulasi 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