Obsah

Zpět na seznam návodů

Základy práce s Docker

2. 5. 2024
dockerkontejnerydevopsvývojářské nástroje

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

  1. Stáhněte Docker Desktop pro Windows
  2. Spusťte instalátor a postupujte podle průvodce
  3. Po instalaci restartujte počítač
  4. Spusťte Docker Desktop

macOS

  1. Stáhněte Docker Desktop pro Mac
  2. Přetáhněte aplikaci Docker do složky Applications
  3. 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

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