119 lines
2.5 KiB
Markdown
119 lines
2.5 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
|
||
|
|
```
|
||
|
|
|
||
|
|
### Images und Container
|
||
|
|
- **Image**: Unveränderbare Vorlage
|
||
|
|
```bash
|
||
|
|
docker images
|
||
|
|
```
|
||
|
|
- **Container**: Laufende Instanz eines Images
|
||
|
|
```bash
|
||
|
|
docker ps
|
||
|
|
```
|
||
|
|
|
||
|
|
## Schaubild File-Layerstruktur in Containern
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
## 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
|
||
|
|
```
|