Docker Basics

Skrevet af: Patrick Kerwood

Docker er et fantastisk stykke software og containers er uden tvivl en stor del af fremtiden. I dette indlæg går jeg igennem nogle af de basale kommandoer og parametere, for at bruge Docker.

Installationen af Docker kan du finde i Dockers officielle docs. Eller se mit forrige Docker indlæg. https://linuxbloggen.dk/docker-installation/

Docker har mange parametere og man skal holde tungen lige i munden for at huske dem alle. Jeg kommer ikke igennem alle, kun dem som jeg selv ofte bruger og finder mest relevant.

Run

Run kommandoen bliver brugt til at lave en ny container og starte den. Følgende nedenstående parametrer bliver brugt samme med Run kommandoen.

Name
Name bliver brugt til at give den pågældende container et navn. Hvis ikke denne er sat, finder Docker selv på et navn fx. sharp_knuth. Når en container bliver lavet får den et container ID, fx. a0a824790861, som man skal bruge når man arbejder med containeren. Navnet er et alias for dette ID og gør det nemmere at skelne imellem de forskellige containers.
--name my-wp-site

Daemon mode
-d står for daemon mode og kører din container i baggrunden. Du vil næsten altid bruge dette parameter når du starter en ny container. Hvis ikke, åbnes der en aktiv terminal for containeren, som lukker containeren når du lukker den.
-d

Ports
Denne parameter fortæller Docker hvilken port eller porte den skal gøre tilgængelig på serverens netværks interface. Nedenstående åbner port 8000 til omverdenen og sender trafikken til containers port 80.
-p 8000:80

Fra standard er det TCP der bliver åbnet for. Hvis der er brug for UDP, tilføjes det på parameteret.
-p 8000:80/udp

Fra standard tillader Docker trafik fra alle interfaces. Ofte på mine websites begrænser jeg trafikken til kun at må komme fra 127.0.0.1 og sætter en Reverse Proxy op, typisk NGINX.
-p 127.0.0.1:8000:80

Det er også muligt at åbne en port range. Der skal man bare være opmærksom på at Docker laver en iptables entry for hver port. Dvs. åbner man 5000-5500, kommer der 500 entries i iptables.
-p 5000-5020:5000-5020

Volumes
Med volumes kan du mount mapper fra host serveren i en container. Dette bliver ofte brugt til at gemme konfigurations filer, eller andre unikke filer og mapper. Dette gør en container disponibel.

Fx. hvis du vil kører en MySQL container, kan du mounte mappen /var/lib/mysql som er den mappe MySQL har sine data filer i. Data filerne vil teknisk set ligge på host serveren, så hvis du stopper og sletter MySQL containeren, kan du lave en ny, med samme volume parameter og du har en identisk MySQL instance, med de samme databaser og tabeller.

Nedenstående mounter jeg MySQL data mappen til /home/kerwood/mysql-data, på host’en.
-v /home/kerwood/mysql-data:/var/lib/mysql

Volumes From
Med --volumes-from kan du mount en containers volumes i en anden container. Hvis vi fortsætter med MySQL eksemplet, i stedet for at vælge et mount point i volume parameteren, så nøjes med at erklære en mappe som volume.
-v /var/lib/mysql

Efterfølgende når vi starter den anden container, kan vi bruge --volumes-from for at få MySQL containerens volume mountet i /var/lib/mysql.
--volumes-from

Hvis vi nu går i /var/lib/mysql på container nr. 2, vil vi se MySQL data filerne.

Restart
Når serveren eller Docker daemon’en genstarter, vil dine containers ikke automatisk starte op igen. Brug --restart til at gøre dette. Der til kan always, on-failure eller unless-stopped bruges.

--restart=always

Linking/Bridging
I container verden er det en fordel at have sin MySQL server i en container for sig selv, imens selve web applikationen er i en anden. Dertil skal de kunne kommunikere sammen. Førhen ville man linke dem sammen, men det er desværre blevet en legacy feature.

Warning: The –link flag is a deprecated legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using –link.

Jeg vil ikke komme nærmere ind på “User defined networks”, da det en hel post for sig selv.
Du kan læse mere om det her.

Interactive tty
Når en container kører kan man ofte komme ud for at man har brug for at komme ind i containeren. Det er muligt at åbne en interaktiv tty i en container med exec kommandoen. Dertil skal man fortælle hvilken shell man vil kører i containeren. Ofte kan man bruge Bash, men i mere light weight containers er den “sparet” væk. Typisk er sh en anden mulighed.
docker exec -it container-navn bash

Du har nu en tty i containeren. Skriv exit for at komme ud af den.


21 jun 2017   | Alle · Docker

Leave a Reply