คอนเทนเนอร์เซิร์ฟเวอร์ Windows มาจัดการกับคอนเทนเนอร์กันดีกว่า คอนเทนเนอร์บน Windows

จบแล้ว! การสวดมนต์ช่วยหรือการเสียสละ แต่ตอนนี้คุณสามารถเรียกใช้คอนเทนเนอร์ Docker โดยมี Windows อยู่ข้างในได้ ข่าวดีมาพร้อมกับการเปิดตัว Windows Server 2016 และเราไม่ได้พูดถึงเครื่องเสมือนที่ซ่อนอยู่อย่างชาญฉลาดหรือการจำลอง Windows บนเคอร์เนล Linux - Windows จริงทำงานใน Docker จริง โดยมี Dockerfile ที่ทำงานอยู่ Docker-compose และ Docker อื่นๆ สิ่งของ .

ข้อจำกัด

แต่ไม่ได้หมายความว่าตอนนี้คุณสามารถเรียกใช้คอนเทนเนอร์ได้ทุกที่ เนื่องจากคอนเทนเนอร์ Docker “ยืม” เคอร์เนลระบบปฏิบัติการจากโฮสต์ (ไม่เช่นนั้นคอนเทนเนอร์จะต้องมีระบบปฏิบัติการของตัวเองและเปลี่ยนเป็นเครื่องเสมือน) คอนเทนเนอร์ Windows จึงสามารถทำงานบน Windows 10 Pro Anniversary Update ล่าสุดเท่านั้น และ วินโดวส์เซิร์ฟเวอร์ 2016

ประเด็นที่สองคือยังคงเป็นไปไม่ได้ที่จะเรียกใช้คอนเทนเนอร์ Linux ดั้งเดิมบน Windows Anniversary Update มีระบบย่อย Linux ของตัวเอง (ซึ่งคุณสามารถเรียกใช้ Bash จริงได้) แต่ไม่สามารถรองรับเคอร์เนล Linux ที่มีคุณสมบัติครบถ้วน ดังนั้นคอนเทนเนอร์เดียวกันกับ Ubuntu บน Windows ยังคงต้องการเครื่องเสมือนที่ซ่อนอยู่

สุดท้ายนี้ คุณสามารถเรียกใช้คอนเทนเนอร์ทั้งสองบนเครื่อง Windows ในเวลาเดียวกันได้ แต่จะมีปัญหาบางประการ หากคุณเรียกใช้คำสั่งนี้บน Windows Server 2016 โดยติดตั้ง Docker (ปีที่แล้วฉันจะเรียกว่าคาถานี้) มันจะทำงาน:

แต่หากหลังจากคำสั่งนี้คุณพยายามเปิดคอนเทนเนอร์ของ Ubuntu นักเทียบท่าจะเสียใจ:

ปัญหาคือคอนเทนเนอร์ Windows และ Linux ให้บริการโดย Docker daemons ที่แตกต่างกัน ซึ่งอย่างไรก็ตาม ใช้ช่องทางเดียวกันในการสื่อสารกับบรรทัดคำสั่ง กล่าวคือ ในเวลาใดก็ตาม มีเพียงปีศาจตัวเดียวเท่านั้นที่สามารถเคลื่อนไหวได้ มี "Docker for Windows" รุ่นเบต้าบนเว็บไซต์ Docker อย่างเป็นทางการที่พยายามจัดการกับปัญหา (เฉพาะใน Windows 10 Pro และ Enterprise ในตอนนี้) แต่ถึงแม้จะเปลี่ยนจากคอนเทนเนอร์ Windows เป็น Linux คุณต้องไปที่เมนูการตั้งค่าหรือสื่อสารกับบรรทัดคำสั่ง:

พาวเวอร์เชลล์

& "C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchDaemon

& "C:\Program Files\Docker\Docker\DockerCli.exe"-สวิตช์เดมอน

รูปภาพของวินโดวส์

จนถึงขณะนี้ มีเพียงสองอิมเมจพื้นฐานที่มี Windows แบบคอนเทนเนอร์:

คุณไม่สามารถสร้างภาพพื้นฐานของคุณเองได้ (ภาพรอยขีดข่วน)

อิมเมจ Windows Server Core มีน้ำหนักมากถึง 10 กิ๊ก และโดยทั่วไปจะทำงานเหมือนกับ Windows Server 2016 ที่มีคุณสมบัติครบถ้วน ตัวอย่างเช่น MS SQL และ .NET Framework ที่มีคุณสมบัติครบถ้วนได้รับการติดตั้งที่นั่นโดยไม่มีปัญหา หากแอปพลิเคชันของคุณไม่ได้ขึ้นอยู่กับ UI มากนัก แอปพลิเคชันนั้นจะถูกติดตั้ง

Nano Server น่าสนใจกว่านี้อีกหน่อย เป็น Windows Server ที่ได้รับการปรับให้เหมาะสมที่สุดและถูกแยกส่วนซึ่งมีน้ำหนักน้อยกว่ากิ๊ก แต่ก็มีข้อจำกัดเพียงพอเช่นกัน: ไม่มีแอปพลิเคชัน 32 บิต, UI, RDP, PowerShell ที่สับ ฯลฯ แต่นี่ไม่ได้ป้องกันคุณจากการติดตั้ง IIS, .NET Core และแม้แต่ MySQL บางตัวบน Nano Server

และใครจะจินตนาการได้เมื่อสองสามปีก่อนว่าใน Dockerfile คุณจะพบ "Microsoft", "Windows" และ "PowerShell" ได้ในคราวเดียว

จาก microsoft / windowsservercore RUN powershell -Command....

จาก microsoft/windowsservercore

เรียกใช้ PowerShell - คำสั่ง . - - -

มันคือ Windows ใน Docker! มันยังคงฟังดูไร้สาระ

องศาของฉนวน

คอนเทนเนอร์ Windows สามารถทำงานได้ในสองโหมดแยก:

  • คอนเทนเนอร์เซิร์ฟเวอร์ Windows
  • คอนเทนเนอร์ไฮเปอร์-วี

ในโหมด Windows แรก คอนเทนเนอร์จะทำงานเหมือนกับคอนเทนเนอร์อื่นๆ ทั้งหมดใน Docker: คอนเทนเนอร์จะใช้เคอร์เนลร่วมกับระบบปฏิบัติการ กระบวนการของคอนเทนเนอร์จะถูกแยกออกแต่ยังคงมองเห็นได้ในแผนผังกระบวนการของโฮสต์ ฯลฯ นี่เป็นวิธีเริ่มต้นและเร็วที่สุดในการ เริ่มคอนเทนเนอร์บน Windows

ในกรณีที่สอง คอนเทนเนอร์จะตกอยู่ในเครื่องเสมือน Hyper-V พิเศษ แน่นอนว่าสิ่งนี้ส่งผลเสียต่อความเร็วในการเริ่มต้น แต่การแยกส่วนเสร็จสมบูรณ์

บทสรุป

Windows บน Docker ถือเป็นข่าวดี แม้ว่าคุณจะไม่เร่งรีบที่จะบรรจุผลิตภัณฑ์ของคุณในคอนเทนเนอร์ แต่นี่ก็เป็นเครื่องมือที่ยอดเยี่ยมสำหรับแยกการทดสอบหน่วย เครื่องจักรที่ใช้งานจริง เซิร์ฟเวอร์สาธิต และแซนด์บ็อกซ์ ทุกสิ่งที่คุณต้องสร้างก่อนหน้านี้เพื่อสร้างเครื่องเสมือน หาก Microsoft ยังคงเปิดตัว nanoserver บน Linux ได้ ฉันจะให้อภัยพวกเขาสำหรับการหยุดให้บริการ Microsoft Band 2 ล่าสุด ซึ่งฉันซื้อมาโดยไม่ฉลาดเมื่อสองเดือนก่อน

จะจัดแพคเกจแอปพลิเคชันในคอนเทนเนอร์ Docker ได้อย่างไร

ฉันมีแอปพลิเคชันที่เขียนด้วย NodeJS ฉันจะรวมมันลงในอิมเมจ Docker เพื่อทำงานเป็นคอนเทนเนอร์ได้อย่างไร

Docker คือระบบการจัดการคอนเทนเนอร์สำหรับระบบปฏิบัติการที่รองรับ POSIX (ปัจจุบันรองรับโดย Linux) คุณสมบัติพิเศษของ Docker คือความสามารถในการจัดทำแพ็คเกจแอปพลิเคชันด้วยสภาพแวดล้อมที่จำเป็นทั้งหมดในลักษณะที่สามารถทำงานบนระบบอื่นได้โดยไม่ต้องมีขั้นตอนที่ยาวและซับซ้อนในการติดตั้งการพึ่งพาหรือการสร้างจากแหล่งที่มา แอปพลิเคชันแบบแพ็กเกจที่พร้อมสำหรับการใช้งานเรียกว่า "อิมเมจ" อิมเมจนักเทียบท่าจะขึ้นอยู่กับ "เทมเพลต" - สภาพแวดล้อมการทำงานที่กำหนดค่าไว้ล่วงหน้า คุณสามารถมองสิ่งเหล่านี้ว่าเป็นการกระจายระบบปฏิบัติการ แม้ว่าสิ่งนี้จะไม่เป็นความจริงทั้งหมดก็ตาม คุณยังสามารถสร้างเทมเพลตของคุณเองได้โดยดูเอกสารประกอบของ Docker ข้อดีของแนวทางนี้คือ รูปภาพของแอปพลิเคชันของคุณจะมีเฉพาะแอปพลิเคชันนั้นเอง และสภาพแวดล้อมที่จำเป็นสำหรับแอปพลิเคชันจะถูกดาวน์โหลดโดยอัตโนมัติจากที่เก็บเทมเพลต นักเทียบท่านั้นชวนให้นึกถึงคุก chroot หรือ bsd เล็กน้อย แต่ทำงานแตกต่างออกไป

สิ่งสำคัญคือต้องแยกแยะระหว่างแนวคิดของ "คอนเทนเนอร์" และ "รูปภาพ" คอนเทนเนอร์คือสำเนาแอปพลิเคชันของคุณที่ทำงานอยู่ และรูปภาพคือไฟล์ที่ใช้จัดเก็บแอปพลิเคชัน และสร้างคอนเทนเนอร์จากที่ใด

สมมติว่าคุณมีแอปพลิเคชัน NodeJS ที่คุณต้องการจัดเก็บ สมมติว่าไฟล์ที่เรียกใช้แอปพลิเคชันของคุณเรียกว่า server.js และแอปพลิเคชันรับฟังบนพอร์ต 8000 เพื่อให้ทำงานได้ เราจะใช้ "node: carbon" เป็นเทมเพลต ในการบรรจุแอปพลิเคชันของคุณ คุณจะต้องสร้างไฟล์ “Dockerfile” ในไดเร็กทอรีที่มีไฟล์แอปพลิเคชันของคุณอยู่ ซึ่งจะอธิบายพารามิเตอร์การเตรียมรูปภาพ:

$ แตะ Dockerfile

เนื้อหาของไฟล์อาจเป็นดังนี้:

# ระบุเทมเพลตที่จะใช้จากโหนด:คาร์บอน # สร้างไดเร็กทอรีการทำงานของแอปพลิเคชันภายในคอนเทนเนอร์ WORKDIR /usr/src/app # ติดตั้งการพึ่งพาแอปพลิเคชันโดยใช้ npm # ทั้งไฟล์ package.json และ package-lock.json จะถูกคัดลอก หากมี COPY package*.json ./ RUN npm install # คัดลอกไฟล์แอปพลิเคชันของคุณไปยังรูปภาพ COPY - # เปิดพอร์ต 8000 เพื่อให้สามารถเข้าถึงได้จากภายนอกคอนเทนเนอร์ EXPOSE 8000 # ดำเนินการคำสั่งเพื่อเรียกใช้แอปพลิเคชันภายในคอนเทนเนอร์ CMD [ "npm", "start" ]

หากต้องการยกเว้นไฟล์ที่ไม่จำเป็นออกจากรูปภาพ คุณสามารถระบุชื่อไฟล์เหล่านั้นในไฟล์ ".dockerignore" ได้ คุณสามารถใช้มาสก์ได้ (*.log)

รูปภาพถูกสร้างขึ้นด้วยคำสั่งต่อไปนี้:

$ docker build -t ชื่อผู้ใช้/node-web-app

$ docker image # ตัวอย่างรหัสแท็กที่เก็บที่สร้างแล้ว node carbon 1934b0b038d1 5 วันที่แล้ว ชื่อผู้ใช้/node-web-app ล่าสุด d64d3505b0d2 1 นาทีที่แล้ว

คอนเทนเนอร์ถูกเปิดใช้งานจากอิมเมจโดยใช้คำสั่งต่อไปนี้:

$ docker run -p 49160:8000 -d ชื่อผู้ใช้/node-web-app

ตัวอย่างนี้สร้างคอนเทนเนอร์จากอิมเมจ "ชื่อผู้ใช้/node-web-app" และรันทันที พอร์ตแอปพลิเคชัน 8000 มีอยู่ในเครื่องท้องถิ่น (localhost) และเพื่อให้สามารถเข้าถึงได้ "ภายนอก" จึง "ส่งต่อ" ไปยังพอร์ต 49160 คุณสามารถเลือกพอร์ตว่างใดก็ได้นอกจากนี้คุณยังสามารถส่งต่อแอปพลิเคชันได้ พอร์ต “ตามสภาพ” โดยระบุตัวเลือก " -p 8000:8000"

คุณจะเห็นว่าคอนเทนเนอร์ของคุณกำลังทำงานอยู่โดยการป้อนคำสั่ง:

$ นักเทียบท่า ps # ตัวอย่าง ID คำสั่งรูปภาพ ... PORTS ecce33b30ebf ชื่อผู้ใช้ / node-web-app: ล่าสุด npm start ... 49160-> 8000

คอนเทนเนอร์สามารถจัดการได้โดยใช้คำสั่งต่างๆ โดยระบุ ID ของคอนเทนเนอร์นี้:

$ นักเทียบท่าหยุดชั่วคราว ecce33b30ebf - หยุดคอนเทนเนอร์ชั่วคราวด้วย ID ecce33b30ebf
$ docker resume ecce33b30ebf - ดำเนินการต่อคอนเทนเนอร์ด้วย ID ecce33b30ebf
$ นักเทียบท่าหยุด ecce33b30ebf - หยุดคอนเทนเนอร์ด้วย ID ecce33b30ebf
$ docker rm ecce33b30ebf - ลบคอนเทนเนอร์ (ซึ่งจะลบข้อมูลทั้งหมดที่สร้างโดยแอปพลิเคชันภายในคอนเทนเนอร์)

ระบบ *nix เริ่มใช้งานมัลติทาสกิ้งและเสนอเครื่องมือที่ช่วยให้คุณสามารถแยกและควบคุมกระบวนการได้ เทคโนโลยีต่างๆ เช่น chroot() ซึ่งจัดให้มีการแยกในระดับระบบไฟล์ FreeBSD Jail ซึ่งจำกัดการเข้าถึงโครงสร้างเคอร์เนล LXC และ OpenVZ เป็นที่รู้จักและใช้กันอย่างแพร่หลายมายาวนาน แต่แรงผลักดันในการพัฒนาเทคโนโลยีคือ Docker ซึ่งทำให้สามารถแจกจ่ายแอปพลิเคชันได้อย่างสะดวก ตอนนี้สิ่งเดียวกันได้มาถึง Windows แล้ว

คอนเทนเนอร์บน Windows

เซิร์ฟเวอร์สมัยใหม่มีความจุส่วนเกิน และบางครั้งแอปพลิเคชันก็ไม่ได้ใช้บางส่วนด้วยซ้ำ ส่งผลให้ระบบ "ไม่ได้ใช้งาน" เป็นระยะเวลาหนึ่ง ทำให้อากาศร้อนขึ้น วิธีแก้ปัญหาคือการจำลองเสมือนซึ่งช่วยให้คุณสามารถรันระบบปฏิบัติการหลายระบบบนเซิร์ฟเวอร์เดียว รับประกันว่าจะแยกระบบปฏิบัติการออกจากกันและจัดสรรทรัพยากรตามจำนวนที่ต้องการให้กับแต่ละระบบ แต่ความก้าวหน้าไม่หยุดนิ่ง ขั้นต่อไปคือไมโครเซอร์วิส เมื่อแต่ละส่วนของแอปพลิเคชันถูกใช้งานแยกกัน เนื่องจากเป็นส่วนประกอบแบบพอเพียงที่สามารถปรับขนาดให้เข้ากับโหลดที่ต้องการและอัปเดตได้อย่างง่ายดาย การแยกส่วนจะป้องกันไม่ให้แอปพลิเคชันอื่นรบกวนไมโครเซอร์วิส ด้วยการถือกำเนิดของโปรเจ็กต์ Docker ซึ่งทำให้กระบวนการบรรจุและส่งมอบแอปพลิเคชันง่ายขึ้นพร้อมกับสภาพแวดล้อม สถาปัตยกรรมไมโครเซอร์วิสได้รับแรงผลักดันเพิ่มเติมในการพัฒนา

คอนเทนเนอร์เป็นการจำลองเสมือนอีกประเภทหนึ่งที่ให้สภาพแวดล้อมแยกต่างหากสำหรับการรันแอปพลิเคชันที่เรียกว่า OS Virtualization คอนเทนเนอร์ถูกใช้งานผ่านการใช้เนมสเปซที่แยกออกมา ซึ่งรวมถึงทรัพยากรทั้งหมดที่จำเป็นสำหรับการดำเนินการ (ชื่อเสมือนจริง) ซึ่งคุณสามารถโต้ตอบได้ (ไฟล์ พอร์ตเครือข่าย กระบวนการ ฯลฯ) และคุณไม่สามารถออกไปได้ นั่นคือระบบปฏิบัติการจะแสดงเฉพาะคอนเทนเนอร์ที่ได้รับการจัดสรรเท่านั้น แอปพลิเคชันภายในคอนเทนเนอร์เชื่อว่าเป็นแอปพลิเคชันเดียวและทำงานในระบบปฏิบัติการเต็มรูปแบบโดยไม่มีข้อจำกัดใดๆ หากจำเป็นต้องเปลี่ยนไฟล์ที่มีอยู่หรือสร้างไฟล์ใหม่ คอนเทนเนอร์จะได้รับสำเนาจากระบบปฏิบัติการโฮสต์หลัก โดยบันทึกเฉพาะส่วนที่เปลี่ยนแปลงเท่านั้น ดังนั้นการใช้งานหลายคอนเทนเนอร์บนโฮสต์เดียวจึงมีประสิทธิภาพมาก

ความแตกต่างระหว่างคอนเทนเนอร์และเครื่องเสมือนคือคอนเทนเนอร์ไม่โหลดสำเนาของระบบปฏิบัติการ ไลบรารี ไฟล์ระบบ ฯลฯ ของตัวเอง ระบบปฏิบัติการเหมือนกับที่แชร์กับคอนเทนเนอร์ สิ่งเดียวที่ต้องการเพิ่มเติมคือทรัพยากรที่จำเป็นในการรันแอปพลิเคชันในคอนเทนเนอร์ เป็นผลให้คอนเทนเนอร์เริ่มต้นในเวลาไม่กี่วินาทีและโหลดระบบน้อยกว่าเมื่อใช้เครื่องเสมือน ปัจจุบัน Docker มีแอปพลิเคชัน 180,000 แอปพลิเคชันในพื้นที่เก็บข้อมูล และรูปแบบนี้รวมเป็นหนึ่งเดียวโดย Open Container Initiative (OCI) แต่การพึ่งพาเคอร์เนลหมายความว่าคอนเทนเนอร์จะไม่ทำงานบนระบบปฏิบัติการอื่น คอนเทนเนอร์ Linux ต้องใช้ Linux API ดังนั้น Windows จะไม่ทำงานบน Linux

จนกระทั่งเมื่อไม่นานมานี้ นักพัฒนา Windows ได้นำเสนอเทคโนโลยีการจำลองเสมือนสองแบบ: เครื่องเสมือนและแอปพลิเคชันเสมือน Server App-V แต่ละคนมีช่องทางการใช้งานข้อดีและข้อเสียของตัวเอง ขณะนี้ช่วงกว้างขึ้น - มีการประกาศคอนเทนเนอร์ใน Windows Server 2016 (Windows Server Containers) และถึงแม้ว่าในช่วงเวลาของ TP4 การพัฒนาจะยังไม่เสร็จสมบูรณ์ แต่ก็ค่อนข้างเป็นไปได้ที่จะได้เห็นเทคโนโลยีใหม่นี้ใช้งานจริงและได้ข้อสรุป ควรสังเกตว่าการติดตามและมีเทคโนโลยีสำเร็จรูปอยู่ในมือนักพัฒนา MS ได้ดำเนินการเพิ่มเติมเล็กน้อยในบางประเด็นเพื่อให้การใช้คอนเทนเนอร์กลายเป็นเรื่องง่ายและเป็นสากลมากขึ้น ข้อแตกต่างที่สำคัญคือมีคอนเทนเนอร์ให้เลือกสองประเภท: คอนเทนเนอร์ Windows และคอนเทนเนอร์ Hyper-V ใน TP3 มีเพียงอันแรกเท่านั้นที่มีให้ใช้งาน

คอนเทนเนอร์ Windows ใช้หนึ่งเคอร์เนลกับระบบปฏิบัติการซึ่งแชร์กันแบบไดนามิก กระบวนการแจกจ่าย (CPU, RAM, เครือข่าย) จะถูกยึดครองโดยระบบปฏิบัติการ หากจำเป็น คุณสามารถจำกัดทรัพยากรที่มีอยู่สูงสุดที่จัดสรรให้กับคอนเทนเนอร์ได้ ไฟล์ OS และบริการที่ทำงานอยู่จะถูกแมปกับเนมสเปซของแต่ละคอนเทนเนอร์ คอนเทนเนอร์ประเภทนี้ใช้ทรัพยากรอย่างมีประสิทธิภาพ ลดค่าใช้จ่าย และช่วยให้วางแอปพลิเคชันได้หนาแน่นมากขึ้น โหมดนี้ค่อนข้างชวนให้นึกถึง FreeBSD Jail หรือ Linux OpenVZ

คอนเทนเนอร์ Hyper-V ให้ระดับการแยกเพิ่มเติมโดยใช้ Hyper-V แต่ละคอนเทนเนอร์ได้รับการจัดสรรเคอร์เนลและหน่วยความจำของตัวเอง การแยกไม่ได้ดำเนินการโดยเคอร์เนลระบบปฏิบัติการ แต่โดยไฮเปอร์ไวเซอร์ Hyper-V ผลลัพธ์ที่ได้คือการแยกระดับเดียวกันกับเครื่องเสมือน โดยมีค่าใช้จ่ายน้อยกว่า VM แต่มีค่าใช้จ่ายมากกว่าคอนเทนเนอร์ของ Windows หากต้องการใช้คอนเทนเนอร์ประเภทนี้ คุณต้องติดตั้งบทบาท Hyper-V บนโฮสต์ คอนเทนเนอร์ Windows เหมาะสำหรับใช้ในสภาพแวดล้อมที่เชื่อถือได้มากกว่า เช่น เมื่อเรียกใช้แอปพลิเคชันจากองค์กรเดียวกันบนเซิร์ฟเวอร์ เมื่อบริษัทหลายแห่งแชร์เซิร์ฟเวอร์และจำเป็นต้องจัดให้มีการแยกระดับที่มากขึ้น คอนเทนเนอร์ Hyper-V ก็มีแนวโน้มที่จะเหมาะสมกว่า

คุณสมบัติที่สำคัญของคอนเทนเนอร์ใน Win 2016 คือประเภทนั้นไม่ได้ถูกเลือก ณ เวลาที่สร้าง แต่ ณ เวลาที่ปรับใช้ นั่นคือคอนเทนเนอร์ใด ๆ ที่สามารถเปิดใช้งานได้ทั้งในรูปแบบ Windows และ Hyper-V

ใน Win 2016 เลเยอร์นามธรรมสแต็กการจัดการคอนเทนเนอร์ซึ่งใช้ฟังก์ชันที่จำเป็นทั้งหมดจะรับผิดชอบคอนเทนเนอร์ รูปแบบภาพฮาร์ดดิสก์ VHDX ใช้สำหรับการจัดเก็บ คอนเทนเนอร์ เช่นเดียวกับในกรณีของ Docker จะถูกบันทึกลงในอิมเมจในพื้นที่เก็บข้อมูล ยิ่งไปกว่านั้น แต่ละชุดไม่ได้บันทึกชุดข้อมูลที่สมบูรณ์ แต่จะมีเพียงความแตกต่างระหว่างรูปภาพที่สร้างขึ้นและรูปภาพพื้นฐานเท่านั้น และ ณ เวลาที่เปิดตัว ข้อมูลที่จำเป็นทั้งหมดจะถูกฉายลงในหน่วยความจำ Virtual Switch ใช้เพื่อจัดการการรับส่งข้อมูลเครือข่ายระหว่างคอนเทนเนอร์และเครือข่ายกายภาพ

Server Core หรือ Nano Server สามารถใช้เป็น OS ในคอนเทนเนอร์ได้ โดยทั่วไปประการแรกไม่ใช่เรื่องใหม่มาเป็นเวลานานและให้ความเข้ากันได้ในระดับสูงกับแอปพลิเคชันที่มีอยู่ เวอร์ชันที่สองเป็นเวอร์ชันที่แยกส่วนมากขึ้นสำหรับการทำงานโดยไม่มีจอภาพ ช่วยให้คุณสามารถรันเซิร์ฟเวอร์ในการกำหนดค่าขั้นต่ำที่เป็นไปได้สำหรับใช้กับ Hyper-V, ไฟล์เซิร์ฟเวอร์ (SOFS) และบริการคลาวด์ แน่นอนว่าไม่มีอินเทอร์เฟซแบบกราฟิก ประกอบด้วยส่วนประกอบที่จำเป็นที่สุดเท่านั้น (.NET พร้อม CoreCLR, Hyper-V, Clustering และอื่นๆ) แต่สุดท้ายก็ใช้พื้นที่น้อยลงถึง 93% และต้องการการแก้ไขที่สำคัญน้อยลง

อีกจุดที่น่าสนใจ ในการจัดการคอนเทนเนอร์ นอกเหนือจาก PowerShell แบบเดิมแล้ว คุณยังสามารถใช้ Docker ได้อีกด้วย และเพื่อให้ความสามารถในการเรียกใช้ยูทิลิตี้ที่ไม่ใช่เจ้าของภาษาบน Win นั้น MS ได้ร่วมมือกันเพื่อขยาย Docker API และชุดเครื่องมือ การพัฒนาทั้งหมดเปิดอยู่และพร้อมใช้งานบน GitHub อย่างเป็นทางการของโปรเจ็กต์ Docker คำสั่งการจัดการนักเทียบท่าใช้ได้กับคอนเทนเนอร์ทั้งหมด ทั้ง Win และ Linux แม้ว่าแน่นอนว่าเป็นไปไม่ได้ที่จะเรียกใช้คอนเทนเนอร์ที่สร้างบน Linux บน Windows (และในทางกลับกัน) ปัจจุบัน PowerShell มีฟังก์ชันการทำงานที่จำกัด และอนุญาตให้คุณทำงานกับพื้นที่เก็บข้อมูลในเครื่องเท่านั้น

คอนเทนเนอร์การติดตั้ง

Azure มีอิมเมจ Windows Server 2016 Core พร้อมด้วย Containers Tech Preview 4 ที่จำเป็น ซึ่งคุณสามารถปรับใช้และใช้เพื่อสำรวจคอนเทนเนอร์ได้ มิฉะนั้นคุณจะต้องกำหนดค่าทุกอย่างด้วยตัวเอง สำหรับการติดตั้งในเครื่อง คุณต้องใช้ Win 2016 และเนื่องจาก Hyper-V ใน Win 2016 รองรับการจำลองเสมือนแบบซ้อน จึงอาจเป็นได้ทั้งเซิร์ฟเวอร์จริงหรือเสมือน กระบวนการติดตั้งส่วนประกอบนั้นเป็นมาตรฐาน เลือกรายการที่เหมาะสมในตัวช่วยสร้างเพิ่มบทบาทและคุณสมบัติ หรือใช้ PowerShell ออกคำสั่ง

PS> ติดตั้ง-WindowsFeature คอนเทนเนอร์

ในระหว่างกระบวนการนี้ ตัวควบคุมเครือข่าย Virtual Switch จะถูกติดตั้งด้วย โดยจะต้องกำหนดค่าทันที ไม่เช่นนั้นการดำเนินการเพิ่มเติมจะทำให้เกิดข้อผิดพลาด ลองดูชื่อของอะแดปเตอร์เครือข่าย:

PS> รับ-NetAdapter

ในการทำงาน เราจำเป็นต้องมีคอนโทรลเลอร์ประเภทภายนอก New-VMSwitch cmdlet มีพารามิเตอร์มากมาย แต่เพื่อตัวอย่างนี้ เราจะจัดการกับการตั้งค่าขั้นต่ำ:

PS> ใหม่-VMSwitch - ชื่อภายนอก -NetAdapterName Ethernet0

เราตรวจสอบ:

PS> รับ-VMSwitch | โดยที่ ($_.SwitchType –eq "ภายนอก")

ไฟร์วอลล์ Windows จะบล็อกการเชื่อมต่อกับคอนเทนเนอร์ ดังนั้นจึงจำเป็นต้องสร้างกฎการอนุญาต อย่างน้อยเพื่อให้สามารถเชื่อมต่อระยะไกลได้โดยใช้ PowerShell ระยะไกล สำหรับสิ่งนี้ เราจะอนุญาต TCP/80 และสร้างกฎ NAT:

PS> NetFirewallRule ใหม่ - ชื่อ "TCP80" - DisplayName "HTTP บน TCP/80" - โปรโตคอล TCP - LocalPort 80 - อนุญาตการดำเนินการ - เปิดใช้งาน True PS> Add-NetNatStaticMapping -NatName "ContainerNat" - โปรโตคอล TCP -ExternalIPAddress 0.0.0.0 - ที่อยู่ IP ภายใน 192.168.1.2 - พอร์ตภายใน 80 - พอร์ตภายนอก 80

มีอีกทางเลือกหนึ่งสำหรับการปรับใช้อย่างง่าย นักพัฒนาได้เตรียมสคริปต์ที่ให้คุณติดตั้งการอ้างอิงทั้งหมดโดยอัตโนมัติและกำหนดค่าโฮสต์ คุณสามารถใช้มันได้หากต้องการ พารามิเตอร์ภายในสคริปต์จะช่วยให้คุณเข้าใจกลไกทั้งหมด:

PS> https://aka.ms/tp4/Install-ContainerHost -OutFile C:\Install-ContainerHost.ps1 PS> C:\Install-ContainerHost.ps1

มีตัวเลือกอื่น - เพื่อปรับใช้เครื่องเสมือนสำเร็จรูปพร้อมการรองรับคอนเทนเนอร์ เมื่อต้องการทำเช่นนี้ จะมีสคริปต์อยู่บนทรัพยากรเดียวกันที่ดำเนินการที่จำเป็นทั้งหมดโดยอัตโนมัติ คำแนะนำโดยละเอียดมีอยู่ใน MSDN ดาวน์โหลดและรันสคริปต์:

PS> wget -uri https://aka.ms/tp4/New-ContainerHost -OutFile c:\New-ContainerHost.ps1 PS> C:\New-ContainerHost.ps1 –VmName WinContainer -WindowsImage ServerDatacenterCore

เราตั้งชื่อตามอำเภอใจ และ -WindowsImage ระบุประเภทของรูปภาพที่กำลังรวบรวม ตัวเลือกอาจเป็น NanoServer, ServerDatacenter นักเทียบท่าได้รับการติดตั้งทันที พารามิเตอร์ SkipDocker และ IncludedDocker มีหน้าที่รับผิดชอบในการไม่มีหรือมีอยู่ หลังจากเปิดใช้งาน อิมเมจจะเริ่มโหลดและแปลง ในระหว่างกระบวนการ คุณจะต้องระบุรหัสผ่านเพื่อเข้าสู่ระบบ VM ไฟล์ ISO มีขนาดค่อนข้างใหญ่เกือบ 5 GB หากช่องสัญญาณช้า คุณสามารถดาวน์โหลดไฟล์บนคอมพิวเตอร์เครื่องอื่นได้ จากนั้นเปลี่ยนชื่อเป็น WindowsServerTP4 และคัดลอกไปยัง C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks เราสามารถเข้าสู่ระบบเครื่องเสมือนที่ติดตั้งโดยระบุรหัสผ่านที่ระบุระหว่างการประกอบและทำงานได้

ตอนนี้คุณสามารถเปลี่ยนไปใช้คอนเทนเนอร์ได้โดยตรง

การใช้คอนเทนเนอร์กับ PowerShell

โมดูลคอนเทนเนอร์ประกอบด้วย PowerShell cmdlets 32 รายการ ซึ่งบางส่วนยังไม่สมบูรณ์ แม้ว่าโดยทั่วไปจะเพียงพอที่จะทำให้ทุกอย่างทำงานได้ก็ตาม ง่ายต่อการแสดงรายการ:

PS> รับคำสั่ง - คอนเทนเนอร์โมดูล

คุณสามารถรับรายการรูปภาพที่มีอยู่ได้โดยใช้ Get-ContainerImage cmdlet คอนเทนเนอร์ - Get-Container ในกรณีของคอนเทนเนอร์ คอลัมน์สถานะจะแสดงสถานะปัจจุบัน: หยุดหรือทำงานอยู่ แต่ในขณะที่เทคโนโลยีอยู่ระหว่างการพัฒนา MS ไม่ได้จัดเตรียมพื้นที่เก็บข้อมูลไว้ และตามที่กล่าวไว้ ปัจจุบัน PowerShell ทำงานร่วมกับพื้นที่เก็บข้อมูลในเครื่อง ดังนั้นสำหรับการทดลอง คุณจะต้องสร้างมันขึ้นมาเอง

ดังนั้นเราจึงมีเซิร์ฟเวอร์ที่รองรับ ตอนนี้เราต้องการตัวคอนเทนเนอร์เอง เมื่อต้องการทำเช่นนี้ ให้ติดตั้งผู้ให้บริการแพ็คเกจ ContainerProvider

ความต่อเนื่องมีให้เฉพาะสมาชิกเท่านั้น

ตัวเลือกที่ 1 เข้าร่วมชุมชน "ไซต์" เพื่ออ่านเนื้อหาทั้งหมดบนเว็บไซต์

การเป็นสมาชิกในชุมชนภายในระยะเวลาที่กำหนดจะทำให้คุณสามารถเข้าถึงเอกสารของแฮ็กเกอร์ทั้งหมด เพิ่มส่วนลดสะสมส่วนตัวของคุณและช่วยให้คุณสามารถสะสมคะแนน Xakep Score แบบมืออาชีพได้!

ในเดือนมีนาคม พ.ศ. 2556 Soloman Hikes ได้ประกาศการเริ่มต้นโครงการโอเพ่นซอร์สซึ่งต่อมาเป็นที่รู้จักในชื่อ Docker ในเดือนต่อๆ มา ก็ได้รับการสนับสนุนอย่างมากจากชุมชน Linux และในฤดูใบไม้ร่วงปี 2014 Microsoft ได้ประกาศแผนการปรับใช้คอนเทนเนอร์ใน Windows Server 2016 WinDocks ซึ่งเป็นบริษัทที่ฉันร่วมก่อตั้ง ได้เปิดตัว Docker โอเพ่นซอร์สเวอร์ชันอิสระ สำหรับ Windows ในต้นปี 2559 โดยมุ่งเน้นไปที่การรองรับคอนเทนเนอร์ชั้นหนึ่งใน SQL Server ตู้คอนเทนเนอร์กำลังกลายเป็นจุดสนใจในอุตสาหกรรมอย่างรวดเร็ว ในบทความนี้ เราจะดูที่คอนเทนเนอร์และการใช้งานโดยนักพัฒนา SQL Server และ DBA

หลักการจัดระเบียบคอนเทนเนอร์

คอนเทนเนอร์กำหนดวิธีการใหม่ในการใช้งานบรรจุภัณฑ์ รวมกับการแยกผู้ใช้และกระบวนการ สำหรับการใช้งานที่มีผู้เช่าหลายราย การใช้งานคอนเทนเนอร์ต่างๆ สำหรับ Linux และ Windows มีมานานหลายปีแล้ว แต่ด้วยการเปิดตัว Windows Server 2016 เราจึงมีมาตรฐาน Docker โดยพฤตินัย ปัจจุบัน Docker API และรูปแบบคอนเทนเนอร์ได้รับการรองรับบน AWS, Azure, Google Cloud, Linux และ Windows ที่เผยแพร่ต่อสาธารณะทั้งหมด โครงสร้างที่หรูหราของ Docker มีข้อดีที่สำคัญ

  • การพกพา คอนเทนเนอร์มีการพึ่งพาซอฟต์แวร์แอปพลิเคชันและทำงานบนแล็ปท็อปของนักพัฒนา เซิร์ฟเวอร์ทดสอบที่ใช้ร่วมกัน และบริการสาธารณะใดๆ
  • ระบบนิเวศของคอนเทนเนอร์ Docker API เป็นแหล่งรวมนวัตกรรมอุตสาหกรรมพร้อมโซลูชันสำหรับการตรวจสอบ การบันทึก การจัดเก็บข้อมูล การจัดกลุ่มคลัสเตอร์ และการจัดการ
  • เข้ากันได้กับบริการสาธารณะ คอนเทนเนอร์ได้รับการออกแบบมาสำหรับสถาปัตยกรรมไมโครเซอร์วิส การขยายขนาด และปริมาณงานชั่วคราว คอนเทนเนอร์ได้รับการออกแบบเพื่อให้สามารถถอดและเปลี่ยนได้หากต้องการ แทนที่จะแพตช์หรืออัปเกรด
  • ความเร็วและความประหยัด ใช้เวลาไม่กี่วินาทีในการสร้างคอนเทนเนอร์ ให้การสนับสนุนที่มีประสิทธิภาพสำหรับการสมัครสมาชิกหลายรายการ สำหรับผู้ใช้ส่วนใหญ่ จำนวนเครื่องเสมือนจะลดลงสามถึงห้าเท่า (รูปที่ 1)

คอนเทนเนอร์เซิร์ฟเวอร์ SQL

SQL Server รองรับการเช่าหลายอินสแตนซ์ที่มีชื่อมาเป็นเวลาสิบปี แล้วคอนเทนเนอร์ของ SQL Server มีมูลค่าเท่าใด

ความจริงก็คือคอนเทนเนอร์ SQL Server ใช้งานได้จริงมากกว่าเนื่องจากความเร็วและระบบอัตโนมัติ คอนเทนเนอร์ SQL Server ได้รับการตั้งชื่อว่าอินสแตนซ์ โดยมีการจัดเตรียมข้อมูลและการตั้งค่าภายในไม่กี่วินาที ความสามารถในการสร้าง ลบ และแทนที่คอนเทนเนอร์ SQL Server ได้ในไม่กี่วินาที ทำให้คอนเทนเนอร์เหล่านี้มีประโยชน์มากขึ้นสำหรับการพัฒนา การรับประกันคุณภาพ และกรณีการใช้งานอื่นๆ ที่กล่าวถึงด้านล่าง

ความเร็วและระบบอัตโนมัติทำให้คอนเทนเนอร์ SQL Server เหมาะสำหรับการพัฒนาการผลิตและสภาพแวดล้อม QA สมาชิกในทีมแต่ละคนใช้งานคอนเทนเนอร์แบบแยกส่วนในเครื่องเสมือนที่ใช้ร่วมกัน ช่วยลดจำนวนเครื่องเสมือนลงสามถึงห้าเท่า เป็นผลให้เราประหยัดได้มากในการบำรุงรักษาเครื่องเสมือนและค่าลิขสิทธิ์ Microsoft คอนเทนเนอร์สามารถรวมเข้ากับอาร์เรย์เครือข่ายพื้นที่จัดเก็บข้อมูล (SAN) ได้อย่างง่ายดายโดยใช้แบบจำลองการจัดเก็บข้อมูลและโคลนฐานข้อมูล (รูปที่ 2)

ฐานข้อมูลที่เชื่อมต่อขนาด 1TB จะถูกสร้างขึ้นบนอินสแตนซ์คอนเทนเนอร์ภายในเวลาไม่ถึงหนึ่งนาที นี่เป็นการปรับปรุงที่สำคัญเหนือเซิร์ฟเวอร์ที่มีอินสแตนซ์ที่มีชื่อเฉพาะหรือการจัดเตรียมเครื่องเสมือนสำหรับนักพัฒนาแต่ละราย บริษัทแห่งหนึ่งใช้เซิร์ฟเวอร์แบบ 8 คอร์เพื่อรองรับคอนเทนเนอร์ SQL Server มากถึง 20 400 GB ในอดีต เครื่องเสมือนแต่ละเครื่องใช้เวลามากกว่าหนึ่งชั่วโมงในการจัดเตรียม และอินสแตนซ์คอนเทนเนอร์ได้รับการจัดเตรียมภายในสองนาที ดังนั้นจึงเป็นไปได้ที่จะลดจำนวนเครื่องเสมือนลง 20 เท่า ลดจำนวนแกนประมวลผลลง 5 เท่า และลดต้นทุนการชำระค่าลิขสิทธิ์ Microsoft ลงอย่างมาก นอกจากนี้ ความยืดหยุ่นและการตอบสนองทางธุรกิจยังเพิ่มขึ้นอีกด้วย

การใช้คอนเทนเนอร์เซิร์ฟเวอร์ SQL

คอนเทนเนอร์ถูกกำหนดโดยใช้สคริปต์ Dockerfile ซึ่งมีขั้นตอนเฉพาะในการสร้างคอนเทนเนอร์ Dockerfile ที่แสดงในรูปที่ 1 ระบุ SQL Server 2012 ด้วยฐานข้อมูลที่คัดลอกไปยังคอนเทนเนอร์และสคริปต์ SQL Server เพื่อปกปิดตารางที่เลือก

แต่ละคอนเทนเนอร์สามารถมีฐานข้อมูลได้หลายสิบฐานข้อมูลพร้อมการสนับสนุนและไฟล์บันทึก ฐานข้อมูลสามารถคัดลอกและรันในคอนเทนเนอร์หรือติดตั้งโดยใช้คำสั่ง MOUNTDB

แต่ละคอนเทนเนอร์มีระบบไฟล์ส่วนตัว ซึ่งแยกได้จากทรัพยากรโฮสต์ ในตัวอย่างที่แสดงในรูปที่ 2 คอนเทนเนอร์ถูกสร้างขึ้นโดยใช้ MSSQL-2014 และ Venture.mdf มีการสร้าง ContainerID และพอร์ตคอนเทนเนอร์ที่ไม่ซ้ำกัน


หน้าจอ 2. คอนเทนเนอร์ที่ใช้ SQL Server 2014 และ Venture.mdf

คอนเทนเนอร์ SQL Server มอบประสิทธิภาพและระบบอัตโนมัติในระดับใหม่ แต่ลักษณะการทำงานจะเหมือนกับช่องว่างที่มีชื่อปกติทุกประการ การจัดการทรัพยากรสามารถนำไปใช้โดยใช้เครื่องมือ SQL Server หรือผ่านขีดจำกัดทรัพยากรคอนเทนเนอร์ (รูปที่ 3)

แอปพลิเคชั่นอื่น ๆ

คอนเทนเนอร์เป็นวิธีการทั่วไปในการจัดการการพัฒนาและสภาพแวดล้อม QA แต่การใช้งานอื่นๆ กำลังเกิดขึ้น การทดสอบการกู้คืนความเสียหายเป็นกรณีการใช้งานที่เรียบง่ายแต่มีแนวโน้มที่ดี อื่นๆ รวมถึงคอนเทนเนอร์ของสภาพแวดล้อม SQL Server ภายในสำหรับแอปพลิเคชันรุ่นเก่า เช่น SAP หรือ Microsoft Dynamics แบ็กเอนด์แบบคอนเทนเนอร์ใช้เพื่อจัดเตรียมสภาพแวดล้อมการทำงานสำหรับการสนับสนุนและการบำรุงรักษาอย่างต่อเนื่อง นอกจากนี้ คอนเทนเนอร์การประเมินยังใช้เพื่อรองรับสภาพแวดล้อมการใช้งานจริงที่มีการจัดเก็บข้อมูลถาวรอีกด้วย ในบทความหน้า ฉันจะพูดถึงรายละเอียดเกี่ยวกับข้อมูลถาวร

WinDocks มุ่งหวังที่จะทำให้การใช้คอนเทนเนอร์ง่ายยิ่งขึ้นผ่านเว็บอินเตอร์เฟส อีกโครงการหนึ่งมุ่งเน้นไปที่การย้ายคอนเทนเนอร์ SQL Server ในกระบวนการ DevOps หรือการรวมอย่างต่อเนื่องด้วยไปป์ไลน์ CI/CD ตาม Jenkins หรือ Team City วันนี้ คุณสามารถสัมผัสประสบการณ์การใช้คอนเทนเนอร์บน Windows 8 และ Windows 10 ทุกรุ่น, Windows Server 2012 หรือ Windows Server 2016 ที่รองรับทุกรุ่นที่เริ่มต้นด้วย SQL Server 2008 โดยใช้สำเนา WinDocks Community Edition ของคุณ (https://www.windocks.com /community-docker-windows)

กำลังศึกษาเทคโนโลยีคอนเทนเนอร์
วินโดวส์เซิร์ฟเวอร์ 2016

หนึ่งในคุณสมบัติใหม่ที่โดดเด่นที่นำมาใช้ใน Windows Server 2016 คือการรองรับคอนเทนเนอร์ มารู้จักเธอกันดีกว่า

ระบบสมัยใหม่ได้ย้ายออกไปจากหลักการของระบบปฏิบัติการเดียว - เซิร์ฟเวอร์เดียวมานานแล้ว เทคโนโลยีการจำลองเสมือนทำให้สามารถใช้ทรัพยากรเซิร์ฟเวอร์ได้อย่างมีประสิทธิภาพมากขึ้น ช่วยให้คุณสามารถรันระบบปฏิบัติการหลายระบบ แบ่งระบบกันเองและทำให้การดูแลระบบง่ายขึ้น จากนั้นไมโครเซอร์วิสก็ปรากฏขึ้น ทำให้สามารถปรับใช้แอปพลิเคชันแบบแยกส่วนเป็นส่วนประกอบที่แยกจากกัน จัดการได้ง่าย และปรับขนาดได้ นักเทียบท่าเปลี่ยนแปลงทุกอย่าง กระบวนการส่งมอบแอปพลิเคชันร่วมกับสภาพแวดล้อมกลายเป็นเรื่องง่ายจนอดไม่ได้ที่จะสนใจผู้ใช้ปลายทาง แอปพลิเคชันภายในคอนเทนเนอร์ทำงานเหมือนกับว่ากำลังใช้ระบบปฏิบัติการเต็มรูปแบบ แต่ต่างจากเครื่องเสมือนตรงที่พวกเขาไม่โหลดสำเนาของระบบปฏิบัติการ ไลบรารี ไฟล์ระบบ ฯลฯ ของตัวเอง คอนเทนเนอร์จะได้รับเนมสเปซแบบแยกซึ่งแอปพลิเคชันสามารถเข้าถึงทรัพยากรที่จำเป็นทั้งหมด แต่ไม่สามารถไปไกลกว่านั้นได้ หากคุณต้องการเปลี่ยนการตั้งค่า ระบบจะบันทึกเฉพาะความแตกต่างกับระบบปฏิบัติการหลักเท่านั้น ดังนั้นคอนเทนเนอร์จะเริ่มทำงานอย่างรวดเร็วและทำให้ระบบโหลดน้อยลง ซึ่งต่างจากเครื่องเสมือน คอนเทนเนอร์ใช้ทรัพยากรเซิร์ฟเวอร์อย่างมีประสิทธิภาพมากขึ้น

คอนเทนเนอร์บน Windows

ใน Windows Server 2016 นอกเหนือจากเทคโนโลยีการจำลองเสมือนที่มีอยู่ - แอปพลิเคชันเสมือน Hyper-V และ Server App-V แล้ว ยังได้เพิ่มการรองรับคอนเทนเนอร์ Windows Server Containers ใช้งานผ่านเลเยอร์นามธรรมสแต็กการจัดการคอนเทนเนอร์ที่ใช้ฟังก์ชันที่จำเป็นทั้งหมด เทคโนโลยีนี้ได้รับการประกาศย้อนกลับไปใน Technical Preview 4 แต่ตั้งแต่นั้นมามีการเปลี่ยนแปลงไปมากมายในทิศทางของการทำให้เข้าใจง่าย และคำแนะนำที่เขียนไว้ก่อนหน้านี้ก็ไม่สามารถอ่านได้ ในเวลาเดียวกันมีการเสนอคอนเทนเนอร์ "ของเราเอง" สองประเภท - คอนเทนเนอร์ Windows และคอนเทนเนอร์ Hyper-V และโอกาสหลักอีกอย่างหนึ่งคือการใช้เครื่องมือ Docker นอกเหนือจาก PowerShell cmdlets ในการจัดการคอนเทนเนอร์

คอนเทนเนอร์ Windows มีหลักการคล้ายกับ FreeBSD Jail หรือ Linux OpenVZ โดยจะใช้หนึ่งคอร์กับระบบปฏิบัติการ ซึ่งใช้ร่วมกับทรัพยากรอื่นๆ (RAM, เครือข่าย) ที่ใช้ร่วมกัน ไฟล์ระบบปฏิบัติการและบริการจะถูกฉายลงในเนมสเปซของแต่ละคอนเทนเนอร์ คอนเทนเนอร์ประเภทนี้ใช้ทรัพยากรอย่างมีประสิทธิภาพ ลดค่าใช้จ่าย และช่วยให้วางแอปพลิเคชันได้หนาแน่นมากขึ้น เนื่องจากอิมเมจคอนเทนเนอร์พื้นฐาน "มี" เคอร์เนลเดียวกันกับโหนด เวอร์ชันจึงต้องตรงกัน ไม่เช่นนั้นจะไม่รับประกันการทำงาน

คอนเทนเนอร์ Hyper-V ใช้ระดับการแยกเพิ่มเติม และแต่ละคอนเทนเนอร์จะได้รับการจัดสรรคอร์และหน่วยความจำของตัวเอง การแยกไม่เหมือนกับประเภทก่อนหน้านั้นไม่ได้ดำเนินการโดยเคอร์เนลระบบปฏิบัติการ แต่โดยไฮเปอร์ไวเซอร์ Hyper-V (จำเป็นต้องมีบทบาท Hyper-V) ผลลัพธ์ที่ได้คือค่าใช้จ่ายต่ำกว่าเครื่องเสมือน แต่แยกได้ดีกว่าคอนเทนเนอร์ของ Windows ในกรณีนี้ หากต้องการรันคอนเทนเนอร์ จะต้องมีเคอร์เนลระบบปฏิบัติการเดียวกัน คอนเทนเนอร์เหล่านี้ยังสามารถใช้งานได้ใน Windows 10 Pro/Enterprise เป็นที่น่าสังเกตว่าไม่ได้เลือกประเภทคอนเทนเนอร์ในระหว่างการสร้าง แต่ในระหว่างการปรับใช้ นั่นคือคอนเทนเนอร์ใด ๆ ที่สามารถเปิดใช้งานได้ทั้งในรูปแบบ Windows และเวอร์ชัน Hyper-V

คอนเทนเนอร์ใช้เซิร์ฟเวอร์คอร์หรือเซิร์ฟเวอร์นาโนที่ถูกตัดแต่งเป็นระบบปฏิบัติการ อันแรกปรากฏใน Windows Sever 2008 และให้ความเข้ากันได้กับแอพพลิเคชั่นที่มีอยู่มากขึ้น อย่างที่สองนั้นถูกลดทอนลงมากกว่าเมื่อเทียบกับ Server Core และได้รับการออกแบบมาให้ทำงานโดยไม่มีจอภาพ ช่วยให้คุณสามารถรันเซิร์ฟเวอร์ในการกำหนดค่าขั้นต่ำที่เป็นไปได้สำหรับใช้กับ Hyper-V, ไฟล์เซิร์ฟเวอร์ (SOFS) และบริการคลาวด์ โดยต้องใช้ 93% พื้นที่น้อยลง ประกอบด้วยส่วนประกอบที่จำเป็นที่สุดเท่านั้น (.Net พร้อม CoreCLR, Hyper-V, Clustering ฯลฯ)

รูปแบบภาพฮาร์ดดิสก์ VHDX ใช้สำหรับการจัดเก็บ คอนเทนเนอร์ เช่นเดียวกับในกรณีของ Docker จะถูกบันทึกลงในอิมเมจในพื้นที่เก็บข้อมูล ยิ่งไปกว่านั้น แต่ละอันไม่ได้บันทึกชุดข้อมูลทั้งหมด แต่จะบันทึกเฉพาะความแตกต่างระหว่างรูปภาพที่สร้างขึ้นและรูปภาพพื้นฐานเท่านั้น และในขณะที่เริ่มต้นข้อมูลที่จำเป็นทั้งหมดจะถูกฉายลงในหน่วยความจำ Virtual Switch ใช้เพื่อจัดการการรับส่งข้อมูลเครือข่ายระหว่างคอนเทนเนอร์และเครือข่ายกายภาพ