Docker je bezplatné a open-source řešení pro vývoj, nasazení a správu aplikací v odlehčené virtualizaci na úrovni operačního systému. V této příručce si ukážeme vytvoření Python aplikace v Docker kontejneru.
Požadavky
K provedení kroků popsaných v této příručce budete potřebovat následující komponenty:
-
Systém Linux. Podívejte se na konfiguraci vlastního Ubuntu VPS na CloudSigma.
-
Je nainstalována a nakonfigurována nejnovější verze Dockeru. Zjistěte více o instalaci Dockeru na Ubuntu.
Docker kontejnery
Při spouštění různých programů ve stejném prostředí se věci mohou (a budou) kazit. Čím více programů přidáte, tím nestabilnější se stává. Pro běžné lidi to nemusí být velký problém. Pokud však jde o kritické aplikace, může to mít vážné následky.
Čím více aplikací je do systému zavedeno, tím větší je plocha pro útok. Jediná kompromitovaná aplikace může snadno vést k pádu celého systému.
K vyřešení těchto problémů můžeme použít Docker kontejnery pro sandboxing na softwarové úrovni:
-
Aplikace v kontejneru budou mít omezený přístup k souborům.
-
Kontejnerizované aplikace nevidí ostatní procesy běžící v systému.
-
Kontejneru lze vyhradit konkrétní množství hardwarových prostředků.
-
Síťové porty kontejneru nejsou vystaveny navenek.
-
Konzistentní balení téměř čehokoli napříč lokálními a produkčními prostředími.
Pro demonstraci vytvoříme jednoduchý Python server v Docker kontejneru, transformujeme kontejner na obraz a tento obraz nasadíme v testovacím produkčním prostředí.
Krok 1 – Konfigurace souborového systému
Pro hostování projektu nejprve vytvoříme vyhrazený adresář:
|
1 |
mkdir -pv python-server-container/ |
|
1 |
cd !$ |
V tomto adresáři vytvořte podadresář src pro uložení našeho kódu:
|
1 |
mkdir -pv src/ |
Krok 2 – Sestavení Python serveru
V tomto kroku vytvoříme jednoduchý HTTP server v Pythonu. Vytvořte soubor server.py:
|
1 |
touch server.py |
Otevřete jej v textovém editoru:
|
1 |
nano server.py |

Zadejte následující kód v Pythonu:
|
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() |

Zde,
-
Používáme třídu HTTPServer a vyžadujeme handler ze standardní knihovny Pythonu, což udržuje program jednoduchý.
-
Funkce run inicializuje instanci HTTPserver.
-
Jak napovídají argumenty server_address, server bude naslouchat jakémukoli příchozímu připojení na portu 8080.
Nyní ověříme, zda server funguje podle očekávání. Spusťte server:
|
1 |
python3 server.py |
![]()
Z nového terminálu můžeme použít curl k odeslání požadavku na server:
|
1 |
curl -iv localhost:8080 |

Případně můžete na odkaz přejít ve webovém prohlížeči:
|
1 |
http://localhost:8080 |
Krok 3 – Vytvoření souboru Dockerfile
Soubor Dockerfile obsahuje potřebné instrukce pro vygenerování Docker obrazu. Instrukce v souboru jsou prováděny postupně. Zjistěte více o Dockerfile.
Vytvořte nový Dockerfile pro náš projekt:
|
1 |
touch Dockerfile |
Nyní do něj vložíme potřebný kód. Otevřete jej v textovém editoru:
|
1 |
nano Dockerfile |
Zadejte následující 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"] |
Zde,
-
Každý Dockerfile musí začínat FROM instrukcí. V našem případě deklarujeme Python jako základ Docker obrazu.
-
Instrukce ENV SRC_DIR určuje umístění adresáře kontejneru.
-
Instrukce COPY kopíruje soubory z adresáře src, který aktuálně hostuje Python server.
-
Proměnná PYTHONBUFFERED=1 určuje, že Python bude vypisovat a logovat výstup přímo do STDOUT. V opačném případě by logy nebyly odesílány do žádného bufferu.
-
Instrukce CMD určuje výchozí příkaz, který se má spustit při spuštění kontejneru. V tomto případě tuto instrukci používáme ke spuštění našeho Python serveru.
Krok 4 – Generování Docker obrazu
S připraveným Dockerfile nyní můžeme vytvořit obraz. Spusťte následující Docker příkaz pro zahájení procesu:
|
1 |
docker build . -t python_server |

Zde,
-
Příznak -t se používá k označení našeho Docker obrazu jako python_server.
-
Docker stáhne všechny potřebné součásti a spojí je do obrazu.
Krok 5 – Spuštění obrazu
Obraz je připraven k nasazení. Můžeme jej spustit pomocí následujícího příkazu:
|
1 |
docker run -p 8080:8080 python_server |

Zde přesměrováváme port 8080 z lokálního stroje do Docker obrazu pomocí příznaku -p.
Můžeme snadno ověřit, zda server běží, pomocí curl:
|
1 |
curl -iv localhost:8080 |
Krok 6 – Ukončení serveru
V terminálu stiskněte “Ctrl + C” pro ukončení procesu Dockeru:

Krok 7 – Export a import Docker obrazu
Nyní máme funkční Docker obraz hostující náš Python server. S pomocí funkcí exportu a importu v Dockeru jej můžeme migrovat na jakýkoli jiný systém.
Nejprve zkontrolujte seznam Docker obrazů v aktuálním systému:
|
1 |
docker images |

Naším cílem je Docker obraz python_server, který jsme právě vytvořili. Následující příkaz jej exportuje jako archiv TAR:
|
1 |
docker save python_server:latest > python_server.tar |

Po přenesení souboru python_server.tar na cílový stroj použijte k importu Docker obrazu následující příkaz:
|
1 |
docker load < python_server.tar |
Závěrečné myšlenky
V této příručce jsme si ukázali vytvoření Docker obrazu z Python aplikace. Vytvořili jsme jednoduchý Python webový server a z něj sestavili Docker obraz. Tento Docker obraz lze nyní nasadit v jakémkoli prostředí a očekávat konzistentní chování.
Máte zájem dozvědět se o Dockeru více? Podívejte se na následující návody:
-
Sestavení a nasazení aplikace Flask pomocí Dockeru na Ubuntu 20.04
-
Jak zabezpečit a škálovat aplikaci Django pomocí Dockeru, Nginx a Let’s Encrypt
-
Jak nasadit WordPress pomocí Docker kontejnerů na Ubuntu 20.04
Přejeme úspěšnou práci!




Komentáře
Zatím žádné komentáře. Buďte první.