Skip to main content

Docker

Installera på Ubuntu-server med sudo apt  install docker.io.
För att kunna slå buildxsudo apt install docker-buildx.
Docker compose är att sätt att enkelt köra docker-images. Installera med sudo apt-get install docker-compose-v2.

Docker compose

Det går att starta containrar enligt specifiserade värden i en Docker compose fil.

Värde
Förklaring
container_nameSpecifisera ett namn för containern. Blir bättre för det mänskliga ögat när en container ex. ska stängas av
restart: always, restart: unless-stoppedSå att containers alltid startar vid boot av VM alternativt om de inte har stoppats manuellt

Networking

Aktivera IPv6

För att Docker ska ha IPv6 stöd måste filen /etc/docker/daemon.json skapas. Se exempelkonfiguration nedanför.

{
        "userland-proxy": false,
        "ipv6": true,
        "ip6tables": true,
        "fixed-cidr-v6": "fd00:1::/64",
        "experimental": true
}

Starta om docker efter att filen ovan har lagts till: sudo systemctl restart docker

Bridge Networking

Per default används "bridge-networking". Alla Docker-containers är nåbara utifrån via virtuella maskinens egna IP adress och NAT:as till en privat IP adress på insidan. Det gör att man måste delegera portar till de olika tjänsterna. Default IPv4 nät i Docker-miljön är 172.17.0.0/16. 

IPvlan

Istället för Bridge Networking kan IPvlan användas. Kan köras i antingen L2 eller L3-läge. I L2 läge är Docker-hosten en L2-switch/brygga och i L3 läge en router.

IPvlan L3-konf:

sudo docker network create -d ipvlan \
    --subnet=10.10.10.0/24 \
    --subnet=2001:db8::/68 \
    --ipv6 -o parent=eth0 \
    -o parent=eth0 \
    -o ipvlan_mode=l3 DOCKER_NETWORK

Docker Network kräver gillar inte interface namn såsom ens18. Eth0 går bra, se artikel här för hur man byter namn på ett interface.

Nätet som har skapats kan anropas manuellt vid uppstart (docker run) eller i en Docker compose fil. Se exempel längre ned.

För att tilldela en fast IP-adress kan det antingen ske via CLI vid uppstart eller genom docker-compose-filen. Då används ipam.

Konfiguration för att skapa ett nytt nät med Docker Compose:

# Nedan specifiseras under specifika container-konfigurationen
services:
 CONTAINERNAMN:
  networks:
   DOCKER_NETWORK:
    ipv4_address: 10.10.0.3
    ipv6_address: 2001:db8::1
    
# Nedan specifiseras "globlat" i compose filen
networks:
 DOCKER_NETWORK:
  driver: ipvlan
  enable_ipv6: true
  ipam:
   config:
    - subnet: 10.10.0.0/24
    - subnet: 2001:db8::/64

Konfiguration för att använda ett existerande nät med docker compose:

networks:
  DOCKER_NETWORK:
    name: DOCKER_NETWORK
    external: true

Det är flaggan external: true som gör att man kan använda ett existerande nät.

Volumes

Går att konfigurera på lika olika sätt. Ex. config:/etc/dns placerar volymen i /var/lib/docker/volumes./data:/data placerar filerna i en undermapp till mappen som docker-compose.yml filen är i.

Kommandon

KommandoFörklaring
docker imagesSe vilka images som finns lokalt
docker ps -aSe containrar som är igång
docker network inspect xxxxKontrollera networking
docker compose upStartar container från konfigurationsfil i lokal katalog, -d eller --detach för att starta i bakgrunden
docker compose stop
Stoppa alla containrar från konfigurationsfil i lokal katalog
docker compose startStarta alla containrar från konfigurationsfil i lokal katalog
docker system prune --....Ta bort oanvända resurser
docker attach  xxxAnslut mot en container
docker rmTa bort container, ange ID
docker exec xxx uptimeSlå ex. uptime kommandot i en container
docker exec --user="root" -it xxxx nsenterHamna i containerns cli
docker container logs xxxSe logg på en container, ange ID
docker run, flaggorFörklaring
-dDetach, kör i bakgrunden

Saker man kan installera med docker

LibreNMS (fork med docker-compose här)
Oxidized
Netbox (på denna wiki)
Technitium
NginxProxyManager
Avkorado