Analýza dat, Programování

Docker – prostředí pro analýzu trhů

16 července, 2019

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…

ilustr. obr. (zdroj: https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook)

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.

You Might Also Like