Docker Hub a Docker Compose
verejný (alebo súkromný) cloudový register Docker obrazov.
Slúži na vyhľadávanie a zdieľanie hotových obrazov
Adresa: https://hub.docker.com
Pri výbere obrazu sleduj:
Každý obraz má:
Na Docker Hub nájdeme obraz s Python:
docker.io/library/python:3.12-slim
Rozpis:
| Časť | Význam |
|---|---|
| docker.io | registry (Docker Hub) |
| library | namespace (oficiálne obrazy) |
| python | názov obrazu |
| 3.12-slim | tag (verzia + variant) |
Na stránke python obrazu nájdeme napr.:
3.123.12-slim3.12-alpine3.12-bookwormlatest| Tag | Význam |
|---|---|
| 3.12 | plná verzia |
| slim | menšia verzia (menej balíkov) |
| alpine | veľmi malý image (Alpine Linux) |
| bookworm | Debian verzia |
| latest | posledná stabilná verzia |
Na GitHub stránke obrazu nájdeme Dockerfile.
Typický Dockerfile:
FROM debian:bookworm-slim
ENV PYTHON_VERSION 3.12.2
RUN apt-get update && apt-get install -y \
build-essential \
libssl-dev
CMD ["python3"]
FROM → základný imageRUN → čo sa inštalujeENV → premenné prostrediaCMD → default príkazTak zistíme:
Nástroj na konfiguráciu viackontajnerových aplikácií.
Webové aplikácie sa zvyčajne skladajú z viacerých služieb:
HTML
|
+----------+
| Frontend |
+----------+
| REST
+----------+ NFS +----------+
| Backend |-------| Storage |
+----------+ +----------+
| postgres
+----------+
| Database |
+----------+
Typická webová aplikácia sa skladá z viacerých komponentov. Každý komponent má iné nároky.
Napr.
Docker Compose umožňuje:
Používa súbor YAML:
docker-compose.yml
services:
service_name:
image: image_name
ports:
- "host_port:container_port"
volumes:
- volume_name:/path/in/container
environment:
VARIABLE: value
depends_on:
- other_service
volumes:
volume_name:
Aplikáciu spustíme:
docker compose up -d
Zastavíme:
docker compose down
image – Docker imageports – mapovanie portovenvironment – premenné prostrediavolumes – persistentné úložiskonetworks – sietecmd: ako spustiťNa Linuxe typicky:
/var/lib/docker/volumes/
Vlastné siete medzi kontajnermi.
projectname_default
V nej:
WordPress potrebuje:
docker rundocker network create wordpress_net
docker volume create db_data
docker volume create wordpress_data
docker run -d \
--name wordpress_db \
--restart always \
--network wordpress_net \
-v db_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=example \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wppassword \
mysql:8.0
docker run -d \
--name wordpress_app \
--restart always \
--network wordpress_net \
-p 8080:80 \
-v wordpress_data:/var/www/html \
-e WORDPRESS_DB_HOST=wordpress_db:3306 \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wppassword \
-e WORDPRESS_DB_NAME=wordpress \
wordpress:latest
services:
db:
image: mysql:8.0
container_name: wordpress_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wordpress_app
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
depends_on čaká len na štart kontajnera, nie na to, kedy je databáza pripravená.
Riešenie – healthcheck podmienka:
services:
db:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
wordpress:
depends_on:
db:
condition: service_healthy
WordPress sa spustí až keď MySQL úspešne odpovie na ping.
natívny nástroj Dockeru na orchestráciu kontajnerov v clustri viacerých serverov.
Umožňuje:
Internet
+----------------+ +---------+ +---------+
| Leader Manager | | Manager | | Manager |
+----------------+ +---------+ +---------+
+--------+ +--------+ +--------+
| Worker | | Worker | | Worker |
+--------+ +--------+ +--------+
+-----+ +-----+
| NAS | | SAN |
+-----+ +-----+