Installere Docker og sette opp Traefik
Komplett guide for å installere Docker, Docker Compose, og deploye Traefik reverse proxy med eksempeltjenester
Introduksjon
Docker forenkler applikasjonsdistribusjon ved å bruke containere. Denne guiden vil lede deg gjennom installasjon av Docker, oppsett av Traefik som reverse proxy, og distribusjon av din første containeriserte applikasjon.
Traefik er en moderne reverse proxy som automatisk håndterer SSL-sertifikater og tjenesteoppdagelse for dine Docker-containere.
Forutsetninger
- En VPS med Ubuntu 24.04 eller nyere
- Root eller sudo-tilgang
- Et domenenavn som peker til serveren din (for SSL)
- Grunnleggende kommandolinje-kunnskap
Steg 1: Installer Docker
Fjern gamle versjoner
Først, fjern eventuelle gamle Docker-installasjoner:
sudo apt remove docker docker-engine docker.io containerd runc
Installer avhengigheter
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
Legg til Dockers offisielle GPG-nøkkel
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Sett opp repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Installer Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
Verifiser installasjonen
sudo docker --version
sudo docker run hello-world
Du skal se en “Hello from Docker!”-melding.
Steg 2: Installer Docker Compose Plugin
Docker Compose gjør det enkelt å administrere fler-container applikasjoner. Vi bruker Docker Compose plugin (v2), som er den moderne, anbefalte tilnærmingen.
Installer Docker Compose Plugin
sudo apt install -y docker-compose-plugin
Verifiser installasjonen
docker compose version
Merk: Kommandoen er docker compose (med mellomrom), ikke docker-compose (med bindestrek).
Steg 3: Konfigurer Docker for ikke-root bruker
Å kjøre Docker som root er ikke anbefalt. La oss legge til brukeren din i docker-gruppen:
sudo usermod -aG docker $USER
Logg ut og tilbake for at dette skal tre i kraft, eller kjør:
newgrp docker
Test uten sudo:
docker ps
Steg 4: Opprett Docker-nettverk
Opprett et dedikert nettverk for Traefik:
docker network create traefik-public
Steg 5: Sett opp Traefik
Opprett mappestruktur
mkdir -p ~/traefik
cd ~/traefik
Opprett Traefik-konfigurasjon
Opprett traefik.yml:
nano traefik.yml
Legg til følgende konfigurasjon:
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
email: din-epost@eksempel.no
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: traefik-public
Erstatt din-epost@eksempel.no med din faktiske e-post.
Opprett Docker Compose-fil
Opprett docker-compose.yml:
nano docker-compose.yml
Legg til:
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- traefik-public
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.ditt-domene.no`)"
- "traefik.http.routers.traefik-dashboard.entrypoints=websecure"
- "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
- "traefik.http.routers.traefik-dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$8EVjn/nj$$GiLUZqcbueTFeD23SuB6x0"
networks:
traefik-public:
external: true
Erstatt traefik.ditt-domene.no med ditt faktiske domene.
Merk: Passordhash i eksempelet er for passordet “changeme”. Du bør generere ditt eget ved å bruke:
echo $(htpasswd -nb admin ditt-passord) | sed 's/\$/\$\$/g'
Installer htpasswd hvis nødvendig: sudo apt install apache2-utils
Opprett Let’s Encrypt-mappe
mkdir letsencrypt
chmod 600 letsencrypt
Start Traefik
docker compose up -d
Sjekk status
docker compose ps
docker compose logs -f traefik
Steg 6: Deploy Whoami-eksempel
Nå skal vi deploye en enkel whoami-tjeneste for å teste Traefik.
Opprett prosjektmappe
mkdir -p ~/whoami
cd ~/whoami
Opprett Docker Compose-fil
nano docker-compose.yml
Legg til:
services:
whoami:
image: traefik/whoami
container_name: whoami
restart: unless-stopped
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.ditt-domene.no`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
networks:
traefik-public:
external: true
Erstatt whoami.ditt-domene.no med ditt subdomene.
Start Whoami-tjenesten
docker compose up -d
Test tjenesten din
Test med curl:
curl https://whoami.ditt-domene.no
Du skal se output som ligner:
Hostname: whoami
IP: 172.19.0.3
RemoteAddr: 172.19.0.2:54321
GET / HTTP/1.1
Host: whoami.ditt-domene.no
User-Agent: curl/7.81.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 123.45.67.89
X-Forwarded-Host: whoami.ditt-domene.no
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-Server: traefik
X-Real-Ip: 123.45.67.89
Dette bekrefter at Traefik korrekt ruter trafikk og automatisk håndterer SSL.
Essensielle Docker-kommandoer
Her er de mest nyttige Docker-kommandoene:
Container-administrasjon
# List kjørende containere
docker ps
# List alle containere (inkludert stoppede)
docker ps -a
# Start en container
docker start container-navn
# Stopp en container
docker stop container-navn
# Start en container på nytt
docker restart container-navn
# Fjern en container
docker rm container-navn
# Vis container-logger
docker logs container-navn
docker logs -f container-navn # Følg logger
# Kjør kommando i kjørende container
docker exec -it container-navn bash
Image-administrasjon
# List images
docker images
# Hent et image
docker pull image-navn:tag
# Fjern et image
docker rmi image-navn
# Fjern ubrukte images
docker image prune
Docker Compose-kommandoer
# Start tjenester
docker compose up -d
# Stopp tjenester
docker compose down
# Vis logger
docker compose logs -f
# Start tjenester på nytt
docker compose restart
# Oppdater og start tjenester på nytt
docker compose pull
docker compose up -d
# Fjern alt (inkludert volumes)
docker compose down -v
Systemvedlikehold
# Fjern alle stoppede containere
docker container prune
# Fjern alle ubrukte images
docker image prune -a
# Fjern alle ubrukte volumes
docker volume prune
# Fjern alt ubrukt
docker system prune -a
Legge til flere tjenester
For å legge til flere tjenester bak Traefik, følg dette mønsteret:
services:
min-app:
image: min-app-image:latest
container_name: min-app
restart: unless-stopped
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.min-app.rule=Host(`app.ditt-domene.no`)"
- "traefik.http.routers.min-app.entrypoints=websecure"
- "traefik.http.routers.min-app.tls.certresolver=letsencrypt"
- "traefik.http.services.min-app.loadbalancer.server.port=8080"
networks:
traefik-public:
external: true
Nøkkelpunkter:
traefik.enable=true- Aktiverer Traefik-rutingHost()- Ditt domene/subdomeneentrypoints=websecure- Bruker HTTPScertresolver=letsencrypt- Auto SSL-sertifikatloadbalancer.server.port- Intern container-port
Oppdatere containere
For å oppdatere en container til siste versjon:
cd ~/whoami # eller din tjenestemappe
docker compose pull
docker compose up -d
Traefik vil automatisk håndtere SSL-sertifikater og ruting under oppdateringer.
Trenger du hjelp?
Har du problemer med Docker eller Traefik?
- Sjekk Docker-dokumentasjon
- Besøk Traefik-dokumentasjon
- Bli med i vårt Discord-fellesskap
- E-post support: shrp@shrp.no
God containerisering! 🐳