Docker je bezplatné riešenie s otvoreným zdrojovým kódom na vývoj, nasadzovanie a správu aplikácií v ľahkej virtualizácii na úrovni OS. V tejto príručke ukážeme vytvorenie aplikácie Python v kontajneri Docker.
Predpoklady
Na vykonanie krokov uvedený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. Zistite viac o inštalácii Dockeru na Ubuntu.
Kontajnery Docker
Pri spúšťaní rôznych programov v rovnakom prostredí sa veci môžu (a budú) kaziť. Čím viac programov pridáte, tým nestabilnejším sa prostredie stáva. Pre bežných používateľov to nemusí byť veľký problém. Pri aplikáciách kritických pre prevádzku však môžu nastať vážne následky.
Čím viac aplikácií sa do systému pridá, tým väčšia je plocha útoku. Jedna 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ť kontajnery Docker na sandboxing na softvérovej úrovni:
Aplikácie v kontajneri budú mať obmedzený prístup k súborom.
Kontajnerizované aplikácie nevidia ostatné procesy bežiace v systéme.
Kontajneru možno prideliť konkrétne 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 ukážku vytvoríme jednoduchý server Python v kontajneri Docker, premeníme kontajner na obraz a nasadíme obraz v ukážkovom produkčnom prostredí.
Krok 1 – Konfigurácia súborového systému
Na hosťovanie projektu najprv vytvoríme vyhradený adresár:
mkdir -pv python-server-container/
cd !$
V adresári vytvorte podadresár src na uloženie nášho kódu:
mkdir -pv src/

Krok 2 – Vytvorenie servera Python
V tomto kroku vytvoríme jednoduchý HTTP server v jazyku Python. Vytvorte súbor server.py:
touch server.py
Otvorte ho v textovom editore:
nano server.py

Zadajte nasledujúci kód Python:
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 vyžiadame si handler zo štandardnej knižnice Pythonu, čím program zostáva jednoduchý.
Funkcia run inicializuje inštanciu HTTPserver.
Ako naznačujú argumenty server_address, server bude počúvať akékoľvek prichádzajúce pripojenie na porte 8080.
Teraz overíme, či server funguje podľa očakávania. Spustite server:
python3 server.py
![]()
Z nového terminálu môžeme použiť curl na odoslanie požiadavky na server:
curl -iv localhost:8080

Prípadne môžete odkaz otvoriť vo webovom prehliadači:
http://localhost:8080

Krok 3 – Vytvorenie súboru Dockerfile
Dockerfile obsahuje potrebné inštrukcie na vygenerovanie obrazu Docker. Inštrukcie v súbore sa vykonávajú postupne. Zistite viac o Dockerfile.
Vytvorte nový Dockerfile pre náš projekt:
touch Dockerfile
Teraz doň vložíme potrebný kód. Otvorte ho v textovom editore:
nano Dockerfile
Zadajte nasledujúci kód:
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ť direktívou FROM. V našom prípade deklarujeme Python ako základ obrazu Docker.
Direktíva ENV SRC_DIR určuje umiestnenie adresára kontajnera.
Direktíva COPY kopíruje súbory z adresára src, ktorý aktuálne hostí server Python.
Premenná PYTHONBUFFERED=1 určuje, že Python bude výstup tlačiť a zapisovať priamo do STDOUT. Inak by sa logy neodosielali do žiadnej vyrovnávacej pamäte.
Direktíva CMD určuje predvolený príkaz, ktorý sa spustí pri vykonaní kontajnera. V tomto prípade direktívu používame na spustenie nášho servera Python.
Krok 4 – Generovanie obrazu Docker
Keď je Dockerfile pripravený, môžeme vytvoriť obraz. Spustite nasledujúci príkaz Docker na začatie procesu:
docker build . -t python_server

Tu:
Príznak -t sa používa na označenie nášho obrazu Docker 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:
docker run -p 8080:8080 python_server

Tu presmerúvame port 8080 z lokálneho počítača do obrazu Docker pomocou príznaku -p.
Pomocou curl môžeme ľahko overiť, či server beží:
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 obrazu Docker
Teraz máme funkčný obraz Docker, ktorý hostí náš server Python. Pomocou funkcií exportu a importu Dockeru ho môžeme migrovať do akéhokoľvek iného systému.
Najprv skontrolujte zoznam obrazov Docker v aktuálnom systéme:
docker images

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

Po prenose súboru python_server.tar do cieľového počítača použite nasledujúci príkaz na import obrazu Docker:
docker load < python_server.tar

Záverečné myšlienky
V tejto príručke sme ukázali vytvorenie obrazu Docker z aplikácie Python. Vytvorili sme jednoduchý webový server Python a z neho zostavili obraz Docker. Obraz Docker je teraz možné nasadiť v ľubovoľnom prostredí a očakávať konzistentné správanie.
Máte záujem dozvedieť sa viac o Dockeri? Pozrite si nasledujúce príručky:
Zostavenie a nasadenie aplikácie Flask pomocou Dockeru na Ubuntu 20.04
Ako zabezpečiť a škálovať aplikáciu Django pomocou Dockeru, Nginx a Let’s Encrypt
Ako nasadiť WordPress pomocou kontajnerov Docker na Ubuntu 20.04
Veľa úspechov pri práci s počítačom!

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