Ako upraviť aplikáciu aby bežala na cloude?
Každá aplikácia má svoje závislosti na nižších vrstvách:
Zmena HW, LIB alebo OS si vyžaduje zmenu aplikácie.
Dockerfile definuje, ako sa vytvorí obraz kontajnera.
Príklad:
FROM ubuntu:22.04
RUN apt-get update \
&& apt-get install -y --no-install-recommends nginx \
&& rm -rf /var/lib/apt/lists/*
CMD ["nginx", "-g", "daemon off;"]
FROM ubuntu:22.04
+------------------+
| ubuntu:22.04 |
+------------------+
RUN apt-get update && apt-get install -y nginx
+------------------+
| nginx |
+------------------+
CMD ["nginx", "-g", "daemon off;"]
+------------------+
| nginx |
+------------------+
Dockerfile sú inštrukcie ako zostaviť obraz.
Príklad:
FROM ubuntu:22.04
RUN apt-get update \
&& apt-get install -y --no-install-recommends nginx \
&& rm -rf /var/lib/apt/lists/* \
&& echo "\ndaemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]
Má v sebe zakódované
docker build . -t myregistry.tuke.sk/mynginx:0.1
|-----------------|-------|---|
registry image tag
Centrálny repozitár Dockerhub alebo vlastný register
latest je nepredvídateľný (radšej konkrétne verzie/tagy alebo digest)root (práva, prístup k socketu)USER) a dávaj len potrebné capabilities# vpredu (zaberie terminál)
docker run --rm nginx
# na pozadí (detached)
docker run -d --name web nginx
# shell v kontajneri (užitočné na debug)
docker run -it --rm ubuntu:22.04 bash
docker ps
docker logs web
docker exec -it web sh
docker stop web
+----------+
| Registry |
+----------+
| Pull
v
+--------+
| Image |
+--------+
| Run
v
+-----------+
| Container |
+-----------+
Vidí virtuálne zariadenia
Kontajner vidí "svoju" sieť.
docker run -it --rm -p 8000:80 nginx
^ ^
| |
hostiteľ kontajner
bridge má obmedzené DNS; pre viac kontajnerov používaj vlastnú sieťdocker network create mynet
docker run -d --name web --network mynet nginx
docker run -it --rm --network mynet ubuntu:22.04 bash
# v shelli: curl http://web
--name musí byť unikátne (nemôžeš mať dva kontajnery s rovnakým menom)docker run -p 80:80 -v /var/www:/var/www nginx
Mapovanie medzi reálnym a virtuálnym adresárom.
+-----------------+
| Operačný systém |
+-----------------+
| build
+-----------+
| Aplikácia |-----------+------------------+
+-----------+ | |
| OverlayFS | Config | Volume
+----------------+ +---------------+ +----------------+
| Dočasné súbory | | Konfigurácia | | Stav aplikácie |
+----------------+ +---------------+ +----------------+
--rm)Časť súborového systému ktorá sa mení a ktorá je podstatná aj po reštarte, napr. databáza
Vieme pripojiť existujúcu lokálnu zložku do nového kontajnera
Pripojenie aktuálneho adresára:
docker run -it --rm -v "$(pwd)":/home/user ubuntu:22.04 bash
| Vlastnosť | Bind mount | Named volume |
|---|---|---|
| Viazanosť na host path | áno | nie |
| Prenositeľnosť | nižšia | vyššia |
| Typické použitie | zdrojáky, konfigurácia | DB dáta, stav aplikácie |
docker volume create myvolume
docker run -it --rm -v myvolume:/myvolume ubuntu:22.04 bash