Files
docker-workshop/01 docker-basics.md
Frank Woeckener 59ae58bb60 Add examples
2025-03-27 16:05:58 +01:00

130 lines
2.9 KiB
Markdown

# 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
```bash
docker version
docker info
```
- **Docker-Daemon**: Hintergrundprozess, verwaltet Container und Images
- **Docker-Registry**: Repository für Images
```bash
docker search nginx
```
### Offizielle Images mit Doku
- [https://hub.docker.com/_/mysql](https://hub.docker.com/_/mysql)
- [https://hub.docker.com/_/nginx](https://hub.docker.com/_/nginx)
- [https://hub.docker.com/_/node](https://hub.docker.com/_/node)
- [https://hub.docker.com/_/php](https://hub.docker.com/_/php)
### Images und Container
- **Image**: Unveränderbare Vorlage
```bash
docker images
```
- **Container**: Laufende Instanz eines Images
```bash
docker ps
```
## Schaubild File-Layerstruktur in Containern
![Container Layers](docker-layers.svg)
## 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 ./
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 --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
```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
```