Docker
Docker balí aplikaci i její závislosti do kontejneru. Aplikace pak běží stejně na tvém notebooku i na VPS.
Instalace
Nainstaluj Docker
curl -fsSL https://get.docker.com | sudo shPřidej se do skupiny docker
sudo usermod -aG docker $USEROdhlas se a přihlas znovu.
Ověř
docker run --rm hello-worldČlenství ve skupině docker je fakticky rovné rootu. Kdo může spouštět
kontejnery, může připojit kořenový adresář a získat plná práva. Nedávej ji
uživatelům, kterým bys nedal sudo.
Základní pojmy
| Pojem | Význam |
|---|---|
| Image | Šablona, ze které vzniká kontejner |
| Container | Běžící instance obrazu |
| Volume | Trvalé úložiště přežívající kontejner |
| Network | Virtuální síť mezi kontejnery |
Základní příkazy
# Bezici kontejnery
docker ps
# Vsechny vcetne zastavenych
docker ps -a
# Spusteni
docker run -d --name web -p 8080:80 nginx
# Logy
docker logs -f web
# Vstup do kontejneru
docker exec -it web bash
# Zastaveni a smazani
docker stop web && docker rm web
# Seznam obrazu
docker images
# Uklid nepouzivaneho
docker system prune -adocker system prune -a smaže všechny nepoužívané obrazy a sítě. Na
serveru s více projekty ti zmizí i obrazy, které jen zrovna neběží.
Trvalá data
Data v kontejneru zmizí spolu s ním. Použij volume:
docker run -d \
--name db \
-e MYSQL_ROOT_PASSWORD=tajneheslo \
-v mysql-data:/var/lib/mysql \
-p 127.0.0.1:3306:3306 \
mysql:8Zápis -p 127.0.0.1:3306:3306 zpřístupní port jen lokálně. Bez prefixu
127.0.0.1 bys databázi otevřel celému internetu, i kdyby ufw port blokoval.
Docker obchází ufw. Pravidla firewallu se na publikované porty kontejnerů
neuplatní. Vždy publikuj na 127.0.0.1, pokud port nemá být veřejný.
Vlastní obraz
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
USER node
CMD ["node", "server.js"]docker build -t moje-app:1.0 .
docker run -d -p 3000:3000 moje-app:1.0Kopíruj package.json a instaluj závislosti před kopírováním zbytku kódu.
Docker pak při změně kódu nemusí instalovat znovu.
Omezení zdrojů
docker run -d --memory=512m --cpus=1.0 --name app moje-app:1.0Bez limitu může jeden kontejner spotřebovat celý VPS.
Tipy
- Nespouštěj kontejnery jako root. Použij
USERv Dockerfile. - Používej konkrétní tagy (
node:22-alpine), nelatest. - Sleduj místo na disku. Obrazy a logy rostou rychle.
Poznámka
Docker vyžaduje VPS. Na herním hostingu není k dispozici.