Docker je sada nástrojů pro kontejnerizaci aplikací. To znamená, že lze aplikaci a její závislosti zabalit do tzv. kontejneru. Tento kontejner pak lze velmi snadno spustit na druhém počítači, aniž bychom museli řešit instalaci operačního systému, závislostí a tak dále. Jednou z takových aplikací je Python, Jupyter a používané závislosti ve scriptech v Jupyter notebooku…
Pro mé potřeby bude plně dostačovat verze Docker-CE (community edition), která je zcela zdarma a obsahuje vše potřebné pro rychlou přípravu prostředí analýzy trhů. Jak nainstalovat na windows lze najít na https://docs.docker.com/docker-for-windows/, a pro Mac https://docs.docker.com/docker-for-mac/. Pro linux je návod na https://docs.docker.com/install/.
Nejprve si připravím složku, ve které chci mít jupyter notebooky pro analyzování trhů. Do té si vytvořím soubor s názvem Dockerfile
. Dokerfile
je taková šablona, jak by mělo prostředí vypadat. Takže když si ho jednou připravím, bude pořád stejné tak, jak jsem ho připravil, a můžu ho spustit na Windows, Linuxu, nebo Mac. Především mám jistotu, že knihovny a prostředí budou vždy obsahovat vše, co potřebuji a ve verzích, jaké potřebuji.
Příklad Dockerfile
pro mé vývojové prostředí:
FROM python:3.8-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt --no-cache-dir
EXPOSE 8080
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8080", "."]
První řádek určuje tzv. image, jinou šablonu, ze které vycházím. Využil jsem služby https://hub.docker.com/, kde vývojáři pythonu připravili image, kde už je python nainstalován.
V WORKDIR /app
řádek říká, kde, v jakém souboru konkrétně, se uvnitř mého prostředí budu pohybovat. Běžícímu prostředí se říká container
.
COPY requirements.txt .
říká, že z mé aktuální složky, kde je umístěný Dockerfile
, se zkopíruje soubor requirements.txt
dovnitř kontejneru. Soubor requirements.txt
obsahuje potřebné knihovny, které budu využívat pro analýzu trhů. Obsah souboru requirements.txt
může vypadat např. takto:
numpy==1.17.4
pandas==0.25.3
jupyterlab==1.2.3
RUN pip install -r requirements.txt --no-cache-dir
pak doinstaluje do mého prostředí potřebné knihovny.
Poslední dva řádky s EXPOSE
a CMD
se postarají o spuštění serveru pro mé vývojové prostředí s Jupyter Lab.
Docker nyní používá pro přípravu prostředí příkaz docker build .
a pro spuštění docker run <id image, které se získá z předchozího příkazu>
. Abych nemusel pokaždé používat dva příkazy, vytvořím si ještě jeden soubor s názvem docker-compose.yml
:
version: '3.7'
services:
lab:
build: .
volumes:
- .:/app
ports:
- "8080:8080"
command: ["jupyter", "lab", "--allow-root", "--ip=0.0.0.0", "--port=8080", "."]
Nástroj docker-compose
využije soubor docker-compose.yml
jako návod, jak připravit, spustit mé analytické prostředí. Soubor docker-compose.yml
definuje, že chci spustit jednu šablonu s názvem lab
, ta se vezne z aktuálního adresáře (build: .
). Pomocí sekce volumes
pak říkám, že chci soubory z aktuálního adresáře automaticky propsat dovnitř do mého analytického prostředí. Tím zajistím, že uvnitř můžu zobrazit své Jupyter notebooky. A zbytek je ekvivalent s posledními dvěma řádky v Dockerfile
.
Nakonec své analytické prostředí spustím pomocí příkazu docker-compose up --build
. Výsledek může vypadat podobně:
Ve výstupu konzole pak vidím, jakou adresu mám použít do internetového prohlížeče pro přístup ke svému analytickému prostředí Jupyter Lab.