136 lines
3.0 KiB
Markdown
136 lines
3.0 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
|
|
|
|

|
|
|
|
## 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
|
|
```
|
|
|
|
Lokale Registry:
|
|
```bash
|
|
docker build -t localhost:5000/mein-projekt:1.0 .
|
|
docker push localhost:5000/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
|
|
```
|