Docker introduktion, første del

Her er første del af min introduktion til Docker. Den vil fortæller dig hvad Docker er, hvorfor det er værd at lære samt hvordan man kommer i gang med Docker. Du har nok brug for noget meget basal Linux viden for at følge med.

Hvad er Docker

Docker er en virtualiserings teknologi der er beslægtet med traditionelle virtualiserings løsninger som VMware men til forskel fra dem virtualisere Docker ikke maskiner men kun software (styresystemet).

En Docker container kører på samme styresystem og har som regel kun applikationerne der bliver kørt separat. Dette gør at de er nemme at skabe via scripts, kan nemt flyttes imellem servere samt de kræver færre ressourcer. Docker har selv på deres hjemmeside en nærmere gennemgang.

Hvorfor Docker

Nu tænker du måske hvorfor man bør lære Docker. Ud over de rent tekniske spændende muligheder er Docker en blevet en vigtig del af professionel IT, især med DevOps bølgen bliver mere og mere IT flyttet til Docker. Uanset om man er udvikler eller systemadministrator vil man hvis man arbejder med IT på et seriøst niveau ofte komme i kontakt med Docker og man bør så minimum kende Docker godt nok til at fortage et kvalificeret fravalg det hvis det ikke passer til ens behov.

Den mest basale tekniske årsag til at jeg godt kan lide Docker er at man i stedet for at rulle ens applikationer ud på en mængde forskellige servere, så laver man konfigurationen en gang man derefter kan teste. Når man er klar er det præcist den installation/konfiguration der bliver rullet ud i produktionsmiljøet. Det er også en stor fordel at alle skridt i denne proces meget nemt kan automatiseres.

Hvilken Docker skal jeg bruge

Der findes en del forskellige officielle udgaver af Docker. De to vigtigste er Docker CE der er open source (samt gratis) og Docker EE (Enterprise) der koster en del og kun er relevant for større løsninger. Docker bliver tit opdateret og du bør følge med opdateringerne. Docker CE er som sagt gratis og open source, det er den som denne introduktion omhandler. Den findes i 2 udgaver: Hvis du kører linux eller windows server (2016 eller 2019) kan du kører docker direkte. På Mac og Windows skal du bruge en virtuel maskine til at kører docker, det kan være virtualbox (gratis) eller hyperv (indbygget i windows 10 pro).

Hvis du installerer på Linux, bør du hente Docker direkte fra www.docker.com, brug ikke pakken i din Linux distribution da den tit ikke er fuldt opdateret.

Installation af Docker

Hvis du har windows 10 pro, kan du hente Docker i Microsofts app store hvilket er dejligt nemt. Denne version bruger Microsofts virtualiserings løsning hyperV der ikke er tilgængelig på windows 10 home så i det tilfælde skal du installere [Docker toolbox] (https://docs.docker.com/toolbox/overview/) hvilken bruger virtualbox. Det er ikke lige så lækkert som windows 10 pro løsningen men virker udmærket. Desværre bruger virtualbox NAT så i stedet for at tilgå dine Docker containers ved http://localhost skal du bruge IP-adressen http://192.168.99.100

På en Mac skal du [hente Docker for Mac] (https://www.docker.com/docker-mac).

Docker på Windows

Windows kan både kører containers med Linux og Windows som styresystem, i denne intro vil jeg dog kun beskæftige mig med Linux containers da det er det mest udbredte, selv i Windows miljøer. Docker toolbox installationen er rigmelig ligeud af landevejen hvor du bare klikker next i installeren.

Docker på Linux

På Linux er den smarteste måde at installere Docker på at kører deres automatiske installations script med følgende kommando:

curl -sSL https://get.docker.com/ | sh
sudo sh get-docker.sh

docker setup

Derefter skal du kører følgende kommando så du kan kører docker som almindelig bruger:

sudo usermod -aG docker DitBrugerNavn

docker som ikke root bruger

Start en basal container

Nu hvor du har installeret Docker kan vi starte med et simpelt eksempel. Nemt en container med web serveren nginx. Den kan du hente og kører med kommandoen:

docker container run -publish 80:80 nginx

docker som ikke root bruger

Det downloader et nginx web server image fra dockerhub der er en central lokation for Docker images, starter det som en container og fortæller at det skal tillade trafik på port 80. Forskellen på et Docker image og en Docker container er at image er beskrivelsen af hvad der skal kører og containeren er det kørende Docker program.

Nu kan du besøge http://localhost (eller http://192.168.99.100 hvis du bruger Docker toolbox på Windows eller Mac) og du ser dens standard website.

nginx

Du kan stoppe Docker containeren igen ved at trykke control – c

Hvis du i stedet skriver

docker container run --detach -publish 80:80 nginx

vil din container nu kører i baggrunden så du kan fortsætte med at indtaste kommandoer.

Du kan nu skrive docker container ls for at se de containers der kører.

Du kan stoppe den ved at skrive docker container stop ID, hvor ID er dens id nummer fra overstående kommando.

Du kan skrive docker container ls -a for at se containers du har i systemet der ikke kører i øjeblikket.

Hvis du ikke vil bruge id’et til at styre din container, kan du give dem et navn (det skal være unikt).

docker container run -publish 80:80 -detach -name webserver

Nu kan du for eksempel stoppe den med

docker container stop webserver

Du kan se logfiler for containeren ved at skrive:

docker container logs webserver

Du kan se hvilke programmer der kører inde i containeren med docker container top

docker kommandoer

Du kan se alle kommandoer ved at skrive docker container –help

Du kan slette en container ved at skrive docker container rm navn (eller id). De skal være stoppet før du kan fjerne den.

Hvad sker der når du kører containers

docker container inspect NAVN vil vise dig al konfiguration for containeren. docker container stats NAVN vil give dig performance information.

docker stats

Log ind I din container

Docker container exec -it NAVN giver dig en shell (kommandolinie) der kører inde i containeren hvor du kan udføre linux kommandoer, som du er vant til.

docker prompt

Det er dog ikke alle containers der indholder en shell (fx nginx), hvis du vil have en shell i disse kan du skrive

docker container run -it -name proxy nginx bash 

hvilket vil give dig kommandolinien. Du kan bruge exec til at gøre det samme med en kørende container.

Kører du en container med en fuld linux distribution vil dette ikke være nødvendigt.

Docker netværk

Docker laver et privat NAT netværk som den skjuler containers bagved. Det vil sige at containers har en anden IP-range end dit normale netværk. Dette er dog ikke noget problem, når du bruger –publish 80:80 fortæller du at trafik på port 80 på hosten skal sendes til port 80 på containeren. Da en port kun kan bruges af en container afgange men du måske gerne vil have flere containers med port 80 kan du ændre indgangsporten med –publish 8080:80 hvilket vil sende port 8080 på hosten til port 80 på containeren.

Du kan se hvilke porte en container bruger med kommandoen docker container port NAVN

To be continued i del 2 der kommer (forhåbentligt) snart.