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_name Specifisera 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-stopped Så att containers alltid startar vid boot av VM alternativt om de inte har stoppats manuellt

Networking

Ta bort nätverk

 docker network rm NETWORK-NAME

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

Kommando Förklaring
docker images Se vilka images som finns lokalt
docker ps -a Se containrar som är igång
docker network inspect xxxx Kontrollera networking
docker compose up Startar 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 start Starta alla containrar från konfigurationsfil i lokal katalog
docker system prune --.... Ta bort oanvända resurser
docker attach  xxx Anslut mot en container
docker rm Ta bort container, ange ID
docker exec xxx uptime Slå ex. uptime kommandot i en container
docker exec --user="root" -it xxxx nsenter Hamna i containerns cli
docker container logs xxx Se logg på en container, ange ID
docker run, flaggor Förklaring
-d Detach, 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