Jste v Docker Windows Images noví? Pracujete v současné době v obchodě se systémem Windows a chcete se dozvědět o sestavení Dockeru pro obrázky kontejnerů? Jste na správném místě. Nejlepší způsob, jak se dozvědět o něčem novém, je pomocí docker build
a docker build "tag"
příkazy!
V tomto článku se naučíte, jak vytvořit svůj první obrázek Windows Docker ze souboru Dockerfile pomocí docker build
příkaz.
Začněme!
Vysvětlení obrázků kontejnerů Docker
Po celá léta bylo jediným způsobem, jak testovat nebo provádět vývoj na více operačních systémech (OS), mít několik vyhrazených fyzických nebo virtuálních počítačů vytvořených s verzí OS dle vašeho výběru. Tato metodika vyžadovala více hardwaru a režie k poskytování nových strojů pro každý software a specifikaci OS.
V dnešní době však používání obrazů kontejnerů Docker vzrostlo částečně kvůli popularitě architektury mikroslužeb. V reakci na nárůst popularity Dockeru začal Microsoft veřejně podporovat obrázky Docker pro několik vlajkových produktů na své stránce Docker Hub. Dokonce přidali nativní podporu pro obrázky pro Windows jako funkci produktu ve Windows 10 a Windows Server 2016!
Obraz Dockeru je spuštěn v kontejneru pomocí Docker Engine. Docker obrazy mají mnoho výhod, jako je přenositelnost (použitelná pro více prostředí a platforem), přizpůsobitelné a vysoce škálovatelné. Jak můžete vidět níže, na rozdíl od tradičních virtuálních strojů běží Docker engine na vrstvě mezi jádrem hostitelského OS a izolovanými aplikačními službami, které jsou kontejnerizovány.
Sestavení a obrázky Dockeru
docker build
Příkaz lze využít k automatizaci vytváření bitové kopie kontejneru, přijetí praxe DevOps typu kontejner jako kód a integraci kontejnerizace do vývojového cyklu vašich projektů. Dockerfiles jsou jednoduše textové soubory, které obsahují pokyny k sestavení používané Dockerem k vytvoření nového obrázku kontejneru, který je založen na existujícím obrázku.
Uživatel může určit základní obraz a seznam příkazů, které se mají spustit, když je obraz kontejneru nasazen nebo poprvé spuštěn. V tomto článku se dozvíte, jak vytvořit bitovou kopii dockeru pro Windows z Dockerfile pomocí kontejneru Windows.
Tento proces má několik výhod oproti použití předem vytvořeného obrazu kontejneru:
- Můžete znovu vytvořit bitovou kopii kontejneru pro několik verzí systému Windows – což je skvělé pro testování změn kódu na několika platformách.
- Budete mít větší kontrolu nad tím, co je v kontejneru nainstalováno. To vám umožní udržet velikost kontejneru na minimu.
- Z bezpečnostních důvodů možná budete chtít zkontrolovat, zda kontejner neobsahuje chyby zabezpečení, a na základní bitovou kopii použít zesílení zabezpečení
Předpoklady/požadavky
Tento článek je návodem, jak se naučit, jak vytvořit image Docker pomocí Dockerfile. Pokud chcete pokračovat, ujistěte se, že máte splněny následující předpoklady.
- Nainstalován Docker pro Windows. Ve svém prostředí budu používat Docker Community Edition (CE) verze 2.1.0.4.
- Pro stahování obrázků Docker je nutný přístup k internetu
- Operační systém Windows 10+ (pro tento výukový program se používá verze 1709)
- Vnořená virtualizace povolena
- 5 GB volného místa na disku na místním počítači
- PowerShell 5.0+
- Tento kurz používá Visual Studio Code IDE. Neváhejte však použít jakékoli IDE, které byste preferovali.
Poznámka:Při instalaci Dockeru nezapomeňte povolit konfiguraci kontejnerů Windows.
Příprava
Nejprve budete potřebovat složku pro uložení všech obrázků Docker a kontejnerů, které z těchto obrázků vytvoříte. Chcete-li tak učinit, otevřete Powershell nebo terminál cmd (v tomto článku budete PowerShell používat) a vytvořte nový adresář s názvem C:\Containers.
Jakmile je složka vytvořena, přejděte do tohoto adresáře. Tím se aktuální pracovní adresář konzoly přesune do C:\Containers na výchozí nastavení všech stahování do tohoto adresáře.
PS51> mkdir C:\Containers
PS51> cd C:\Containers
V tomto článku získáte náskok. Většina souborů pro práci v tomto projektu je již k dispozici. Jakmile je složka vytvořena, zkopírujte soubory potřebné pro tento článek z úložiště Github TechSnips do C:\Containers. složka. Po dokončení se ujistěte, že C:\Containers složka vypadá níže.
Stažení obrazu IIS Windows Docker
Prvním úkolem je stáhnout „šablonu“ nebo základní obrázek. Později si vytvoříte svůj vlastní obrázek Dockeru, ale nejprve potřebujete obrázek, se kterým začnete. Budete stahovat nejnovější IIS a Windows Server Core Images, které jsou vyžadovány pro tento výukový program. Aktualizovaný seznam obrázků lze nalézt na oficiální stránce s obrázky centra Microsoft Docker.
Kontrola aktuálních základních obrázků Docker
Před stažením obrázku z úložiště obrázků si nejprve projdeme aktuální základní obrázky Dockeru, které aktuálně máte ve svém místním systému. Chcete-li to provést, spusťte konzolu PowerShell jako správce a zadejte docker images
. Tento příkaz vrátí všechny obrázky ve vašem lokálním systému.
Jak můžete vidět níže, dostupné obrázky jsou zpočátku prázdné.
PS51> docker images
Stažení základního obrázku
Nyní je čas stáhnout základní obraz IIS z Docker Hub. Chcete-li to provést, spusťte docker pull
Jak je ukázáno níže. Dokončení tohoto procesu může nějakou dobu trvat v závislosti na rychlosti vašeho internetu.
PS51> docker pull mcr.microsoft.com/windows/servercore/iis
Nyní spusťte docker images
a pro tento výukový program byste měli mít k dispozici nejnovější bitovou kopii Microsoft Windows Core IIS.
PS51> docker images
Kontrola souboru Dockerfile
V předchozím kroku jste si pro tento výukový program stáhli existující soubor Dockerfile. Pojďme se nyní podívat na to, co přesně to obnáší.
Otevřete C:\Containers\Container1\Dockerfile soubor ve vašem oblíbeném editoru. Obsah tohoto souboru Dockerfile se používá k definování toho, jak bude obraz kontejneru nakonfigurován v době sestavení.
Vysvětlení toho, co každá část tohoto souboru dělá, můžete vidět v komentářích na řádku.
# Specifies that the latest microsoft/iis image will be used as the base image
# Used to specify which base container image will be used by the build process.
# Notice that the naming convention is "**owner/application name : tag name**"
# (shown as microsoft/iis:latest); so in our case the owner of the image is
# Microsoft and the application is IIS with the "latest" tag name being used
# to specify that you will pull the most recent image version available.
FROM microsoft/iis:latest
# Copies contents of the wwwroot folder to the inetpub/wwwroot folder in the new container image
# Used to specify that you want to copy the WWWroot folder to the IIS inetpub WWWroot
# folder in the container. You don't have to specify the full path to your local
# files because docker already has the logic built-in to reference files and folders
# relative to the docker file location on your system. Also, make note that that
# docker will only recognize forward slashes for file paths - since this is a
# Windows based container instead of Linux.
COPY wwwroot c:/inetpub/wwwroot
# Run some PowerShell commands within the new container to set up the image
# Run the PowerShell commands to remove the default IIS files and create a new
# application pool called TestPool
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.htm -force
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.png -force
RUN powershell Import-Module WebAdministration
RUN powershell New-WebAppPool -Name 'TestPool'
# Exposes port 80 on the new container image
# Used to open TCP port 80 for allowing an http connection to the website.
# However, this line is commented out, because the IIS container has this port
# already open by default.
#EXPOSE 80
# Sets the main command of the container image
# This tells the image to run a service monitor for the w3svc service.
# When this is specified the container will automatically stop running
# if the w3svc service stopped. This line is commented out because of the
# IIS container already has this entrypoint in place by default.
#ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]
Vytvoření nového obrázku dockeru
Máte připravený soubor Dockerfile a stažený základní obraz IIS. Nyní je čas vytvořit svůj nový obraz Docker pomocí souboru Docker.
Chcete-li vytvořit nový obrázek, použijte docker build "tag"
příkaz. Tento příkaz vytvoří obrázek. V tomto článku níže vidíte, že také používáte -t **
možnost, která nahrazuje část „tag“. Tato možnost vám umožňuje dát vašemu novému obrázku popisný název tagu a také odkazovat na soubor Docker zadáním cesty ke složce, kde se nachází.
Níže vidíte příklad, jak zajistit, aby byla konzola v adresáři C:\Containers, a poté vytvořit nový obraz z Dockerfile v C:\Containers\Container1 adresář.
PS51> cd C:\Containers
PS51> docker build -t container1 .\Container1
Po spuštění můžete vidět průběh příkazu, jak prochází každou instrukcí v souboru dockeru řádek po řádku:
Po dokončení byste nyní měli mít nový obrázek Docker!
Nyní spusťte docker images
pro zobrazení dostupných obrázků. Níže můžete vidět příklad kontejneru1 obrázek vytvořen.
Poznámka:
docker build —help
command je užitečný parametr pro zobrazení podrobných informací o spuštěném příkazu docker.
Spuštění kontejneru Docker
V tomto okamžiku byste měli vytvořit nový obrázek. Je čas roztočit kontejner pomocí tohoto obrázku. Chcete-li vyvolat nový kontejner, použijte docker run
příkaz.
docker run
příkaz vyvolá nový kontejner Docker založený na container1 obrázek, který jste vytvořili dříve. Příklad toho můžete vidět níže.
Všimněte si, že -d
je použit parametr. To říká běhovému modulu dockeru, aby spustil bitovou kopii v odpojeném režimu a poté skončil, když se ukončí kořenový proces používaný ke spuštění kontejneru.
Když docker run
dokončí, vrátí ID vytvořeného kontejneru. Níže uvedený příklad zachycuje toto ID do $containerID
proměnná, abychom na ni mohli později snadno odkazovat.
PS51> $containerID = docker run -d container1
PS51> $containerID
Jakmile je kontejner vyvolán, spusťte nyní docker ps
příkaz. Tento příkaz vám umožňuje zjistit, které kontejnery jsou aktuálně spuštěny pomocí každého obrázku. Všimněte si níže, že běžící obrázek je automaticky vygenerován přezdívkou (busy_habit v tomto případě). Tato přezdívka se někdy používá místo ID kontejneru ke správě kontejneru.
Spuštění kódu uvnitř kontejneru Docker
Nový kontejner je vytvořen z nového obrázku, který jste právě vytvořili. Začněme nyní skutečně používat tento kontejner ke spuštění kódu. Spouštění kódu uvnitř kontejneru Docker se provádí pomocí docker exec
příkaz.
V tomto příkladu spusťte docker exec
k zobrazení výstupu PowerShellu pro Get-ChildItem
příkaz v kontejneru pomocí syntaxe příkazu níže. Tím zajistíte, že pokyny v souboru Dockerfile k odstranění výchozích souborů IIS byly úspěšné.
PS51> docker exec $containerID powershell Get-ChildItem c:\inetpub\wwwroot
Níže můžete vidět, že jediný soubor, který existuje, je index.html což znamená, že výchozí soubory byly odstraněny.
Nyní spusťte ipconfig
příkaz v kontejneru, abyste získali místní IP adresu obrázku kontejneru, abyste se mohli pokusit připojit k webu IIS.
PS51> docker exec $containerID ipconfig
Níže můžete vidět ipconfig
byl spuštěn v kontejneru, jako by běžel na vašem místním počítači a vrátil všechny informace IP.
Kontrola webu IIS
Nyní je čas odhalit plody vaší práce! Je čas zjistit, zda server IIS spuštěný v kontejneru Docker správně zobrazuje stránku index.html.
Otevřete prohlížeč a vložte adresu IP4 nalezenou pomocí ipconfig
do adresního řádku. Pokud je vše v pořádku, měli byste vidět Ahoj světe!! zprávu jako níže.
Kontrola historie Docker
Jeden užitečný příkaz, který lze použít při práci s kontejnery Docker, je docker history
příkaz. Ačkoli to nemusí nutně souviset se samotným vytvořením obrázku nebo kontejneru, docker history
je užitečný příkaz, který vám umožňuje zkontrolovat změny provedené v obrazu kontejneru.
PS51> docker history container1
Níže můžete vidět tuto docker history
vrátí veškerou aktivitu Dockerfile a PowerShell provedenou v kontejneru1 kontejner, se kterým jste pracovali.
Vyčištění běžících obrázků dockeru
Níže uvedené kroky se používají k vyčištění všech zastavených kontejnerů běžících na vašem počítači. Tím se uvolní místo na disku a systémové prostředky.
Spusťte docker ps
příkaz k zobrazení seznamu kontejnerů běžících na vašem systému:
PS51> docker ps
Nyní zastavte běžící kontejnery pomocí docker stop
příkaz:
PS51> docker stop <image nick name: busy_haibt in my case>
PS51> docker stop <image nick name: unruffled_driscoll in my case>
Nakonec můžete zastavené kontejnery trvale odstranit pomocí docker system prune
příkaz.
PS51> docker system prune
Další čtení
- Vytvoření prvního kontejneru Docker Windows Server Container
- Jak spravovat svazky Dockeru v systému Windows