Kontejnery a Docker - Otázky a odpovědi

1. Co jsou kontejnery a jaký je jejich přínos pro vývoj a testování aplikací?

Kontejnery jsou lehké, izolované prostředí pro běh aplikací, které obsahují všechny potřebné závislosti, knihovny a konfigurace pro jejich běh. Kontejnery umožňují:

  • Portabilitu: Aplikace běží stejně na všech prostředích, protože kontejnery zajišťují, že všechny závislosti jsou součástí prostředí.
  • Izolaci: Každý kontejner běží v izolovaném prostředí, což zajišťuje, že aplikace v jednom kontejneru neovlivní aplikace v jiných kontejnerech.
  • Efektivitu: Kontejnery jsou rychlé na nasazení a mají menší režii než tradiční virtuální stroje.

2. Jaký je rozdíl mezi kontejnery a virtuálními stroji (VM)?

  • Kontejnery: Běží na sdíleném operačním systému hostitele a využívají jeho jádro. Jsou lehké, rychlé a mají menší režii než virtuální stroje.
  • Virtuální stroje: Každý VM běží s vlastním operačním systémem a virtualizovaným hardwarem. To znamená, že mají větší režii a jsou pomalejší na spuštění než kontejnery.
  • Výhody kontejnerů: Rychlejší nasazení, menší velikost, snadnější škálování.

3. Jaké jsou výhody používání Dockeru pro vývoj a testování aplikací?

  • Jednoduchost: Docker umožňuje rychlé a snadné vytváření, nasazování a správu kontejnerů.
  • Škálovatelnost: Docker podporuje škálování aplikací horizontálně (přidáváním více instancí kontejnerů).
  • Portabilita: Docker kontejnery běží na jakémkoli prostředí, kde je nainstalovaný Docker, což zajišťuje konzistenci mezi vývojovými a produkčními prostředími.
  • Izolace: Každý kontejner je izolován, což znamená, že různé aplikace mohou běžet v oddělených prostředích a neovlivňují se.

4. Co je Dockerfile a jaký je jeho účel?

Dockerfile je textový soubor, který obsahuje instrukce pro vytvoření Docker obrazu. Tyto instrukce zahrnují příkazy pro instalaci závislostí, nastavení konfigurace a zkopírování souborů do obrazu. Dockerfile je klíčový pro automatizaci procesu vytváření Docker obrazů.

FROM node:14
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "app.js"]

5. Jak byste testoval aplikaci běžící v Docker kontejneru?

Pro testování aplikace běžící v Docker kontejneru bych:

  • Vytvořil testovací kontejner s aplikací a jejími závislostmi.
  • Provedl integraci s CI/CD pipeline (např. Jenkins nebo GitLab CI), která by automaticky spouštěla testy v Docker kontejnerech.
  • Používal nástroje jako Selenium nebo Cypress pro testování front-endu v Docker kontejnerech.
  • Vytvářel testy API pomocí nástrojů jako Postman nebo SoapUI, které by běžely v kontejnerovém prostředí.
  • Používal Docker Compose pro koordinaci více kontejnerů (například databáze + aplikace) v rámci jednoho testovacího prostředí.

6. Co je Docker Compose a jak se používá při testování?

Docker Compose je nástroj pro definování a správu multi-kontejnerových Docker aplikací. Umožňuje snadno spustit více kontejnerů jako jednu aplikaci pomocí definice v souboru docker-compose.yml.

version: '3'
services:
  app:
    image: my-app
    ports:
      - "8080:8080"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

Docker Compose by se používal k vytvoření prostředí pro testování, kde by bylo možné automatizovaně testovat aplikaci společně s jejími závislostmi.

7. Jakým způsobem se testují kontejnery v různých prostředích (vývoj, staging, produkce)?

Pro testování kontejnerů v různých prostředích:

  • Vývoj: Používám lokální Docker kontejnery pro rychlé testování změn v aplikaci.
  • Staging: Používám Docker kontejnery nasazené na staging serverech, které napodobují produkční prostředí, abych ověřil, že aplikace funguje stejně v reálných podmínkách.
  • Produkce: Pro produkční prostředí používám orchestrace nástrojů jako Kubernetes nebo Docker Swarm k zajištění vysoké dostupnosti a škálovatelnosti.

Testování zahrnuje kontrolu toho, že kontejnery správně fungují na všech těchto úrovních a že aplikace je kompatibilní s různými prostředími.

8. Co je Kubernetes a jak se používá s Docker kontejnery?

Kubernetes je open-source platforma pro orchestraci kontejnerů, která umožňuje automatizovat nasazování, škálování a správu Docker kontejnerů. Kubernetes spravuje kontejnery v clusteru a poskytuje funkce jako:

  • Automatické škálování: Dynamicky přidává nebo odebírá kontejnery podle aktuálního zatížení.
  • Load balancing: Rovnoměrně distribuuje provoz mezi kontejnery.
  • Self-healing: Automaticky restartuje kontejnery, které se dostanou do chybového stavu.

Kubernetes je ideální pro nasazení aplikací na větší škálu a zajištění vysoké dostupnosti a škálovatelnosti.

9. Jaký je proces nasazení aplikace do Docker kontejneru?

Proces nasazení aplikace do Docker kontejneru obvykle zahrnuje následující kroky:

  1. Vytvoření Dockerfile, který definuje, jak bude kontejner sestaven.
  2. Vytvoření Docker obrazu pomocí příkazu docker build -t my-app ..
  3. Testování obrazu pomocí příkazu docker run -p 8080:8080 my-app.
  4. Nasazení na Docker Hub nebo jiné registry pomocí docker push.
  5. Nasazení na server nebo orchestrátor jako Kubernetes pomocí docker pull nebo Kubernetes definice.

10. Jak zajišťujete bezpečnost Docker kontejnerů?

Pro zajištění bezpečnosti Docker kontejnerů bych:

  • Používal oficiální a ověřené Docker obrazy, abych minimalizoval riziko zranitelností.
  • Pravidelně aktualizoval obrazy pro zajištění, že obsahují poslední bezpečnostní záplaty.
  • Minimalizoval privilegium tím, že kontejnery běží s minimálními oprávněními.
  • Používal nástroje jako Docker Content Trust pro ověřování digitálních podpisů obrazů.
  • Implementoval skenování zranitelností v Docker obrazech pomocí nástrojů jako Clair nebo Trivy.