Ako vytvoriť obraz kontajnera

Obraz

Kontajner

Bežiaca aplikácia.

Obraz kontajnera

Obraz

Obraz kontajnera

  • Súborový systém s aplikáciou, knižnicami aj OS.
  • časť "inštalačného balíčka" pre cloud s práve jednou aplikáciou.

Vytvorenie obrazu

Ako upraviť aplikáciu aby bežala na cloude?

  • Oddelenie aplikácie, dát, siete a konfigurácie.
  • Zapíšeme postup pre inštaláciu.

Analýza závislosti aplikácie

Každá aplikácia má svoje závislosti na nižších vrstvách:

  • na knižnici,
  • na OS,
  • na procesore.

Zmena HW, LIB alebo OS si vyžaduje zmenu aplikácie.

Obraz kontajnera sa skladá z vrstiev

  • Vrstvy sú nemenné.
  • Vrstvy sa dajú zdieľať medzi obrazmi.
  • Nový zápis znamená novú vrstvu.
  • Vrstvenie sa dá obísť pomocou mapovania.

Príklad na vrstvy:

  1. základné Ubuntu 22.2 LTS
  2. Inštalácia NGINX
  3. Zmena pracovného adresára
  4. Nastavenie príkazu na spustenie

Príklad Dockerfile

Dockerfile sú inštrukcie ako zostaviť obraz.

FROM dockerfile/ubuntu
RUN \
add-apt-repository -y ppa:nginx/stable && \
apt-get update && \
apt-get install -y nginx && \
rm -rf /var/lib/apt/lists/* && \
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx
WORKDIR /etc/nginx
CMD ["nginx"] # Define default command.

zdroj

Meno obrazu

Má v sebe zakódované

  • názov registra
  • názov obrazu
  • tag

Zostavenie obrazu

docker build . -t myregistry.tuke.sk/mynginx:0.1

                  |-----------------|-------|---|
                      registry        image  tag

Zdieľanie obrazu

Centrálny repozitár Dockerhub alebo vlastný register

  • Databáza vrstiev
  • Databáza obrazov
  • Databáza tagov

Možné problémy pri vytváraní obrazu

  • Závislosť na Docker Hub.
  • Časté využívanie neoverených obrazov.
  • docker démon beží ako 'root' a iné bezpečnostné problémy.

Spustenie kontajnera

docker run nginx

na pozadí

Interaktívne spustenie

docker run -it --rm nginx

s konzolou

   +----------+
   | Registry |
   +----------+
       |  Pull
       v
   +--------+
   | Image  |
   +--------+
       |  Run
       v
  +-----------+
  | Container |
  +-----------+

Kontajner beží vo virtuálnom prostredí

Vidí virtuálne zariadenia

  • Procesor
  • Sieť
  • Súborový systém
mapping

Virtuálna sieť

Kontajner vidí "svoju" sieť.

Spustenie s mapovanním portov

docker run -it --rm -p 8000:80 nginx 
                        ^   ^
                        |   |
                hostiteľ      kontajner

Základné druhy siete v Docker

  • Host - kontajner priamo využíva hostiteľský stack
  • Bridge - virtuálna sieť v rámci hostiteľa
  • Overlay - virtuálna sieť medzi viacerými hostiteľmi
  • None - žiadny prísup ku sieti

DNS v Docker

  • Názov kontajnera je jeho DNS meno
  • Preto môže byť práve jedna inštancia kontajnera s rovnakým menom

Virtuálny súborový systém

  • Kontajner vidí svoj vlastný súborový systém ktorý sa skladá z vrstiev.
  • Vrstvenie je implementované pomocou špeciálneho súborového systému.
  • OverlayFS

Spustenie s mapovaním siete a zväzkov

docker run  -p 80:80 -v /var/www:/var/www nginx

Mapovanie medzi reálnym a virtuálnym adresárom.

Vrstvy virtuálneho súborového systému

   +-----------------+
   | Operačný systém |
   +-----------------+
       | build
  +-----------+
  | Aplikácia |-----------+------------------+
  +-----------+           |                  |
       |  OverlayFS       | Config           | Volume
+----------------+  +---------------+  +----------------+
| Dočasné súbory |  | Konfigurácia  |  | Stav aplikácia |
+----------------+  +---------------+  +----------------+

Oddelenie dát od aplikácie

  • Aplikácia nemá svoj stav.
  • Dáta môžu byť uložené kdekoľvek.

Práca so súborovým systémov v systéme Docker

  • Súborový systém je virtuálny
  • Súborový systém sa po reštarte sa vždy vráti do pôvodného stavu
  • kontajner pripojí virtuálny diskový priestor na blokovej úrovni alebo na úrovni FS

Čo je to stav kontajnera?

časť súborového systému ktorá sa mení a ktorá je podstatná aj po reštarte, napr. databáza

Mapovanie adresárov

Vieme pripojiť existujúcu lokálnu zložku do nového kontajnera

Pripojenie aktuálneho adresára:

docker run -it --rm -v .:/home/user bash

Docker pomenovaný zväzok

  • Docker dokáže čiastočne "manažovať" diskový priestor.
  • Špeciálna zložka pod kontrolou Dockera.
docker volume create myvolume
docker run -it --rm -v myvolume:/myvolume bash

Záver - Docker...

  • je virtualizačná vrstva medzi jadrom a aplikáciou.
  • umožňuje ľahko spustiť aplikáciu v cloude.
  • zjednodušuje inštaláciu.
  • Existuje viac kompatibilných systémov pre konajnerizáciu.
  • podman, crio
  • Manažment viacerých Docker kontajnerov - Kubernetes, Docker Swarm/Compose.
Reload?