Files
docker-workshop/01 docker-basics.md
2025-03-28 08:34:07 +01:00

3.0 KiB

Vortrags-Script: Docker Basics

Einführung

Container vs. VM

  • Virtuelle Maschinen: Eigenes Betriebssystem, Hypervisor, hoher Ressourcenverbrauch
  • Container: Teilen Kernel des Host-Systems, leichtgewichtige Isolation, schneller Start

Docker-Architektur

  • Docker-Client: CLI-Tool für Interaktion
    docker version
    docker info
    
  • Docker-Daemon: Hintergrundprozess, verwaltet Container und Images
  • Docker-Registry: Repository für Images
    docker search nginx
    

Offizielle Images mit Doku

Images und Container

  • Image: Unveränderbare Vorlage
    docker images
    
  • Container: Laufende Instanz eines Images
    docker ps
    

Schaubild File-Layerstruktur in Containern

Container Layers

Docker-Images

Image-Aufbau

  • Layer-Architektur: Jede Anweisung erzeugt neue Schicht
    docker history nginx
    
  • Cache-Nutzung bei Build-Prozessen
  • Basis-Images als Fundament
    docker pull php:8.1-fpm
    

Dockerfile-Syntax

FROM php:8.1-fpm
WORKDIR /var/www/html

COPY composer.json ./

RUN apt-get update && apt-get install -y zip unzip \
    && docker-php-ext-install pdo pdo_mysql

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --no-scripts --no-autoloader

COPY . .

RUN composer dump-autoload --optimize

EXPOSE 9000
CMD ["php-fpm"]

Build-Prozess

docker build -t mein-projekt:1.0 .
docker build -t mein-projekt:1.0 -f Dockerfile.prod .
docker build --no-cache -t mein-projekt:1.0 .

Image-Registry

docker login
docker tag mein-projekt:1.0 username/mein-projekt:1.0
docker push username/mein-projekt:1.0
docker pull username/mein-projekt:1.0

Lokale Registry:

docker build -t localhost:5000/mein-projekt:1.0 .
docker push localhost:5000/mein-projekt:1.0
docker image ls localhost:5000/*

Container-Lebenszyklus

Starten, Stoppen, Löschen

docker run --name web mein-projekt:1.0
docker run -d -p 9000:9000 --name web mein-projekt:1.0
docker run -it --rm ubuntu bash
docker stop web
docker start web
docker restart web
docker rm web
docker rm -f web
docker ps
docker ps -a

Container-Isolation

docker inspect web
docker stats web

Ports und Netzwerke

docker run -d -p 8080:80 nginx
docker network ls
docker network create app-netz
docker run -d --network app-netz --name db mysql:8.0
docker network inspect app-netz

Volumes für Datenpersistenz

docker volume ls
docker volume create data-volume
docker run -v $(pwd):/var/www/html nginx
docker run -v data-volume:/var/lib/mysql mysql:8.0
docker run --tmpfs /tmp nginx
docker volume inspect data-volume