← Tilbake til dokumentasjon

Installere Docker og sette opp Traefik

Komplett guide for å installere Docker, Docker Compose, og deploye Traefik reverse proxy med eksempeltjenester

dockertraefikreverse-proxycontaineressl

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-ruting
  • Host() - Ditt domene/subdomene
  • entrypoints=websecure - Bruker HTTPS
  • certresolver=letsencrypt - Auto SSL-sertifikat
  • loadbalancer.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?

God containerisering! 🐳