TuxCore Skillset

Docker Compose Skill

skill docker Guld

skills/docker-compose/SKILL.md

Docker Compose Skill

Formål

Denne skill bruges når TuxCore hjælper Thomas med Docker, Docker Compose, self-hosting, reverse proxy, serveropsætning og deployment.

Den er relevant for:

Standardprincipper

Standard mappestruktur

/docker_data/project-name/
├── docker-compose.yml
├── .env
├── data/
├── config/
├── logs/
└── backups/

Hvis projektet har database:

/docker_data/project-name/
├── docker-compose.yml
├── .env
├── app/
├── db/
├── config/
├── logs/
└── backups/

Compose standard

Et simpelt Compose-projekt bør typisk ligne dette princip:

services:
  app:
    image: example/image:latest
    container_name: example-app
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - ./data:/data
      - ./config:/config
    ports:
      - "${APP_PORT}:8080"

.env standard

Brug .env til værdier der kan ændre sig:

APP_PORT=8080
TZ=Europe/Copenhagen

DB_NAME=appdb
DB_USER=appuser
DB_PASSWORD=change_this_password
DB_ROOT_PASSWORD=change_this_root_password

Netværk

Hvis projektet skal bag Nginx Proxy Manager på samme Docker host, kan der bruges et fælles eksternt netværk:

networks:
  npm_proxy:
    external: true

Service eksempel:

services:
  app:
    networks:
      - npm_proxy

networks:
  npm_proxy:
    external: true

Hvis netværket ikke findes, opret det:

docker network create npm_proxy

Standardkommandoer

Start projekt:

cd /docker_data/project-name
docker compose up -d

Se status:

docker compose ps

Se logs:

docker compose logs -f

Se logs for én service:

docker compose logs -f app

Genstart:

docker compose restart

Stop:

docker compose down

Opdater image:

docker compose pull
docker compose up -d
docker image prune -f

Fejlfinding

Når brugeren skriver $docker $debug, bør TuxCore svare med:

  1. Hvad fejlen betyder.
  2. Mest sandsynlige årsag.
  3. Kommandoer til at undersøge problemet.
  4. Konkrete rettelser.
  5. Næste testtrin.

Typiske debug-kommandoer

docker compose ps
docker compose logs --tail=100
docker compose config
docker network ls
docker volume ls
docker ps
docker inspect container_name

Port check:

ss -tulpn | grep LISTEN

Find hvem der bruger en port:

sudo lsof -i :80
sudo lsof -i :443
sudo lsof -i :8080

Curl internt fra Docker host:

curl -I http://127.0.0.1:PORT

Curl mellem containere:

docker exec -it nginx-proxy-manager curl -I http://container-name:PORT

Reverse proxy standard

Ved Nginx Proxy Manager:

Sikkerhedsregler

Database standard

MariaDB eksempel:

services:
  db:
    image: mariadb:11
    container_name: project-db
    restart: unless-stopped
    env_file:
      - .env
    environment:
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - ./db:/var/lib/mysql

PostgreSQL eksempel:

services:
  postgres:
    image: postgres:16
    container_name: project-postgres
    restart: unless-stopped
    env_file:
      - .env
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./db:/var/lib/postgresql/data

Redis eksempel:

services:
  redis:
    image: redis:7-alpine
    container_name: project-redis
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - ./redis:/data

Backup standard

Manuelle backups bør typisk gemmes i:

/docker_data/project-name/backups/

MariaDB dump:

docker exec project-db mariadb-dump -u root -p"$DB_ROOT_PASSWORD" "$DB_NAME" > backups/db-$(date +%F-%H%M).sql

PostgreSQL dump:

docker exec project-postgres pg_dump -U "$DB_USER" "$DB_NAME" > backups/db-$(date +%F-%H%M).sql

Arkivér projektdata:

tar -czf backups/project-data-$(date +%F-%H%M).tar.gz data config

Når TuxCore laver $docker $full

Lever som udgangspunkt:

  1. Komplet docker-compose.yml
  2. Komplet .env.example
  3. Mappestruktur
  4. Opret-mapper kommandoer
  5. Startkommandoer
  6. Logs/testkommandoer
  7. Reverse proxy noter
  8. Backup-noter hvis relevant

Når TuxCore laver $docker $patch

Lever kun:

  1. Hvad der skal ændres.
  2. Den konkrete YAML/ENV ændring.
  3. Hvor ændringen skal placeres.
  4. Kommandoer til at validere og genstarte.

Acceptkriterier

En Docker-løsning er godkendt når:

Tags

docker, compose, docker-compose, tuxcore, tuxinet, nginx-proxy-manager, self-hosting, lxc, proxmox
docker compose self-hosting nginx-proxy-manager