3.0 KiB
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
- https://hub.docker.com/_/mysql
- https://hub.docker.com/_/nginx
- https://hub.docker.com/_/node
- https://hub.docker.com/_/php
Images und Container
- Image: Unveränderbare Vorlage
docker images - Container: Laufende Instanz eines Images
docker ps
Schaubild File-Layerstruktur in Containern
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