Локален сървър с Docker на Windows: пълно ръководство

  • Docker на Windows ви позволява да стартирате Linux и Windows контейнери, както на настолни компютри, така и на сървъри.
  • Docker Desktop с WSL 2 се използва често в разработката, докато Docker Engine като услуга се препоръчва в продукцията.
  • Конфигурирането с помощта на daemon.json, мрежи, прокси сървъри и групи за сигурност е ключово за стабилна и сигурна употреба.
  • Docker Compose улеснява възпроизводимите локални среди за разработка с горещо презареждане и последователно внедряване на сървъри.

Локален сървър с Docker на Windows

карам локален сървър с Docker на Windows Това се е превърнало в съществено за много разработчици. Независимо дали работите със съвременни уеб приложения или поддържате наследени системи, наличието на възпроизводима, бърза за стартиране и лесна за изтриване среда ви спестява часове разочарование от ръчни инсталации, конфликти на версии и безкрайни въпроси от типа „работи на моята машина“.

Проблемът възниква, когато приложението ви зависи от Linux технологии, но вашият клиент използва WindowsТова е типичният сценарий: back-end на Linux, front-end и краен потребител на Windows 10, 11 или дори Windows Server. Години наред лесното решение беше използването на Docker Desktop. Но това означава, че потребителят трябва да помни да го стартира, да управлява актуализации, да се занимава с WSL 2 или Hyper-V… и не винаги върви гладко. За щастие, днес можем да създадем сравнително стабилни локални и сървърни среди, използвайки Docker на Windows, както с... DockerDesktop както с Докер Двигател като услуга.

Какво е Docker в Windows и защо си струва да се използва?

Въпреки че Докер е роден, привързан към ядро на LinuxДнес е напълно възможно да се използват контейнери и в Windows. Идеята остава същата: пакетирайте приложение с всички негови зависимости в образ, за ​​да го стартирате като изолиран контейнер, без да е необходимо да инсталирате библиотеки, рамки или услуги директно в операционната система.

В съвременните Windows системи Docker работи по два начина:

  • Използване на оригинални контейнери на Windows (базирано на изображения като Nano Server, Server Core или Windows Server).
  • Поддържа се от слой за виртуализация (Hyper-V или WSL 2) за изпълнение на Linux контейнериТова позволява например на компания да контейнеризира класически ASP.NET приложения в образи на Windows Server и едновременно с това да внедрява Linux микросървиси в една и съща Docker екосистема, въпреки че се препоръчва да се разделят по тип хост.

Docker контейнерите в Windows се открояват, защото са много по-лек от виртуална машинаВместо да се използва цялостна операционна система за всяка услуга, системното ядро ​​се споделя и всеки контейнер предоставя само това, което е необходимо за стартиране на приложението. Това води до време за зареждане от секунди и сигурни актуализации чрез създаване на нови образи. Също така позволява незабавно връщане към предишна версия, ако нещо се обърка.

За тези, които искат да модернизират своята наследена софтуерна инфраструктура, Docker предлага практичен начин за това. капсулиране на стари Windows приложения (например с IIS и класически ASP.NET) и да ги изпълнявате в контролирани и повтаряеми среди. А за разработване на нови приложения, особено със смесени стекове, това представлява най-удобния начин за обединяване на среди между Linux, Windows и облака.

Докер на Windows

Изисквания за използване на Docker на Windows 10, 11 и Windows Server

Преди да започнете да инсталирате каквото и да е, е важно да разберете какво изисква Docker във всеки отделен случай. Защото Десктопът на Windows 11 не е същият като Windows Server 2022..

От страна на клиента, Docker Desktop се поддържа (общо казано) в Windows 10 Pro / Enterprise С Anniversary Update или Creators Update нататък, както и в Windows 11, стига хардуерът и версията на системата да поддържат виртуализация на хардуера. Важно е опцията за виртуализация да е активирана в BIOS/UEFI. Можете да проверите това в диспечера на задачите в раздела „Производителност“.

От страна на сървъра, Docker engine може да бъде инсталиран в Windows Server 2016, 2019, 2022 и 2025За да използвате изолация на Hyper-V или да стартирате Linux контейнери в специални сценарии, функцията Hyper-V трябва да е налична и ако сървърът работи във виртуална машина, той трябва да поддържа вложена виртуализация и да има поне 4 GB специална RAM памет за хостване на контейнери.

За Windows 11 и Windows 10, Docker Desktop разчита на WSL 2 (подсистема на Windows за Linux)Това му позволява да предложи по-подобно на Linux изживяване. Този слой осигурява леко Linux ядро. Контейнерите работят върху него с добра интеграция с файловата система на Windows.

А какво ще кажете за съвместимостта? Docker продължава да работи перфектно на основните платформи. 64-битови Linux дистрибуции (Debian, Ubuntu, Fedora, CentOS, Oracle Linux, RHEL, openSUSE, SUSE Enterprise…), локално или на облачни сървъри като Azure или AWS. Често срещано е да се комбинират Windows и Linux хостове в зависимост от натоварването.

Инсталиране на Docker Desktop на Windows 10 и Windows 11

Инсталирането на Docker Desktop на машина за разработка с Windows в момента е най-лесният начин да започнете работа с контейнери. Особено ако ще работите с Linux изображения и искате нещо... интегриран с работния плот.

Първата стъпка е да отидете на официалния уебсайт на Docker. Там трябва да изтеглите инсталатора. Docker Desktop за WindowsСлед като стартирате файла, съветникът ще ви подкани да активирате интеграцията с WSL 2. Силно препоръчително е да поставите отметка в квадратчето „Използване на WSL 2 вместо Hyper-V“, когато вашата машина го поддържа, тъй като производителността обикновено е по-добра и консумира по-малко ресурси от традиционната виртуална машина.

По време на инсталацията ще бъдат изтеглени и инсталирани следните компоненти: Подсистема Windows за Linux (WSL 2) Ако все още не го имате, в някои случаи самият Docker съветник ще ви даде директна връзка за изтегляне на най-новия WSL 2 пакет от уебсайта на Microsoft. Просто следвайте съветника и рестартирайте, когато бъдете подканени.

След рестартиране, Docker Desktop ще се стартира и ще покаже лицензионното споразумение. Продуктът е безплатен за лична употреба и малки предприятияВъпреки това, за големи организации е препоръчително да прегледат лицензионните условия, за да се уверят, че те отговарят на вида употреба и размера на компанията.

За да проверите дали всичко е готово, можете да отворите PowerShell и да стартирате тестов образ като здравей святDocker ще изтегли изображението от Docker Hub и ще стартира контейнера, показвайки потвърдително съобщение, ако всичко е минало добре. Това гарантира, че двигателят работи, има интернет връзка и че изображенията са изтеглени правилно.

Докер на Windows

Инсталиране на Docker Engine на Windows Server

Когато говорим за сървърни среди, особено в производствена среда, не е нормално да се използва Docker Desktop, а да се инсталира... Docker engine като услуга на WindowsВ Windows Server 2016, 2019, 2022 или 2025, Microsoft предоставя скриптове, които значително улесняват този процес.

Препоръчителният метод в Windows Server 2022, например, е да се отвори PowerShell сесия с администраторски права и да се изтегли официалният инсталационен скрипт от хранилището на Microsoft в GitHub. Това се постига с команда, която използва Invoke-WebRequest да изтеглите скрипта install-docker-ce.ps1 и да го запишете на диск.

След като го изтеглите, просто стартирайте скрипта от същата конзола. Скриптът ще се погрижи за останалото. Инсталиране на Docker CEРегистрирайте услугата в Windows, конфигурирайте мрежата от контейнери по подразбиране и рестартирайте хоста, за да завършите операцията. Когато влезете отново, услугата Docker ще работи.

Точно както в Linux, можете да валидирате инсталацията, като изпълните прост контейнер, като например hello-world. Това ви позволява да видите, че демонът реагира правилно и че контейнерите могат да бъдат създадени. От този момент нататък Docker се държи като всяка друга системна услуга, управляема от services.msc или с PowerShell cmdlets.

Струва си да се подчертае, че за производствени натоварванияMicrosoft и Docker не препоръчват използването на Docker Desktop на Windows Server. Той е предназначен за разработка, а не за сървъри. На сървърите трябва да използвате Docker engine, инсталиран като услуга, или Docker EE/CE, или runtime, използван за Windows контейнери.

Конфигуриране на Docker Engine на Windows с daemon.json

В Windows Server, най-чистият начин за фина настройка на поведението на Docker демона е да се използва JSON конфигурационен файл, наречен демон.js, разположен в пътя C:\ProgramData\Docker\config\. Ако не съществува, можете да го създадете сами, спазвайки JSON формата.

В този файл можете да настроите голям брой параметри. Например: опции за мрежа, съхранение, регистриране и DNS Това включва TLS конфигурация, огледални сървъри в системния регистър и групи за сигурност за достъп до Docker сокета. Не е необходимо да попълвате всички ключове. Просто включете тези, които искате да персонализирате, а останалите ще наследят стойностите по подразбиране.

В среди, изискващи криптиране от край до край, можете да активирате опцията „tlsverify“ и да укажете пътищата до сертификата на CA, сертификата на сървъра и частния ключ, като използвате „tlscacert“, „tlscert“ и „tlskey“. С тази конфигурация демонът ще приема само защитени връзки на определения порт. Това е от решаващо значение, когато Docker е достъпен за други машини в мрежата.

В допълнение към конфигурационния файл, има опция за регулиране на параметрите на демона чрез директно модифициране на Докер услуга Използване на помощната програма `sc config` и добавяне на флагове към binpath. Тя е по-малко гъвкава от `daemon.json`, но все пак е полезна в специфични случаи или среди, където е за предпочитане цялата конфигурация да се запази в самата услуга.

Локален сървър с Docker на Windows

Мрежи, сигурност и проксиране в Docker за Windows

Мрежовият аспект на използването на Docker в Windows има своите нюанси. По подразбиране, двигателят създава NAT мрежа За контейнерите това им позволява достъп до интернет през хоста и предоставяне на портове на външния свят чрез картографиране на портове. Понякога обаче не е желателно да се създава тази мрежа по подразбиране, например в силно контролирани среди или когато искате сами да управлявате всички мрежи.

За да деактивирате създаването на NAT мрежата по подразбиране, можете да зададете параметъра "bridge" на "none" в daemon.json. От този момент нататък ще трябва да дефинирате мрежите, които контейнерите ще използват, или с команди `docker network`, или чрез оркестратори.

Що се отнася до достъпа до демона, когато работите локално на Docker хоста, командите обикновено се изпращат чрез именуван канал В Windows, по дизайн, само членовете на групата администратори имат достъп до този конвейер. Ако искате да делегирате управлението на контейнера на конкретна група, можете да използвате параметъра „group“ в конфигурацията, за да укажете името на групата за сигурност, която ще има разрешение за комуникация с двигателя.

В корпоративни среди е обичайно машините да се свързват с интернет чрез HTTP/HTTPS проксиЗа да работят правилно docker pull или docker search зад прокси, ще трябва да дефинирате променливи на средата HTTP_PROXY и/или HTTPS_PROXY на машинно ниво.

За напреднали мрежови задачи, Windows предлага команди като Get-HNSNetwork и Remove-HNSNetwork за управление на мрежи, създадени от Docker и подсистемата за хостинг на Windows. Това е особено полезно при почистване на сървър или разрешаване на конфликти в конфигурацията, останали след деинсталиране или агресивни промени.

Изпълнение на контейнери за Windows и Linux на един и същ хост

На техническо ниво е възможно да се комбинират Контейнери за Windows и Linux на една и съща машина, но си струва да се разберат последиците. Docker Desktop позволява превключване между режими на Windows и Linux, а Windows Server предлага Hyper-V изолация, която позволява Linux контейнери чрез лека виртуализация.

Въпреки това, от оперативна гледна точка, се препоръчва хостовете да се държат отделно според типа контейнер, който ще изпълняват. Много по-удобно е за администратора да работи със сървъри, които изпълняват изключително Linux контейнери или изключително Windows контейнери, тъй като базови изображения, инструменти за отстраняване на грешки и модели на употреба Те се различават доста между двата свята.

За контейнерите на Windows има няколко официални базови образа на Microsoft, публикувани в хранилища като Docker Hub или Microsoft Container Registry (MCR). Сред тях са:

  • Nano Server (най-лекият, идеален за съвременни приложения).
  • Сървърно ядро ​​(предназначено за сървърни приложения).
  • Windows и Windows Server (най-пълният, с пълна API съвместимост).

Когато стартирате контейнер, базиран на Server Core, ще видите, че обвивката по подразбиране е PowerShell, а не bash. В началото това може да е объркващо, особено след като подканите на контейнера и хоста изглеждат много сходни и момент на невнимание може да ви накара да изпълните опасни команди на грешното място. Командата `hostname` вътре в контейнера ще ви покаже идентификатора на контейнера, а не идентификатора на физическия сървър или виртуална машина.

По дизайн контейнерите са предназначени да бъдат за еднократна употреба и сменяемиАдминистрацията се фокусира върху създаването, изпълнението и изтриването на контейнери, а не върху „управлението“ им като дългосрочни виртуални машини. Всяка постоянна конфигурация трябва да бъде в образа или извън контейнера (томове, външна конфигурация), защото всичко, което промените ръчно вътре в контейнера, ще бъде загубено, когато той бъде унищожен.

Node.js уеб сървър с горещо презареждане

Започвайки с „Hello World“ в конзолата, можете да превърнете примера си в малък HTTP сървър Използвайки Express, чрез дефиниране на app.get на маршрута "/", който отговаря с обикновен текст и слуша на порт 3000, вече имате функционална уеб среда.

В docker-compose.yml можете да промените командата за стартиране на нещо като `sh -c "npm install; npm start"`, така че контейнерът да инсталира зависимостите първия път и след това да стартира nodemon с app.js. Освен това, това е моментът да съпоставите порт 3000 на контейнера с порт 3000 на хоста, използвайки ключа `ports`, за да можете да получите достъп до него от браузъра си на http://localhost:3000 (или IP адреса на виртуалната машина, ако използвате Docker Toolbox или отдалечен Linux хост).

Ако след това разширите логиката на app.js, за да приемате динамични маршрути, например "/:name" и да връщате "Hello" „Ще можеш да видиш как Всяка промяна в кода се отразява мигновено без да се налага да пресъздавате образа или ръчно да рестартирате контейнера. Това е точно същото поведение като LiveReload, но капсулирано в преносим образ, който можете да разположите утре на Linux сървър или в облака.

Този работен модел с томове и nodemon може да се приложи и към други езици и рамки. Интересното е, че средата за изпълнение се намира вътре в контейнера. Вашата Windows система действа само като хост, което значително намалява конфликтите със зависимости и версии на библиотеки от други проекти.

За по-сложни проекти, docker-compose.yml може да декларира множество услуги (база данни, кеш, опашка за съобщения и др.) и да ги свързва заедно. В Windows, стига да използвате Docker Desktop с WSL 2, цялата тази среда ще продължи да се държи почти идентично с тази нативна Linux система.

Типично използване на Docker на Windows Server с IIS и наследени приложения

Освен разработката, много компании искат да използват Docker за капсулиране на стари Windows приложения които използват IIS, класически ASP или по-стари версии на .NET. В тези случаи е обичайно да се започне с базов образ на Windows Server Core с предварително инсталиран IIS.

Такъв контейнер може да бъде създаден с docker run, като се укаже подходящото IIS изображение, името на контейнера, съпоставянето на портове (например 8081:80, за да се разкрие вътрешен порт 80 на порт 8081 на хоста) и се монтира папка на хоста, като например c:\inetpub\wwwroot, за да се поставят файловете на приложението там.

Ако стартирате контейнера в интерактивен режим, ще влезете в PowerShell сесия вътре в IIS сървъра на контейнера. Оттам можете да проверявате лог файлове, да преглеждате конфигурации и като цяло да разбирате как се държи приложението ви в тази нова среда. Когато искате да спрете сесията, без да изключвате контейнера, просто използвайте `exit` или го спрете от хоста.

Ако е необходимо приложението да продължи да работи във фонов режим, най-добрият подход е да стартирате контейнера с флага `-d`, така че да работи в „отделен“ режим. От този момент нататък го управлявате като всеки друг контейнер: `docker ps` за да изброите съдържанието му, `docker logs` за да прегледате лог файловете, `docker stop` за да го изключите и `docker rm` за да го изтриете, когато вече не ви е необходим.

Създаването на персонализирани образи за Windows работи по абсолютно същия начин като в Linux. Дефинирате Dockerfile с инструкции за копиране, инсталиране и конфигуриране, изграждате образа с `docker build` и след това го маркирате и публикувате в частен регистър, ако ще го използвате на множество сървъри. Единствената практическа разлика е, че Windows приема както наклонени черти напред, така и обратни наклонени черти в пътищата, въпреки че е най-добре да се спазва последователност, за да се избегне объркване.

Деинсталирайте Docker и извършете пълно почистване на Windows

Ако някога ти се наложи Премахнете Docker напълно Когато работите на машина с Windows 10 или Windows Server 2016/2019, е важно да следвате определена последователност. Това ще предотврати оставянето на нежелани файлове или загубата на данни, които искате да запазите.

Първата стъпка е да се уверите, че не се изпълняват контейнери. Можете да оставите всеки активен swarm с `docker swarm leave --force` и след това да спрете всички работещи контейнери с комбинация от `docker ps --quiet` и `docker stop`. Оттам можете да използвате `docker system prune --all --volumes`, ако искате агресивно да премахнете контейнери, изображения, мрежи и томове.

В Windows 10 деинсталирането на Docker Desktop се извършва от Настройки > Приложения > Приложения и функцииПотърсете „Docker“ в списъка, изберете го и щракнете върху „Деинсталиране“. В Windows Server 2016, ако сте инсталирали Docker с помощта на PowerShell модули като DockerMsftProvider, процесът на деинсталиране включва използването на Uninstall-Package и Uninstall-Module за премахване както на Docker пакета, така и на доставчика.

След като софтуерът бъде деинсталиран, е добра идея да премахнете HNS мрежите, свързани с Docker, като използвате системните команди. Също така, изтрийте папката C:\ProgramData\Docker с `Remove-Item -Recurse`, за да премахнете всички останали програмни данни. Това ще освободи пространството, заемано преди това от изображения на контейнери и слоеве.

В много системи инсталирането на Docker автоматично активира допълнителни функции на Windows, като например контейнери и в някои случаи Hyper-V. Ако вече не възнамерявате да използвате контейнери на тази машина, можете да деактивирате тези функции от контролния панел в Windows 10 (Програми и функции > Включване или изключване на функции на Windows) или с Remove-WindowsFeature Containers / Hyper-V в Windows Server.

След като изпълните тези стъпки, най-добрият начин на действие е да рестартирате системата си, като използвате `Restart-Computer -Force` от команден ред с повишени права. Това ще гарантира, че всички промени във функциите и услугите ще бъдат приложени правилно и ще остави компютъра ви в чисто състояние.