Lokalni server s Dockerom na Windowsu: kompletan vodič

  • Docker na Windowsu vam omogućava pokretanje Linux i Windows kontejnera, kako na desktop računarima tako i na serverima.
  • Docker Desktop sa WSL 2 se obično koristi u razvoju, dok se Docker Engine kao usluga preporučuje u produkciji.
  • Konfiguracija korištenjem daemon.json datoteke, mreža, proxyja i sigurnosnih grupa ključna je za stabilnu i sigurnu upotrebu.
  • Docker Compose omogućava reproducibilna lokalna razvojna okruženja s vrućim ponovnim učitavanjem i konzistentnim implementacijama servera.

Lokalni server sa Dockerom na Windowsu

ride a lokalni server sa Dockerom na Windowsu Postalo je neophodno za mnoge programere. Bez obzira da li radite sa modernim web aplikacijama ili održavate naslijeđene sisteme, imati okruženje koje se može reproducibilno koristiti, brzo pokrenuti i lako izbrisati štedi vam sate frustracije zbog ručnih instalacija, sukoba verzija i beskrajnih pitanja "radi na mom računaru".

Problem nastaje kada vaša aplikacija zavisi od Linux tehnologije, ali vaš klijent koristi WindowsOvo je tipičan scenario: back-end na Linuxu, front-end i krajnji korisnik na Windowsu 10, 11 ili čak Windows Serveru. Godinama je jednostavno rješenje bilo korištenje Docker Desktopa. Ali to znači da korisnik mora pamtiti da ga pokrene, upravlja ažuriranjima, radi s WSL 2 ili Hyper-V-om... i to ne ide uvijek glatko. Srećom, danas možemo postaviti prilično robusna lokalna i serverska okruženja koristeći Docker na Windowsu, oba sa... DockerDesktop kao i sa docker-engine kao usluga.

Šta je Docker na Windowsu i zašto ga vrijedi koristiti?

Iako je Docker rođen vezan za linux kernelDanas je sasvim moguće koristiti kontejnere i na Windowsu. Ideja ostaje ista: zapakirati aplikaciju sa svim njenim zavisnostima u sliku kako bi se pokrenula kao izolovani kontejner, bez potrebe za instaliranjem biblioteka, okvira ili servisa direktno na operativni sistem.

Na modernim Windows sistemima, Docker radi na dva načina:

  • Korištenje izvornih Windows kontejnera (na osnovu slika kao što su Nano Server, Server Core ili Windows Server).
  • Podržano slojem virtualizacije (Hyper-V ili WSL 2) za pokretanje Linux kontejneraOvo omogućava, na primjer, kompaniji da kontejnerizira klasične ASP.NET aplikacije u Windows Server slikama i, istovremeno, implementira Linux mikroservise u istom Docker ekosistemu, iako se preporučuje njihovo odvajanje po tipu hosta.

Docker kontejneri na Windowsu se ističu jer su mnogo lakši od virtuelne mašineUmjesto pokretanja kompletnog operativnog sistema za svaku uslugu, sistemsko jezgro se dijeli, a svaki kontejner pruža samo ono što je neophodno za pokretanje aplikacije. To rezultira vremenom pokretanja od nekoliko sekundi i sigurnim ažuriranjima kreiranjem novih slika. Također omogućava trenutni povratak na prethodnu verziju ako nešto pođe po zlu.

Za one koji žele modernizirati svoju naslijeđenu softversku infrastrukturu, Docker nudi praktičan način za... enkapsulirati starije Windows aplikacije (na primjer, s IIS-om i klasičnim ASP.NET-om) i pokretati ih u kontroliranim i ponovljivim okruženjima. A za razvoj novih aplikacija, posebno s miješanim stekovima, predstavlja najpogodniji način za objedinjavanje okruženja između Linuxa, Windowsa i oblaka.

Docker na Windowsu

Zahtjevi za korištenje Dockera na Windowsu 10, 11 i Windows Serveru

Prije nego što počnete instalirati bilo šta, važno je razumjeti šta Docker zahtijeva u svakom slučaju. Jer Desktop računar na Windowsu 11 nije isto što i Windows Server 2022..

Na klijentskoj strani, Docker Desktop je podržan (uglavnom) u Windows 10 Pro / Enterprise Od Anniversary Update-a ili Creators Update-a nadalje, i u Windowsu 11, sve dok hardver i verzija sistema podržavaju virtualizaciju hardvera. Važno je da je opcija virtualizacije omogućena u BIOS-u/UEFI-ju. To možete provjeriti u Upravitelju zadataka pod karticom Performanse.

Na strani servera, Docker engine se može instalirati u Windows Server 2016, 2019, 2022 i 2025Da biste koristili Hyper-V izolaciju ili pokretali Linux kontejnere u posebnim scenarijima, funkcija Hyper-V mora biti dostupna, a ako server radi unutar virtuelne mašine, mora podržavati ugniježđenu virtualizaciju i imati najmanje 4 GB namenske RAM memorije za hostovanje kontejnera.

Za Windows 11 i Windows 10, Docker Desktop se oslanja na WSL 2 (Windows podsistem za Linux)Ovo mu omogućava da ponudi iskustvo sličnije Linuxu. Ovaj sloj pruža laganu Linux kernel. Kontejneri se izvršavaju preko njega s dobrom integracijom sa Windows datotečnim sistemom.

A šta je s kompatibilnošću? Docker i dalje savršeno radi na glavnim platformama. 64-bitne Linux distribucije (Debian, Ubuntu, Fedora, CentOS, Oracle Linux, RHEL, openSUSE, SUSE Enterprise…), bilo lokalno ili na cloud serverima poput Azurea ili AWS-a. Uobičajeno je kombinirati Windows i Linux hostove ovisno o opterećenju.

Instalirajte Docker Desktop na Windows 10 i Windows 11

Instaliranje Docker Desktopa na Windows razvojni računar trenutno je najlakši način za početak rada s kontejnerima. Pogotovo ako ćete raditi sa Linux slikama i želite nešto... integrirano s radnom površinom.

Prvi korak je posjetiti službenu Docker web stranicu. Tamo trebate preuzeti instalacijski program. Docker Desktop za WindowsNakon što pokrenete datoteku, čarobnjak će vas zatražiti da omogućite WSL 2 integraciju. Preporučuje se da označite polje "Koristi WSL 2 umjesto Hyper-V" kad god vaš računar to podržava, jer su performanse obično bolje i troši manje resursa od tradicionalne virtuelne mašine.

Tokom instalacije, biće preuzeto i instalirano sljedeće: Windows podsistem za Linux (WSL 2) Ako ga već nemate, u nekim slučajevima će vam Docker čarobnjak dati direktnu vezu za preuzimanje najnovijeg WSL 2 paketa sa Microsoftove web stranice. Samo slijedite čarobnjaka i ponovo pokrenite računar kada se to od vas zatraži.

Nakon ponovnog pokretanja, Docker Desktop će se pokrenuti i prikazati ugovor o licenci. Proizvod je besplatan za ličnu upotrebu i mala preduzećaMeđutim, za velike organizacije, preporučljivo je pregledati uslove licence kako bi se osiguralo da odgovaraju vrsti upotrebe i veličini kompanije.

Da biste provjerili da li je sve spremno, možete otvoriti PowerShell i pokrenuti testnu sliku poput hello-worldDocker će preuzeti sliku iz Docker Huba i pokrenuti kontejner, prikazujući poruku potvrde ako je sve prošlo dobro. Ovo osigurava da mehanizam radi, da ima internetsku vezu i da su slike ispravno preuzete.

Docker na Windowsu

Instaliranje Docker Engine-a na Windows Serveru

Kada govorimo o serverskim okruženjima, posebno u produkciji, nije uobičajeno koristiti Docker Desktop, već instalirati... Docker engine kao Windows servisU Windows Serveru 2016, 2019, 2022 ili 2025, Microsoft pruža skripte koje uveliko olakšavaju ovaj proces.

Na primjer, preporučena metoda u Windows Serveru 2022 je otvaranje PowerShell sesije s administratorskim privilegijama i preuzimanje službenog instalacijskog skripta iz Microsoftovog repozitorija na GitHubu. To se postiže naredbom koja koristi Invoke-WebRequest da preuzmete skriptu install-docker-ce.ps1 i sačuvate je na disku.

Nakon preuzimanja, jednostavno pokrenite skriptu iz iste konzole. Skripta će se pobrinuti za ostalo. Instalirajte Docker CERegistrujte servis u Windowsu, konfigurišite zadanu mrežu kontejnera i ponovo pokrenite host da biste dovršili operaciju. Kada se ponovo prijavite, Docker servis će biti pokrenut.

Baš kao i u Linuxu, instalaciju možete validirati pokretanjem jednostavnog kontejnera poput hello-world. Ovo vam omogućava da vidite da demon ispravno reagira i da se kontejneri mogu kreirati. Od tog trenutka nadalje, Docker se ponaša kao i bilo koja druga sistemska usluga, kojom se može upravljati iz services.msc ili pomoću PowerShell cmdlets.

Vrijedi naglasiti da, za proizvodna opterećenjaMicrosoft i Docker ne preporučuju korištenje Docker Desktopa na Windows Serveru. Dizajniran je za razvoj, a ne za servere. Na serverima biste trebali koristiti Docker engine instaliran kao servis, bilo Docker EE/CE ili runtime koji se koristi za Windows kontejnere.

Konfigurisanje Docker Engine-a na Windowsu pomoću daemon.json datoteke

Na Windows Serveru, najčišći način za fino podešavanje ponašanja Docker daemona je korištenje JSON konfiguracijske datoteke pod nazivom daemon.json, koji se nalazi u putanji C:\ProgramData\Docker\config\. Ako ne postoji, možete ga sami kreirati poštujući JSON format.

U ovoj datoteci možete podesiti veliki broj parametara. Na primjer: opcije mreže, pohrane, evidentiranja i DNS-a Ovo uključuje TLS konfiguraciju, mirror-e registra i sigurnosne grupe za pristup Docker socketu. Ne morate popuniti sve ključeve. Jednostavno uključite one koje želite prilagoditi, a ostali će naslijediti zadane vrijednosti.

U okruženjima koja zahtijevaju end-to-end enkripciju, možete omogućiti opciju "tlsverify" i odrediti putanje do CA certifikata, certifikata servera i privatnog ključa koristeći "tlscacert", "tlscert" i "tlskey". S ovom konfiguracijom, daemon će prihvatati samo sigurne veze na definiranom portu. Ovo je ključno kada se Docker izlaže drugim mašinama na mreži.

Pored konfiguracijske datoteke, postoji i opcija za podešavanje parametara daemona direktnim mijenjanjem Docker servis Korištenje uslužnog programa `sc config` i dodavanje zastavica u binpath. Manje je fleksibilno od `daemon.json`, ali i dalje korisno u određenim slučajevima ili okruženjima gdje je poželjnije zadržati svu konfiguraciju unutar samog servisa.

Lokalni server sa Dockerom na Windowsu

Umrežavanje, sigurnost i proxying u Dockeru za Windows

Mrežni aspekt korištenja Dockera u Windowsu ima svoje nijanse. Podrazumevano, mehanizam kreira NAT mreža Za kontejnere, ovo im omogućava pristup internetu putem hosta i izlaganje portova vanjskom svijetu korištenjem mapiranja portova. Međutim, ponekad nije poželjno kreirati ovu mrežu prema zadanim postavkama, na primjer u visoko kontroliranim okruženjima ili kada želite sami upravljati svim mrežama.

Da biste onemogućili kreiranje zadane NAT mreže, možete postaviti parametar "bridge" na "none" u daemon.json. Od tada ćete morati definirati mreže koje će kontejneri koristiti, bilo pomoću `docker network` naredbi ili putem orkestratora.

Što se tiče pristupa daemonu, pri lokalnom radu na Docker hostu, naredbe se obično šalju putem imenovana cijev U Windowsu, po dizajnu, samo članovi administratorske grupe imaju pristup tom cjevovodu. Ako želite delegirati upravljanje kontejnerom određenoj grupi, možete koristiti parametar "group" u konfiguraciji da biste odredili naziv sigurnosne grupe koja će imati dozvolu za komunikaciju s mehanizmom.

U korporativnim okruženjima, također je uobičajeno da se mašine povezuju na internet putem HTTP/HTTPS proxyDa bi docker pull ili docker search ispravno radili iza proxyja, potrebno je definirati varijable okruženja HTTP_PROXY i/ili HTTPS_PROXY na nivou mašine.

Za napredno umrežavanje, Windows nudi naredbe poput Get-HNSNetwork i Remove-HNSNetwork za upravljanje mrežama koje su kreirali Docker i Windows Host Networking Subsystem. Ovo je posebno korisno prilikom čišćenja servera ili rješavanja konflikata konfiguracije koji su ostali nakon deinstalacija ili agresivnih promjena.

Pokretanje Windows i Linux kontejnera na istom hostu

Na tehničkom nivou moguće je kombinovati Windows i Linux kontejneri na istoj mašini, ali vrijedi razumjeti implikacije. Docker Desktop omogućava prebacivanje između Windows i Linux načina rada, a Windows Server nudi Hyper-V izolaciju, što omogućava Linux kontejnere putem lagane virtualizacije.

Uprkos tome, sa operativnog stanovišta, preporučuje se da se hostovi drže odvojeno prema vrsti kontejnera koji će pokretati. Administratoru je mnogo praktičnije da radi sa serverima koji pokreću isključivo Linux kontejnere ili isključivo Windows kontejnere, budući da... osnovne slike, alati za otklanjanje grešaka i obrasci korištenja Oni se prilično razlikuju između ta dva svijeta.

Za Windows kontejnere postoji nekoliko službenih Microsoftovih osnovnih slika objavljenih u repozitorijima kao što su Docker Hub ili Microsoft Container Registry (MCR). Među njima su:

  • Nano Server (najlakši, idealan za moderne aplikacije).
  • Serversko jezgro (dizajnirano za serverske aplikacije).
  • Windows i Windows Server (najkompletniji, s potpunom API kompatibilnošću).

Kada pokrenete kontejner zasnovan na Server Core-u, vidjet ćete da je zadana ljuska PowerShell, a ne bash. Ovo u početku može biti zbunjujuće, posebno zato što upiti kontejnera i hosta izgledaju vrlo slično, a trenutak nepažnje mogao bi vas dovesti do pokretanja opasnih naredbi na pogrešnom mjestu. Naredba `hostname` unutar kontejnera će vam pokazati identifikator kontejnera, a ne identifikator fizičkog servera ili VM-a.

Po dizajnu, kontejneri su namijenjeni da budu jednokratne i zamjenjiveAdministracija se fokusira na kreiranje, pokretanje i brisanje kontejnera, a ne na njihovo "upravljanje" kao što su to dugoročne virtuelne mašine. Svaka trajna konfiguracija treba da bude u slici ili izvan kontejnera (volumeni, eksterna konfiguracija), jer će sve što ručno promijenite unutar kontejnera biti izgubljeno kada se uništi.

Node.js web server sa vrućim ponovnim punjenjem

Počevši sa "Hello World" u konzoli, možete pretvoriti svoj primjer u mali HTTP server Korištenjem Expressa, definiranjem app.get na ruti "/" koja odgovara običnim tekstom i osluškuje port 3000, već imate funkcionalno web okruženje.

U docker-compose.yml, možete prilagoditi startup naredbu na nešto poput `sh -c "npm install; npm start"` tako da kontejner prvi put instalira zavisnosti, a zatim pokrene nodemon sa app.js. Osim toga, ovo je vrijeme za mapiranje porta 3000 kontejnera na port 3000 hosta pomoću ključa `ports`, tako da mu možete pristupiti iz vašeg preglednika na http://localhost:3000 (ili IP adrese virtuelne mašine ako koristite Docker Toolbox ili udaljeni Linux host).

Ako zatim proširite logiku app.js-a da prihvata dinamičke rute, na primjer "/:name" i vraća "Hello" "Moći ćeš vidjeti kako Svaka promjena u kodu se odmah odražava bez potrebe za ponovnim kreiranjem slike ili ručnim ponovnim pokretanjem kontejnera. To je upravo isto ponašanje kao LiveReload, ali enkapsulirano u prenosivoj slici koju možete sutra instalirati na Linux server ili u oblak.

Ovaj obrazac rada sa volumenima i nodemonom može se primijeniti i na druge jezike i frameworkove. Zanimljivo je da se okruženje za izvršavanje nalazi unutar kontejnera. Vaš Windows sistem djeluje samo kao domaćin, što znatno smanjuje konflikte sa zavisnostima i verzijama biblioteka iz drugih projekata.

Za složenije projekte, docker-compose.yml može deklarirati više servisa (bazu podataka, keš memoriju, red poruka itd.) i povezati ih zajedno. Na Windowsu, sve dok koristite Docker Desktop sa WSL 2, cijelo ovo okruženje će se i dalje ponašati gotovo identično kao i izvorni Linux sistem.

Tipična upotreba Dockera na Windows Serveru sa IIS-om i starijim aplikacijama

Pored razvoja, mnoge kompanije žele iskoristiti Docker za enkapsulirati starije Windows aplikacije koji koriste IIS, klasični ASP ili starije verzije .NET-a. U tim slučajevima, uobičajeno je početi s osnovnom slikom Windows Server Core-a s unaprijed instaliranim IIS-om.

Takav kontejner se može kreirati pomoću Docker-a, tako što se navede odgovarajuća IIS slika, naziv kontejnera, mapiranje portova (npr. 8081:80 za izlaganje internog porta 80 na portu hosta 8081) i montira folder na hostu, kao što je c:\inetpub\wwwroot, za smještaj datoteka aplikacije tamo.

Ako pokrenete kontejner u interaktivnom režimu, ući ćete u PowerShell sesiju unutar IIS servera kontejnera. Odatle možete pregledati logove, pregledati konfiguracije i općenito razumjeti kako se vaša aplikacija ponaša u ovom novom okruženju. Kada želite zaustaviti sesiju bez gašenja kontejnera, jednostavno koristite `exit` ili ga zaustavite sa hosta.

Ako vam je potrebno da aplikacija nastavi raditi u pozadini, najbolji pristup je pokrenuti kontejner sa zastavicom `-d` kako bi radio u "odvojivom" načinu rada. Od tada nadalje, njime upravljate kao i bilo kojim drugim kontejnerom: `docker ps` za popis njegovog sadržaja, `docker logs` za pregled logova, `docker stop` za gašenje i `docker rm` za brisanje kada vam više nije potreban.

Kreiranje prilagođenih slika za Windows funkcioniše potpuno isto kao i u Linuxu. Definišete Dockerfile sa instrukcijama za kopiranje, instalaciju i konfiguraciju, gradite sliku pomoću `docker build`, a zatim je označavate i objavljujete u privatnom registru ako ćete je koristiti na više servera. Jedina praktična razlika je u tome što Windows prihvata i kose crte naprijed i obrnute kose crte u putanjama, iako je najbolje biti dosljedan kako bi se izbjegla zabuna.

Deinstalirajte Docker i izvršite potpuno čišćenje na Windowsu

Ako ikada budeš morao/la Potpuno uklonite Docker Prilikom rada na Windows 10 ili Windows Server 2016/2019 računaru, važno je slijediti određeni redoslijed. To će spriječiti ostavljanje neželjenih datoteka ili gubitak podataka koje želite zadržati.

Prvi korak je osigurati da nijedan kontejner nije pokrenut. Možete ostaviti bilo koji aktivni swarm pomoću `docker swarm leave --force`, a zatim zaustaviti sve pokrenute kontejnere kombinacijom `docker ps --quiet` i `docker stop`. Nakon toga, možete koristiti `docker system prune --all --volumes` ako želite agresivno ukloniti kontejnere, slike, mreže i volumene.

U Windowsu 10, deinstalacija Docker Desktopa se vrši iz Postavke > Aplikacije > Aplikacije i funkcijePotražite "Docker" na listi, odaberite ga i kliknite na Deinstaliraj. Na Windows Serveru 2016, ako ste instalirali Docker pomoću PowerShell modula kao što je DockerMsftProvider, proces deinstalacije uključuje korištenje Uninstall-Package i Uninstall-Module za uklanjanje i Docker paketa i provajdera.

Nakon što se softver deinstalira, dobra je ideja ukloniti HNS mreže povezane s Dockerom pomoću sistemskih naredbi. Također, izbrišite mapu C:\ProgramData\Docker pomoću `Remove-Item -Recurse` kako biste uklonili sve preostale podatke programa. Ovo će osloboditi prostor koji su prethodno zauzimale slike kontejnera i slojevi.

Na mnogim sistemima, instaliranje Dockera automatski je omogućilo opcionalne Windows funkcije kao što su Kontejneri i, u nekim slučajevima, Hyper-V. Ako više ne namjeravate koristiti kontejnere na tom računaru, možete onemogućiti ove funkcije iz Kontrolne ploče u sustavu Windows 10 (Programi i funkcije > Uključivanje ili isključivanje funkcija sustava Windows) ili pomoću opcije Remove-WindowsFeature Containers / Hyper-V u sustavu Windows Server.

Nakon što završite ove korake, najbolji postupak je ponovo pokrenuti sistem koristeći `Restart-Computer -Force` iz komandne linije s privilegijama. Ovo će osigurati da se sve promjene funkcija i usluga ispravno primjenjuju i da vaš računar ostane u čistom stanju.