Docker-kommandon
Den här sidan ger en introduktion till Docker och de kommandon du använder mest. Den går inte igenom varje kommando med alla flaggor, utan innehåller:
- de begrepp du behöver: image, container, volym och nätverk
- en lista med kommandon du ska kunna hantera
- de vanligaste flaggorna till
docker run - tre sätt att få in filer i en container, och när du använder vilket
- övningar att göra på egen hand
I kursen utvecklar du dina webbapplikationer i containrar och driftsätter dem som containrar på din Cumulus-server. Det du lär dig här använder du alltså hela kursen.
Tidsåtgång: Ungefär 15 minuter att läsa och en timme för övningarna, plus installationen av Docker Desktop.
Förberedelser
Section titled “Förberedelser”Tidsåtgång: Ungefär 15–30 minuter om Docker Desktop inte redan är installerat.
Installera Docker Desktop och starta det. Kontrollera sedan i en terminal att allt fungerar:
docker versionBåde Client och Server ska visas. Visas bara Client är Docker Desktop inte startat.
Images och containrar
Section titled “Images och containrar”En image är en mall: ett filsystem med allt som ett program behöver, till exempel Ubuntu med Node installerat, och ett kommando som ska köras när den startar. En image ändras aldrig. Den är uppbyggd av lager, där varje lager innehåller ändringar mot lagret under.
En container är en körande instans av en image. Den får ett eget, skrivbart lager ovanpå imagen, egna processer och ett eget nätverk. Du kan starta många containrar från samma image. Containern delar operativsystemets kärna med datorn den körs på. Därför startar den på under en sekund, till skillnad från en virtuell maskin.
Images hämtas från ett registry, normalt Docker Hub.
Ett namn som node:26-slim består av imagens namn (node) och en tagg (26-slim) som anger
versionen. Utan tagg får du latest, som kan betyda en annan version i morgon. Ange därför alltid
en tagg.
Containrar är tillfälliga. Allt som skrivs i containerns eget lager försvinner när containern tas bort. Data som ska sparas läggs i en volym, som lever vidare oberoende av containrarna.
Kommandon
Section titled “Kommandon”Kommandona har formen docker <objekt> <kommando>. Flera av de vanligaste har också en kortare
form, till exempel docker ps för docker container ls. Skriv docker <kommando> --help för att
se alla flaggor, eller läs i referensen.
| Kommando | Vad det gör |
|---|---|
docker pull <image> |
Hämtar en image från ett registry |
docker image ls |
Listar images på din dator |
docker build -t <namn> . |
Bygger en image från en Dockerfile |
docker run <image> |
Skapar och startar en container |
docker ps |
Listar körande containrar. Med -a visas även stoppade. |
docker logs <container> |
Visar det containern har skrivit till stdout och stderr. -f följer loggen. |
docker exec -it <container> sh |
Startar ett skal i en körande container |
docker stop <container> |
Stoppar en container snällt med SIGTERM |
docker start <container> |
Startar en stoppad container igen |
docker rm <container> |
Tar bort en stoppad container. -f stoppar den först. |
docker volume ls |
Listar volymerna |
docker network ls |
Listar nätverken |
docker system df |
Visar hur mycket disk images, containrar och volymer tar |
docker system prune |
Tar bort stoppade containrar, oanvända nätverk och images utan namn |
docker compose styr flera containrar samtidigt utifrån en compose.yaml. Den tar du upp i
övningen Containerisera en webbapplikation.
| Kommando | Vad det gör |
|---|---|
docker compose up -d |
Bygger vid behov och startar alla tjänster i bakgrunden |
docker compose ps |
Listar tjänsternas containrar |
docker compose logs -f |
Följer alla tjänsters loggar |
docker compose down |
Stoppar och tar bort containrarna. Volymerna ligger kvar. |
Flaggor till docker run
Section titled “Flaggor till docker run”| Flagga | Betydelse |
|---|---|
--rm |
Ta bort containern när den avslutas |
-it |
Interaktiv med en terminal, för att kunna skriva i ett skal |
-d |
Kör i bakgrunden (detached) |
--name web |
Ge containern ett namn, i stället för ett slumpat |
-p 127.0.0.1:8080:80 |
Koppla port 8080 på din dator till port 80 i containern |
-v <källa>:<mål> |
Montera en katalog eller volym i containern |
-w /app |
Arbetskatalog i containern |
-e NAMN=värde |
Sätt en miljövariabel. --env-file .env läser dem från en fil. |
Tre sätt att få in filer i en container
Section titled “Tre sätt att få in filer i en container”| Sätt | Hur | Används till |
|---|---|---|
| Montera en katalog (bind mount) | -v "./site:/usr/share/caddy" |
Utveckling. Ändringar på din dator syns direkt i containern. |
| Namngiven volym | -v data:/data |
Data som ska sparas, som en databas. Docker förvaltar volymen. |
| Kopiera in i imagen | COPY site /usr/share/caddy i en Dockerfile |
Produktion. Imagen innehåller allt och kör likadant överallt. |
En sökväg som börjar med . räknas från katalogen du står i, så ./site är katalogen site där
och . är den aktuella katalogen. Utan ./ tolkar Docker site som namnet på en volym.
Övningar
Section titled “Övningar”Tidsåtgång: Ungefär en timme för alla elva övningarna.
När du har gått igenom kommandona kan du pröva dina kunskaper med övningarna nedan. Gör dem i ordning. Försök själv innan du tittar på lösningsförslaget. Den sista övningen städar bort det du har skapat.
1. Hello World
Section titled “1. Hello World”Tidsåtgång: Ungefär 5 minuter.
Kör imagen hello-world och läs utskriften. Vilka fyra steg tog Docker?
Lösningsförslag
Section titled “Lösningsförslag”docker run hello-worldKlienten kontaktade Docker-tjänsten, tjänsten hämtade imagen från Docker Hub, skapade en container från den och skickade containerns utdata tillbaka till din terminal.
2. En tillfällig Ubuntu-container
Section titled “2. En tillfällig Ubuntu-container”Tidsåtgång: Ungefär 5 minuter.
Starta ett interaktivt skal i en container från ubuntu:26.04 som tas bort när du avslutar den.
Skapa filen /tmp/fil.txt, avsluta och starta en ny container på samma sätt. Finns filen?
Lösningsförslag
Section titled “Lösningsförslag”docker run --rm -it ubuntu:26.04# i containern:echo hej > /tmp/fil.txtexitdocker run --rm -it ubuntu:26.04ls /tmpFilen finns inte. Den nya containern startar från samma orörda image, och den första containern togs bort med sitt skrivbara lager när den avslutades.
3. Kör ett enstaka kommando
Section titled “3. Kör ett enstaka kommando”Tidsåtgång: Ungefär 5 minuter.
Visa innehållet i /etc/os-release i en container från ubuntu:26.04 och i en från
node:26-slim, utan att starta något interaktivt skal. Vilken distribution bygger Node-imagen
på?
Lösningsförslag
Section titled “Lösningsförslag”docker run --rm ubuntu:26.04 cat /etc/os-releasedocker run --rm node:26-slim cat /etc/os-releaseAllt efter imagens namn ersätter det kommando som imagen annars kör. node:26-slim bygger på
Debian. slim betyder att den bara innehåller det nödvändigaste.
4. Node utan Node
Section titled “4. Node utan Node”Tidsåtgång: Ungefär 2 minuter.
Ta reda på vilken version av Node som finns i node:26-slim, utan att starta något skal. Du
behöver inte ha Node installerat för att göra det.
Lösningsförslag
Section titled “Lösningsförslag”docker run --rm node:26-slim node --version5. En webbserver i bakgrunden
Section titled “5. En webbserver i bakgrunden”Tidsåtgång: Ungefär 5 minuter.
Starta webbservern Caddy (caddy:2) i bakgrunden, med namnet web, och koppla port 8080 på din
dator, bara på 127.0.0.1, till port 80 i containern. Öppna
localhost:8080. Lista de körande containrarna och visa loggen för web.
Lösningsförslag
Section titled “Lösningsförslag”docker run -d --name web -p 127.0.0.1:8080:80 caddy:2docker psdocker logs web6. Ett skal i en körande container
Section titled “6. Ett skal i en körande container”Tidsåtgång: Ungefär 5 minuter.
Starta ett skal i den körande containern web. Vilken användare är du, och vilka filer finns i
/usr/share/caddy? Ta sedan bort containern.
Lösningsförslag
Section titled “Lösningsförslag”docker exec -it web sh# i containern:whoamils /usr/share/caddyexitdocker rm -f webDu är root i containern, men bara i containern. sh används eftersom Caddy-imagen saknar
bash.
7. Servera dina egna filer
Section titled “7. Servera dina egna filer”Tidsåtgång: Ungefär 10 minuter.
Skapa katalogen site med filen index.html och lite HTML i. Starta Caddy igen och montera site
på /usr/share/caddy, skrivskyddad. Öppna sidan, ändra i index.html och ladda om.
Lösningsförslag
Section titled “Lösningsförslag”docker run -d --rm --name web -p 127.0.0.1:8080:80 -v "./site:/usr/share/caddy:ro" caddy:2:ro gör monteringen skrivskyddad för containern. Ändringen syns direkt, eftersom containern
läser filen från din dator.
8. Data som finns kvar
Section titled “8. Data som finns kvar”Tidsåtgång: Ungefär 5 minuter.
Skriv datum och tid till filen /data/logg.txt i en container som har volymen anteckningar
monterad på /data. Gör samma sak i en ny container, och visa sedan filens innehåll. Hur många
rader finns det, och varför?
Lösningsförslag
Section titled “Lösningsförslag”docker run --rm -v anteckningar:/data ubuntu:26.04 bash -c 'date >> /data/logg.txt'docker run --rm -v anteckningar:/data ubuntu:26.04 bash -c 'date >> /data/logg.txt'docker run --rm -v anteckningar:/data ubuntu:26.04 cat /data/logg.txtTvå rader. Volymen skapades första gången den användes och lever vidare fast containrarna togs bort. På samma sätt sparar du databasens data när du kör MongoDB i en container.
9. Kör ett skript från din dator
Section titled “9. Kör ett skript från din dator”Tidsåtgång: Ungefär 5 minuter.
Skapa filen hello.js med raden console.log('Hej från', process.version). Kör den med Node i en
container från node:26-slim, genom att montera den aktuella katalogen.
Lösningsförslag
Section titled “Lösningsförslag”docker run --rm -v ".:/app" -w /app node:26-slim node hello.js10. En egen image
Section titled “10. En egen image”Tidsåtgång: Ungefär 10 minuter.
Skriv en Dockerfile som utgår från caddy:2 och kopierar in katalogen site. Bygg imagen med
namnet min-sajt och kör den på port 8080. Ändra i index.html och ladda om. Varför syns inte
ändringen nu, när den syntes i övning 7?
Lösningsförslag
Section titled “Lösningsförslag”Dockerfile:
FROM caddy:2COPY site /usr/share/caddydocker stop webdocker build -t min-sajt .docker run -d --rm --name web -p 127.0.0.1:8080:80 min-sajtFilerna kopierades in i imagen när den byggdes. Ändringen syns först när du bygger en ny image och startar en ny container. Det är precis vad du vill i produktion, där imagen ska innehålla en bestämd version av applikationen.
11. Städa
Section titled “11. Städa”Tidsåtgång: Ungefär 5 minuter.
Ta reda på hur mycket diskutrymme Docker använder. Ta bort containern web, volymen
anteckningar och imagen min-sajt, och städa sedan bort allt som inte används.
Lösningsförslag
Section titled “Lösningsförslag”docker system dfdocker stop webdocker volume rm anteckningardocker image rm min-sajtdocker system prunedocker system prune tar inte bort volymer, eftersom de kan innehålla data du vill ha kvar.
Fördjupning
Section titled “Fördjupning”- Docker overview, hur Docker är uppbyggt
- Docker CLI-referensen
- Dockerfile-referensen