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.
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:
- memetakan file atau volume bersama dari host ke dalam kontainer
- memetakan pipa bernama dari host ke dalam kontainer
- memetakan port dari host ke dalam kontainer
- menyesuaikan dan berbagi namespace jaringan
- berbagi visibilitas perangkat host ke dalam kontainer
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.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk