# Vortrags-Script: Docker Basics ## Einführung ### Schaubild File-Layerstruktur in Containern ![Docker Layers](docker-layers.svg) ### 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 ```bash docker version docker info ``` - **Docker-Daemon**: Hintergrundprozess, verwaltet Container und Images - **Docker-Registry**: Repository für Images ```bash docker search nginx ``` ### Images und Container - **Image**: Unveränderbare Vorlage ```bash docker images ``` - **Container**: Laufende Instanz eines Images ```bash docker ps ``` ## Docker-Images ### Image-Aufbau - Layer-Architektur: Jede Anweisung erzeugt neue Schicht ```bash docker history nginx ``` - Cache-Nutzung bei Build-Prozessen - Basis-Images als Fundament ```bash docker pull php:8.1-fpm ``` ### Dockerfile-Syntax ```dockerfile FROM php:8.1-fpm WORKDIR /var/www/html COPY composer.json composer.lock ./ 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 ```bash 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 ```bash 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 ``` ## Container-Lebenszyklus ### Starten, Stoppen, Löschen ```bash docker run -d --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 ```bash docker inspect web docker stats web ``` ### Ports und Netzwerke ```bash 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 ```bash 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 ```