Files
docker-workshop/01 docker-basics.md

136 lines
3.0 KiB
Markdown
Raw Normal View History

2025-03-17 13:04:59 +01:00
# 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
```
2025-03-18 10:42:10 +01:00
### 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)
2025-03-17 13:04:59 +01:00
### 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
2025-03-18 10:42:10 +01:00
COPY composer.json ./
RUN apt-get update && apt-get install -y zip unzip \
2025-03-17 13:04:59 +01:00
&& docker-php-ext-install pdo pdo_mysql
2025-03-18 10:42:10 +01:00
2025-03-17 13:04:59 +01:00
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --no-scripts --no-autoloader
2025-03-18 10:42:10 +01:00
2025-03-17 13:04:59 +01:00
COPY . .
2025-03-18 10:42:10 +01:00
2025-03-17 13:04:59 +01:00
RUN composer dump-autoload --optimize
2025-03-18 10:42:10 +01:00
2025-03-17 13:04:59 +01:00
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
```
2025-03-28 08:21:34 +01:00
Lokale Registry:
```bash
docker build -t localhost:5000/mein-projekt:1.0 .
docker push localhost:5000/mein-projekt:1.0
```
2025-03-17 13:04:59 +01:00
## Container-Lebenszyklus
### Starten, Stoppen, Löschen
```bash
2025-03-27 15:40:31 +01:00
docker run --name web mein-projekt:1.0
docker run -d -p 9000:9000 --name web mein-projekt:1.0
2025-03-17 13:04:59 +01:00
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
```