Obsah
Základy práce s Docker
Základy práce s Docker
Docker je platforma, která umožňuje vývojářům snadno vytvářet, nasazovat a spouštět aplikace v kontejnerech. Kontejnery umožňují zabalit aplikaci se všemi potřebnými závislostmi do standardizované jednotky, která běží konzistentně v jakémkoliv prostředí. Tento návod vás seznámí se základními koncepty a příkazy pro práci s Docker.
Co je Docker?
Docker je nástroj, který využívá kontejnerizaci k vytváření izolovaných prostředí pro aplikace. Na rozdíl od virtuálních strojů, kontejnery sdílejí jádro operačního systému hostitele, což je činí lehčími a efektivnějšími.
Hlavní výhody Docker:
- Konzistentní prostředí - "Funguje to na mém počítači" už není problém
- Izolace - Aplikace běží nezávisle na sobě
- Efektivita - Nižší využití zdrojů než virtuální stroje
- Škálovatelnost - Snadné horizontální škálování
- Rychlé nasazení - Rychlé spuštění a zastavení kontejnerů
Instalace Docker
Windows
- Stáhněte Docker Desktop pro Windows
- Spusťte instalátor a postupujte podle průvodce
- Po instalaci restartujte počítač
- Spusťte Docker Desktop
macOS
- Stáhněte Docker Desktop pro Mac
- Přetáhněte aplikaci Docker do složky Applications
- Spusťte Docker z Launchpadu
Linux (Ubuntu)
# Aktualizace balíčků sudo apt update # Instalace potřebných balíčků sudo apt install apt-transport-https ca-certificates curl software-properties-common # Přidání Docker GPG klíče curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # Přidání Docker repozitáře sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # Aktualizace balíčků sudo apt update # Instalace Docker sudo apt install docker-ce # Přidání uživatele do skupiny docker (aby nebylo potřeba sudo) sudo usermod -aG docker $USER # Aplikace změn skupiny (nebo restartujte počítač) su - $USER
Základní koncepty Docker
Docker Image
Docker image je šablona obsahující aplikaci a její prostředí. Je to statický soubor, který obsahuje kód, runtime, knihovny, proměnné prostředí a konfigurační soubory potřebné pro spuštění aplikace.
Docker Container
Kontejner je spuštěná instance image. Můžete si to představit jako běžící proces izolovaný od ostatních procesů na hostitelském počítači.
Dockerfile
Dockerfile je textový soubor s instrukcemi, jak vytvořit Docker image. Definuje základní image, příkazy pro instalaci závislostí, kopírování souborů a konfiguraci prostředí.
Docker Hub
Docker Hub je veřejný registr, kde můžete najít a sdílet Docker images. Funguje podobně jako GitHub pro kód.
Základní příkazy Docker
Správa images
# Stažení image z Docker Hub docker pull ubuntu:20.04 # Zobrazení všech lokálních images docker images # Odstranění image docker rmi ubuntu:20.04 # Vytvoření image z Dockerfile docker build -t moje-aplikace:1.0 .
Správa kontejnerů
# Spuštění kontejneru docker run -d -p 8080:80 --name muj-web nginx # Zobrazení běžících kontejnerů docker ps # Zobrazení všech kontejnerů (včetně zastavených) docker ps -a # Zastavení kontejneru docker stop muj-web # Spuštění zastaveného kontejneru docker start muj-web # Odstranění kontejneru docker rm muj-web # Zobrazení logů kontejneru docker logs muj-web # Spuštění příkazu v běžícím kontejneru docker exec -it muj-web bash
Vytvoření vlastního Docker image
Vytvoření Dockerfile
Vytvořte soubor s názvem Dockerfile
(bez přípony) ve vašem projektu:
# Základní image FROM node:14 # Pracovní adresář v kontejneru WORKDIR /app # Kopírování package.json a package-lock.json COPY package*.json ./ # Instalace závislostí RUN npm install # Kopírování zdrojových souborů COPY . . # Expozice portu EXPOSE 3000 # Příkaz pro spuštění aplikace CMD ["npm", "start"]
Sestavení image
docker build -t moje-node-aplikace:1.0 .
Spuštění kontejneru z vlastního image
docker run -d -p 3000:3000 --name moje-aplikace moje-node-aplikace:1.0
Docker Compose
Docker Compose je nástroj pro definování a spouštění multi-kontejnerových Docker aplikací. Používá YAML soubor k konfiguraci služeb aplikace.
Instalace Docker Compose
Docker Compose je obvykle součástí Docker Desktop pro Windows a Mac. Pro Linux:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Vytvoření docker-compose.yml
version: '3' services: web: build: . ports: - "3000:3000" depends_on: - db environment: - DATABASE_URL=postgres://postgres:postgres@db:5432/mydb db: image: postgres:13 volumes: - postgres_data:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=mydb volumes: postgres_data:
Základní příkazy Docker Compose
# Spuštění služeb definovaných v docker-compose.yml docker-compose up -d # Zastavení služeb docker-compose down # Zobrazení logů všech služeb docker-compose logs # Zobrazení logů konkrétní služby docker-compose logs web # Spuštění příkazu v kontejneru služby docker-compose exec web bash # Sestavení nebo přestavění služeb docker-compose build
Praktické tipy pro práci s Docker
Optimalizace velikosti image
- Používejte vícestupňové sestavení (multi-stage builds)
- Kombinujte příkazy RUN pro snížení počtu vrstev
- Odstraňujte nepotřebné soubory v rámci stejného RUN příkazu
- Používejte .dockerignore pro vyloučení nepotřebných souborů
Správa dat v kontejnerech
Docker nabízí několik způsobů, jak pracovat s daty:
- Volumes: Nejlepší způsob pro perzistentní data
- Bind mounts: Propojení adresáře na hostiteli s adresářem v kontejneru
- tmpfs mounts: Dočasné úložiště v paměti
# Vytvoření volume docker volume create moje-data # Spuštění kontejneru s volume docker run -d -v moje-data:/data --name muj-kontejner ubuntu # Spuštění kontejneru s bind mount docker run -d -v $(pwd)/data:/app/data --name muj-kontejner ubuntu
Síťování v Docker
Docker vytváří virtuální sítě pro komunikaci mezi kontejnery:
# Vytvoření sítě docker network create moje-sit # Spuštění kontejneru v síti docker run -d --network moje-sit --name db postgres # Připojení existujícího kontejneru k síti docker network connect moje-sit muj-kontejner
Běžné problémy a jejich řešení
Kontejner se nespustí
# Zkontrolujte logy docker logs <id-kontejneru> # Spusťte kontejner v interaktivním režimu docker run -it --rm <image> bash
Problémy s oprávněními
# Přidání uživatele do skupiny docker sudo usermod -aG docker $USER # Změna vlastníka volume sudo chown -R $USER:$USER /var/lib/docker/volumes/<volume-name>/_data
Nedostatek místa na disku
# Odstranění nepoužívaných kontejnerů docker container prune # Odstranění nepoužívaných images docker image prune # Odstranění všech zastavených kontejnerů, nepoužívaných sítí, dangling images a build cache docker system prune
Pokročilé koncepty
Docker Swarm
Docker Swarm je nástroj pro orchestraci kontejnerů integrovaný přímo v Docker. Umožňuje vytvářet a spravovat cluster Docker hostů.
Docker Registry
Vlastní Docker Registry vám umožňuje ukládat a distribuovat vaše Docker images ve vaší organizaci:
# Spuštění lokálního registry docker run -d -p 5000:5000 --name registry registry:2 # Označení image pro lokální registry docker tag moje-aplikace:1.0 localhost:5000/moje-aplikace:1.0 # Push image do lokálního registry docker push localhost:5000/moje-aplikace:1.0
Závěr
Docker je mocný nástroj, který zjednodušuje vývoj, testování a nasazení aplikací. Díky kontejnerizaci můžete zajistit, že vaše aplikace bude fungovat stejně v jakémkoliv prostředí, od vývojářského počítače až po produkční server.
Začněte s jednoduchými kontejnery a postupně objevujte pokročilejší funkce jako Docker Compose, volumes a sítě. S rostoucími zkušenostmi můžete přejít k orchestračním nástrojům jako Docker Swarm nebo Kubernetes pro správu komplexnějších aplikací.
Další zdroje
- Oficiální dokumentace Docker
- Docker Hub - Repozitář Docker images
- Play with Docker - Interaktivní prostředí pro učení Docker
Připoj se k největší AI komunitě v ČR
Diskutuj, sdílej zkušenosti a získej pomoc od ostatních nadšenců do AI