4.2 Manage Windows containers


4.2.1 Manage Windows containers by using Docker CLI and PowerShell for Docker

4.2.2 Manage container networking

4.2.3 Manage container data volumes

4.2.4 Manage Resource Control

4.2.5 Create new container images using Dockerfile

4.2.6 Manage container images using DockerHub repository for public and private scenarios

4.2.7 Manage container images using Microsoft Azure


4.2.1 Manage Windows containers by using Docker CLI and PowerShell for Docker

Når man kjører en container med -it havner man i et interkativt PowerShell vindu. For å gå ut av det kan man skrive:

Exit

Da stopper containeren, men den blir ikke borte. Kjører man run uten -lt vil containeren kjøre i bakgrunnen.

Man kan se alle containere med:

Docker.exe ps -a

Og man kan starte en stopper container:

Docker.exe start ContainerIdOrName

For å koble til en container som kjører:

Docker.exe attach ContainerIdOrName

Dersom man har gjort endringer på en container kan man lagre den som et eget container image i Docker Hub:

Docker.exe Commit ContainerIdOrName username/imagename:tag

De er kun endringene som blir lagret, ikke hele base imaget. Dvs. at hvis andre skal kjøre dine containere må de også ha base image installert.

Administrere Docker med PowerShell

# Lister alle containere
Get-Container

# Starter en container
Start-Container a92655973a18

# Stopper en container
Stop-Container a92655973a18

# Attach to a container
Enter-ContainerSession a92655973a18

# Commit change to an image (save container)
ConvertTo-ContainerImage -ContainerIdOrName containerid -Repository username/imagename -Tag imageversjon

# Fjerner en container
Remove-Container a92655973a18

NB. PowerShell modulen for Docker er deprecated og kan ikke lengre brukes, men er fortsatt eksamensrelevant.

4.2.2 Manage container networking

Containere kan nå lokalt nettverk takket være en NAT tjeneste Docker kjører. Da fungerer Docker hosten som en ruter mellom containere og lokalt nettverk. NAT konfigureres første gang Dockerd engine kjører, og oppretter et standard subnett som er 172.25.112.0/20. Man kan manuelt spesifisere en annen nettverksadresse eller slå av NAT.

For å endre konfigurasjonen redigerer man filen C:\ProgramData\docker\config\daemon.json. For å sette en annen nettverksadresse oppgir man:

{ "fixed-cidr": "192.168.0.0/24" }

For å slå av NAT:

{ "bridge": "none" }

Port mapping

Port mapping kan brukes til å binde sammen en port på hosten med en port på containeren. Man kan f.eks. sende webforespørsler mot port 80 på hosten til port 80 på containeren.

Docker.exe run -lt -p 80:80 microsoft/iis

Ser her at man når IIS webserver, som kjører på container og ikke på hosten.

Transparent nettverk

Man kan velge å konfigurere et transparent nettverk, dvs. at containere er på samme subnett som hosten.

# Lag nettverket
Docker.exe network create -d transparent trans

# Hvis man ikke har noe DHCP på nettverket kan man sette statisk ip
Docker.exe network create -d transparent --subnet=10.0.0.0/24 --gateway=10.0.0.1 trans

# List ut alle nettverk
Docker.exe network list

# Start en container med transparent nettverk
Docker.exe run --network=trans microsoft/iis

# Start container med statisk ip
Docker.exe run --network=trans --ip=10.0.0.59 --dns=10.0.0.5 microsoft/iis

4.2.3 Manage container data volumes

Man kan konfigurere volum for å dele data mellom host og container.

Docker.exe run -v C:\appdata microsoft/iis

# Man kan bruke denne kommandoen for å sjekke hvilken mappe den blir mappet mot på hosten
Docker.exe inspect 6f7fe1c0258e

For å gjenbruke et volum kan man også spesifisere kilden:

Docker.exe run -v D:\Source:C:\appdata microsoft/iis

Volumene er opprettet med lese og skrive tillatelse. For å opprette et volum med kun lesetillatelse kan man endre til:

Docker.exe run -v D:\Source:C:\appdata:ro microsoft/iis

For å legge til et volum på en eksisterende container må man lagre den og så opprette en ny på imaget man lagret.

4.2.4 Manage Resource Control

Når man oppretter en container blir den tildelt tre IDer, som alle kan brukes i kommandoer:

  • Long UUID: 32-byte hexadecimal string representert med 64 tegn: a5ace9034de1be3c5c9b25c3d4cec52f7481f4bb02a287121e60fb460947ca71
  • Short UUID: Første 6 bytes av long UUID, representert med 12 tegn: a5ace9034de1
  • Name: Tilfeldig generert navn, f.eks. angry_almeida

Man kan også oppgi navn manuelt slik:

Docker.exe run -it microsoft/nanoserver powershell --name Nano1

Begrense minnebruk

Man kan angi hvor mye minne en container får bruke med ulike parameter:

  • -m (eller --memory): tall + b, k, m eller g
  • -memory-swap: Totalt minne inkl. virtuelt minne, tall + b, k, m eller g
  • -memory-reservation: Soft minnegrense, spesifiser hvor mye minne som er reservert til containeren
  • -kernel-memory: Hvor mye av minnet satt med -m som kan brukes til kernel minne
  • -oom-kill-disable: Forhindrer kernel fra å drepe container prosesser når det er lite minne, ikke bruk denne uten -m parameteret

Begrense CPU bruk

Man kan angi hvor mye cpu en container får bruke med ulike parametre:

  • -c (eller --cpu-shares): Tall fra 0 til 1024, dette tallet er en vektet prioritering mellom containere
  • -cpuset-cpus: Spesifiserer hvilken CPUer containeren kan bruke
  • -cpuset-mems: Spesifiserer hvilke noder på en NUMA host som containeren kan bruke

4.2.5 Create new container images using Dockerfile

Man kan lagre containere man har gjort endringer på, men anbefalt metode er å lage nye images fra scratch ved å lage en dockerfil. Det er en tekstfil som heter dockerfile, og er egentlig bare en samling med kommandoer.

# install dhcp
FROM microsoft/windowsservercore
RUN powershell -command Install-WindowsFeature Dhcp -IncludeManagementTools
RUN powershell -configurationname microsoft.powershell -command add-dhcpserverv4scope -state active -activatepolicies $true -name scopetest -startrange 10.0.0.100 -endrange 10.0.0.200 -subnetmask 255.255.255.0
RUN md boot
COPY ./bootfile.wim c:/boot/
CMD powershell
  • From: Hvilket image skal man bygge fra
  • Run: Åpner en powershell sesjon og kjører Install-WindowsFeature, lager et DHCP scope, og lager en mappe kalt boot
  • Copy: Kopierer filen bootfile.wim til mappen boot
  • CMD: Åpner en PowerShell sesjon når imaget er ferdig

Man kjører så filen slik, forutsatt at man står i samme mappe som Dockerfile:

Docker.exe build .

Når man har opprettet imaget kan man opprette containere fra det med ID som man får fra build kommandoen.

docker run -it 79defeec995b powershell

4.2.6 Manage container images using DockerHub repository for public and private scenarios

DockerHub er standard repository. Når man kjører en pull er det her det hentes fra om man ikke har spesifisert et annet repository. For å laste opp til DockerHub må man først registrere seg på: https://hub.docker.com

Man må så logge inn:

Docker.exe login

Og man kan så pushe images til DockerHub:

Docker.exe push username/imagename

Imaget havner autoamtisk i ditt public repository, men det er også mulig å ha private repository. F.eks. til sensitive/hemmelige utviklingsprosjekter. Gratis konto er begrenset til ett privat repository, mens de som betaler kan ha flere.

Man kan søke blant images:

Docker.exe search microsoft
Docker.exe search username

4.2.7 Manage container images using Microsoft Azure

Ved å deploye en Windows Server 2016 VM i Azure kan man opprette og administrere Docker images på samme måte som man gjør lokalt. Azure tilbyr også Azure Container Service, som lar en opprette, konfigurere og administrere klynger med virtuelle maskiner som er konfigurert til å kjøre container-baserte applikasjoner. Merk at Azure er en abonnementstjeneste og man betaler per måned for ressursene man bruker.

results matching ""

    No results matching ""