Docker je bezplatné a open-source riešenie na vývoj, nasadzovanie a správu aplikácií v ľahkej virtualizácii na úrovni operačného systému. V tejto príručke si ukážeme vytvorenie Python aplikácie v Docker kontajneri.
Požiadavky
Na vykonanie krokov znázornených v tejto príručke budete potrebovať nasledujúce komponenty:
-
Systém Linux. Pozrite si konfiguráciu vlastného Ubuntu VPS na CloudSigma.
-
Nainštalovaná a nakonfigurovaná najnovšia verzia Dockeru. Prečítajte si viac o inštalácii Dockeru na Ubuntu.
Docker kontajnery
Pri spúšťaní rôznych programov v rovnakom prostredí sa veci môžu (a budú) kaziť. Čím viac programov pridáte, tým bude nestabilnejšie. Pre bežných ľudí to nemusí byť veľký problém. Avšak, pokiaľ ide o kritické aplikácie, môže to mať vážne následky.
Čím viac aplikácií je v systéme zavedených, tým väčšia je plocha na útok. Jediná kompromitovaná aplikácia môže ľahko viesť k pádu celého systému.
Na vyriešenie týchto problémov môžeme použiť Docker kontajnery na sandboxing na softvérovej úrovni:
-
Aplikácie v kontajneri budú mať obmedzený prístup k súborom.
-
Kontajnerizované aplikácie nemôžu vidieť iné procesy bežiace v systéme.
-
Kontajneru môže byť pridelené špecifické množstvo hardvérových prostriedkov.
-
Sieťové porty kontajnera nie sú vystavené navonok.
-
Konzistentné balenie takmer čohokoľvek naprieč lokálnymi/produkčnými prostrediami.
Na demonštráciu vytvoríme jednoduchý Python server v Docker kontajneri, transformujeme kontajner na obraz a nasadíme tento obraz v testovacom produkčnom prostredí.
Step 1 – Filesystem Configuration
Na hosťovanie projektu najprv vytvoríme vyhradený adresár:
|
1 |
mkdir -pv python-server-container/ |
|
1 |
cd !$ |
V adresári vytvorte podadresár src na uloženie nášho kódu:
|
1 |
mkdir -pv src/ |
Step 2 – Building the Python Server
V tomto kroku vytvoríme jednoduchý HTTP server v Pythone. Vytvorte súbor server.py:
|
1 |
touch server.py |
Otvorte ho v textovom editore:
|
1 |
nano server.py |

Zadajte nasledujúci kód v Pythone:
|
1 2 3 4 5 6 7 8 9 10 11 |
from http.server import HTTPServer, SimpleHTTPRequestHandler def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler): """server entrypoint""" server_address = ("0.0.0.0", 8080) httpd = server_class(server_address, handler_class) print("starting server...") httpd.serve_forever() if __name__ == "__main__": run() |

Tu,
-
Používame triedu HTTPServer a požadujeme handler zo štandardnej knižnice Pythonu, čím udržiavame program jednoduchý.
-
Funkcia run inicializuje inštanciu HTTPserver.
-
Ako naznačujú argumenty server_address, server bude počúvať na akomkoľvek prichádzajúcom pripojení na porte 8080.
Teraz overíme, či server funguje podľa očakávania. Spustite server:
|
1 |
python3 server.py |
![]()
Z nového terminálu môžeme použiť curl na odoslanie požiadavky na server:
|
1 |
curl -iv localhost:8080 |

Prípadne môžete prejsť na odkaz vo webovom prehliadači:
|
1 |
http://localhost:8080 |
Step 3 – Creating a Dockerfile
Súbor Dockerfile obsahuje potrebné inštrukcie na vygenerovanie Docker obrazu. Inštrukcie v súbore sa vykonávajú postupne. Prečítajte si viac o Dockerfile.
Vytvorte nový Dockerfile pre náš projekt:
|
1 |
touch Dockerfile |
Teraz doň vložíme potrebný kód. Otvorte ho v textovom editore:
|
1 |
nano Dockerfile |
Zadajte nasledujúci kód:
|
1 2 3 4 5 6 7 8 9 |
FROM python:latest ENV SRC_DIR /usr/bin/src/test_server/src COPY src/* ${SRC_DIR}/ WORKDIR ${SRC_DIR} ENV PYTHONUNBUFFERED=1 CMD ["python", "server.py"] |
Tu,
-
Každý Dockerfile musí začínať inštrukciou FROM . V našom prípade deklarujeme Python ako základ Docker obrazu.
-
Inštrukcia ENV SRC_DIR špecifikuje umiestnenie adresára v kontajneri.
-
Inštrukcia COPY kopíruje súbory z adresára src , v ktorom sa momentálne nachádza Python server.
-
Premenná PYTHONBUFFERED=1 určuje, že Python bude vypisovať a zaznamenávať výstup priamo do STDOUT. V opačnom prípade by sa logy neodosielali do žiadneho bufferu.
-
Inštrukcia CMD špecifikuje predvolený príkaz, ktorý sa má spustiť pri spustení kontajnera. V tomto prípade používame túto inštrukciu na spustenie nášho Python servera.
Krok 4 – Generovanie Docker obrazu
Keď je Dockerfile pripravený, môžeme vytvoriť obraz. Spustite nasledujúci príkaz Docker na spustenie procesu:
|
1 |
docker build . -t python_server |

Tu,
-
Príznak -t sa používa na označenie nášho Docker obrazu ako python_server.
-
Docker stiahne všetky potrebné komponenty a spojí ich do obrazu.
Krok 5 – Spustenie obrazu
Obraz je pripravený na nasadenie. Môžeme ho spustiť pomocou nasledujúceho príkazu:
|
1 |
docker run -p 8080:8080 python_server |

Tu presmerovávame port 8080 z lokálneho stroja do Docker obrazu pomocou príznaku -p.
Môžeme ľahko overiť, či server beží, pomocou curl:
|
1 |
curl -iv localhost:8080 |
Krok 6 – Ukončenie servera
V termináli stlačte “Ctrl + C” na ukončenie procesu Docker:

Krok 7 – Export a import Docker obrazu
Teraz máme funkčný Docker obraz, ktorý hostuje náš Python server. S pomocou funkcií exportu a importu v Docker ho môžeme migrovať na akýkoľvek iný systém.
Najprv skontrolujte zoznam Docker obrazov v aktuálnom systéme:
|
1 |
docker images |

Naším cieľom je Docker obraz python_server , ktorý sme práve vytvorili. Nasledujúci príkaz ho exportuje ako archív TAR:
|
1 |
docker save python_server:latest > python_server.tar |

Po prenose súboru python_server.tar do cieľového stroja použite na import Docker obrazu nasledujúci príkaz:
|
1 |
docker load < python_server.tar |
Záverečné myšlienky
V tejto príručke sme demonštrovali vytvorenie Docker obrazu z Python aplikácie. Vytvorili sme jednoduchý Python webový server a z neho sme zostavili Docker obraz. Docker obraz je teraz možné nasadiť v akomkoľvek prostredí a očakávať konzistentné správanie.
Máte záujem dozvedieť sa viac o Docker? Pozrite si nasledujúce príručky:
-
Zostavenie a nasadenie Flask aplikácie pomocou Docker na Ubuntu 20.04
-
Ako zabezpečiť a škálovať Django aplikáciu pomocou Docker, Nginx a Let’s Encrypt
-
Ako nasadiť WordPress pomocou Docker kontajnerov na Ubuntu 20.04
Príjemnú prácu s počítačom!




Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.