GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak dockerizovat aplikace Pythonu pomocí Miniconda [hybridní přístup]

Pokud znáte Docker, pravděpodobně víte, že můžete vytvořit vlastní image dockeru pomocí Dockerfile. Psal jsem o tom podrobně.

Jak vytvořit vlastní obrázek dockeru pomocí souboru Dockerfile [velmi snadné] Skutečná síla Dockeru spočívá ve vyladění základního obrázku dockeru podle vašich požadavků. Díky tomu můžete snadno a rychle nasadit vlastní prostředí Linuxu spuštěním kontejneru z tohoto vlastního obrazu dockeru. Příručka pro LinuxAvimanyu Bandyopadhyay

V tomto tutoriálu vám ukážu, jak postupovat podle stejného nápadu, ale pouze pro aplikace Python. To bude užitečné pro uživatele i vývojáře.

Budu používat minimální obrázek Pythonu. Jakmile tento obraz upravíte a zrevidujete, již se nebudete muset starat o instalaci aplikace Python na různé operační systémy. Budete moci okamžitě spustit aplikaci Python pomocí Dockeru pokaždé. Takže se můžete rozloučit s těmito hostitelskými instalačními škytavkami!

Vytvoření obrazu dockeru pro vaši aplikaci Python

Zde budu používat Minicondu. Miniconda je bezplatný minimální instalátor pro conda a poskytuje vám malou bootstrap verzi Anacondy s pouhými nezbytnostmi, které potřebujete ke spouštění aplikací Python.

Proč Miniconda?

Existuje více než jeden důvod:

Když instalujete Miniconda na hostitele, ve skutečnosti nepoužíváte verzi Pythonu poskytovanou správcem balíčků operačního systému. Miniconda se instaluje na samostatné umístění s vlastním prostředím Pythonu. To vám tedy poskytuje přidanou úroveň izolace, když to děláte na kontejneru Docker.

Vzhledem k výše uvedenému bodu získáte také další výhodu:Protože používáte conda že jste nainstalovali Miniconda, můžete tento nástroj použít ke změně příslušné verze Pythonu vaší aplikace podle potřeby. Toto je obrovská pomoc pro vývojáře aplikací, které jsou založeny řekněme na různých verzích Pythonu 3:Mohou to být i verze 3.6, 3.7, 3.8, 3.9 nebo dřívější verze.

Pokud například ve výchozím nastavení používáte Python 3.9, ale vaše aplikace Python vyžaduje Python 3.7 kvůli relevantním závislostem, co byste udělali?

Zde je conda mohu vám pomoci. S ním můžete spustit conda install python=3.7 změnit požadovanou verzi Pythonu jeho instalací se všemi nezbytnými závislostmi.

  • Miniconda vám umožňuje nainstalovat aplikace Python 2 i Python 3. Přestože je Python 2 oficiálně mrtvý, stále můžete v tomto prostředí testovat starší aplikace, aniž byste museli auditovat svůj nový port Pythonu 3 pomocí 2to3.
  • Existuje také mnoho případů použití, kdy aplikace Python běžící na Miniconda hledá jiné závislosti na hostitelské straně než Python (například g++ ). Právě tehdy se spojení výkonu Miniconda a Docker stává skvělým řešením!
  • Zapomněl jsem zmínit, že pomocí conda můžete také vytvářet a aktivovat své vlastní prostředí aplikace Python ? Znovu izolace!
  • Vždy máte možnost přepnout mezi výchozí verzí Pythonu kontejneru Docker a verzí Miniconda. To vám dává větší flexibilitu, protože kdykoli budete chtít, můžete se změnou vždy znovu vytvořit nový obrázek.

Pojďme nyní k vytvoření nového obrazu aplikace Python pomocí Miniconda a Docker!

Předpoklad

Pokud jste tak ještě neučinili, nainstalujte si Docker na Ubuntu nebo na kteroukoli distribuci Linuxu, kterou používáte. Nezapomeňte se přidat do skupiny dockerů, abyste mohli spouštět docker bez sudo. Ke stažení základní bitové kopie dockeru budete potřebovat aktivní připojení k internetu.

Pro ukázkovou aplikaci v Pythonu používám jednoduché "Ahoj světe!" příklad s názvem python-app.py abyste snáze pochopili, jak jej spustit prostřednictvím Miniconda na Dockeru.

Plnohodnotná aplikace Python, která používá různé knihovny Pythonu, by velmi těžila ze stejného postupu, zejména kvůli různým ustanovením o závislostech Miniconda.

Krok 1:Získejte obrázek Dockeru [volitelné]

Místo Alpine Linuxu jsem v tomto příkladu zvolil Python Slim. Ten je opravdu malý, ale může výrazně ovlivnit výkon, pokud jde o spouštění aplikací. Python Slim má však velikost kolem 40 MB, na základě Debian Buster a Pythonu 3.9.1.

Tento krok je volitelný. Zahrnul jsem jej, abych ukázal, že jej můžete porovnat s upraveným obrázkem aplikace python jako v předchozím tutoriálu Dockerfile.

Stáhněte nejnovější obrázek dockeru Python Slim pomocí docker pull příkaz:

docker pull python:slim

Krok 2:Vytvořte Dockerfile s potřebným přizpůsobením

Nyní vytvořte nový prázdný soubor s názvem Dockerfile pomocí dotykového příkazu. Nejprve však vytvořte adresář pro aplikaci dockeru.

mkdir python-docker
cd python-docker
touch Dockerfile

Níže přiložím kompletní soubor Dockerfile poté, co dokončím vysvětlování kroků v procesu vytváření obrazu prostřednictvím podrobného průvodce souborem.

Zde je návod, jak začít a postupovat při vytváření image:

Připravte základní obrázek

Aktualizujte nejnovější výchozí balíčky pomocí Python Slim jako základního obrazu.

FROM python:slim
RUN apt-get update && apt-get -y upgrade \

Instalace závislostí balíčků mimo Python

Nainstalujte si pro svou aplikaci Python všechny závislosti mimo Python (řekněme g++ a jakékoli jiné podle vašeho požadavku).

  && apt-get install -y --no-install-recommends \
    git \
    wget \
    g++ \
    gcc \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

Git a Wget mohou být velmi užitečné při načítání aplikací Python z různých úložišť a adres URL. Nakonec vyčistěte místo pomocí rm -rf /var/lib/apt/lists/* pro minimalizaci konečné velikosti obrázku Docker.

Instalovat Miniconda

Po instalaci Miniconda aktualizuje .bashrc, aby přešel na vlastní verzi Pythonu.

ENV PATH="/root/miniconda3/bin:${PATH}"
ARG PATH="/root/miniconda3/bin:${PATH}"
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh \

Zde je v systémové cestě kontejneru nastavena proměnná prostředí. ENV je určen pro kontejnery, které budete spouštět na obrázku a ARG je určen pro mezilehlé kontejnery, které se vytvářejí, když je sestavován poprvé.

Rozdíl mezi ENV a ARG instrukce ve výše uvedeném bloku kódu je, že blok kódu je dostupný pouze během vytváření obrazu. Podívejte se na toto krásné vysvětlení zde.

Pomocí wget , stáhněte si nejnovější verzi Miniconda z oficiálního úložiště Anaconda. Po vytvoření základního konfiguračního adresáře jej nainstalujte a nakonec instalační program odeberte.

Konfigurace Miniconda do prostředí Bash Shell

Po instalaci Minicondy zobrazte číslo její verze pro potvrzení a inicializujte ji do prostředí Bash pro kontejner . Druhý řádek aktualizuje váš výchozí .bashrc soubor:

	&& echo "Running $(conda --version)" && \
    conda init bash && \

Načtěte znovu Bash s novými změnami

Znovu načtěte Bash pro sestavení systému Docker a přepněte na verzi Miniconda Python namísto Debianu (základní obraz OS).

	. /root/.bashrc && \

Aktualizujte také aktuální balíčky Miniconda přibalené ve výchozím nastavení.

	conda update conda && \

Připravte prostředí Conda pro svou aplikaci

Vytvořte a aktivujte samostatné prostředí Conda pro vaši aplikaci Python.

    conda create -n python-app && \
    conda activate python-app && \

Nainstalujte si příslušnou verzi Pythonu, kterou potřebujete pro svou aplikaci. Za předpokladu, že vaše aplikace je založena na Pythonu 3.6, nastavte tuto verzi v novém virtuálním prostředí spolu s Pip, což je také velmi užitečné při správě aplikací Python.

    conda install python=3.6 pip && \

Nainstalujte si aplikaci Python

V závislosti na tom, jak aplikaci používáte, můžete:

i. Nainstalujte jej pomocí pipu, který konvenčně používá setup.py soubor dostupný ve vašem úložišti. Je to stejný nástroj, o kterém jsme hovořili dříve, ale zde jej místo toho používám přes Conda.

	git clone replace-me-with-repo-url
	cd repo-name
	pip install -e .

ii. ..nebo jej přímo spusťte pomocí python příkaz:

	git clone replace-me-with-repo-url
	cd repo-name
	python python-app.py

V demo Dockerfile budu používat "Hello World!" příklad, který vám usnadní pochopení toho, jak jej můžete spustit přímo spuštěním kontejneru nebo uvnitř jeho bash shellu pomocí Dockeru. Řekněme tedy, že používám 2. způsob:

    echo 'print("Hello World!")' > python-app.py

Takže teď, když jsem zahrnul výše uvedený řádek, soubor s názvem python-app.py je vytvořen, který má vygenerovat zprávu Hello World, kdykoli ji spustíte pomocí příkazu python python-app.py .

Aktualizujte soubor .bashrc pro svou aplikaci jako Miniconda:

Instalační program Miniconda automaticky aktualizuje soubor .bashrc po spuštění conda init bash jak bylo ukázáno dříve. Totéž můžete udělat pro svou aplikaci Python. Kdykoli spustíte kontejner bash, prostředí se aktivuje a můžete také použít název své aplikace Python jako příkaz k jeho spuštění. Zde jsem použil název jako python-app :

RUN echo 'conda activate python-app \n\
alias python-app="python python-app.py"' >> /root/.bashrc

Připravte aplikaci na konečné spuštění

Nakonec vytvořím vstupní bod a přiřadím příkaz, který vám umožní jej spustit pokaždé, když spustíte kontejner na základě tohoto obrázku:

ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
CMD ["python python-app.py"]

Úplný soubor Dockerfile

Můžete použít editor jako Vim nebo Nano nebo použít cat příkaz k přidání výše uvedených řádků do Dockerfile.

FROM python:slim
RUN apt-get update && apt-get -y upgrade \
  && apt-get install -y --no-install-recommends \
    git \
    wget \
    g++ \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*
ENV PATH="/root/miniconda3/bin:${PATH}"
ARG PATH="/root/miniconda3/bin:${PATH}"
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh \
    && echo "Running $(conda --version)" && \
    conda init bash && \
    . /root/.bashrc && \
    conda update conda && \
    conda create -n python-app && \
    conda activate python-app && \
    conda install python=3.6 pip && \
    echo 'print("Hello World!")' > python-app.py
RUN echo 'conda activate python-app \n\
alias python-app="python python-app.py"' >> /root/.bashrc
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
CMD ["python python-app.py"]

Když zkoušíte svou vlastní aplikaci, nahraďte echo 'print("Hello World!")' > python-app.py řádek výše kterýmkoli ze dvou způsobů popsaných v části Instalace aplikace Python sekce výše.

Krok 3:Vytvořte obraz aplikace Python pomocí souboru Dockerfile

Jak již možná víte, příkaz k vytvoření upraveného obrazu Dockeru z Dockerfile vypadá takto:

docker build -t python-app PATH_to_Dockerfile

Pomocí značky -t určíte název obrázku Docker vaší aplikace. Nastavil jsem to jako python-app ve výše uvedeném příkladu příkazu.

Vzhledem k tomu, že soubor Docker je ve vašem aktuálním adresáři, můžete vytvořit nový obraz Docker vaší aplikace Python takto:

docker build -t python-app .
[email protected]:~/python-docker$ docker build -t python-app .
Sending build context to Docker daemon   2.56kB
Step 1/8 : FROM python:slim
 ---> 677f7ac99e48
Step 2/8 : RUN apt-get update && apt-get -y upgrade   && apt-get install -y --no-install-recommends     git     wget     g++     ca-certificates     && rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 15ee9c47c83b
Step 3/8 : ENV PATH="/root/miniconda3/bin:${PATH}"
 ---> Using cache
 ---> cfd5ed6b5ec9
Step 4/8 : ARG PATH="/root/miniconda3/bin:${PATH}"
 ---> Using cache
 ---> e70d06b5ff10
Step 5/8 : RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh     && mkdir /root/.conda     && bash Miniconda3-latest-Linux-x86_64.sh -b     && rm -f Miniconda3-latest-Linux-x86_64.sh     && echo "Running $(conda --version)" &&     conda init bash &&     . /root/.bashrc &&     conda update conda &&     conda create -n python-app &&     conda activate python-app &&     conda install python=3.6 pip &&     echo 'print("Hello World!")' > python-app.py
 ---> Using cache
 ---> 8a7957a6abb2
Step 6/8 : RUN echo 'conda activate python-app \nalias python-app="python python-app.py"' >> /root/.bashrc
 ---> Running in e3193e93b631
Removing intermediate container e3193e93b631
 ---> 948f45eb6024
Step 7/8 : ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
 ---> Running in 621624951dcf
Removing intermediate container 621624951dcf
 ---> 6e8824889502
Step 8/8 : CMD ["python python-app.py"]
 ---> Running in dc97f9d0d8fe
Removing intermediate container dc97f9d0d8fe
 ---> 01bae0a9903c
Successfully built 01bae0a9903c
Successfully tagged python-app:latest

Výše uvedený výstup je založen na datech uložených v mezipaměti, ale když jej spustíte poprvé, bude to nějakou dobu trvat a vytvoří mnohem delší protokol.

Nyní ověřte, že váš upravený obrázek Dockeru má nainstalovanou ukázkovou aplikaci spuštěním kontejneru z něj:

docker run python-app
[email protected]:~/python-docker$ docker run python-app
Hello World!

Takže prostřednictvím Docker a Miniconda jste nyní schopni spustit program přímo bez nutnosti předchozí instalace! Od této chvíle budete potřebovat pouze obrázek.

Nyní se přihlaste do bash shellu uvnitř tohoto kontejneru:

docker run -ti python-app bash
[email protected]:~/python-docker$ docker run -ti python-app bash
(python-app) [email protected]:/# 

Jak můžete vidět, nyní se nacházíte v prostředí aktivovaném Conda, které jste vytvořili dříve prostřednictvím Dockerfile. -ti flag se používá k vytvoření interaktivního terminálu pro vás. Nyní můžete alternativně ke spuštění aplikace použít příkaz, který jste přiřadili:

(python-app) [email protected]:/# python-app
Hello World!

Potvrďte také, že skutečně používáte verzi Miniconda Python a nikoli výchozí verzi Pythonu:

(python-app) [email protected]:/# python --version
Python 3.6.12 :: Anaconda, Inc.

Jak jsem již dříve zmínil, Miniconda je miniaturizovaná verze Anacondy.

Jakmile budete mít vše nastaveno, můžete odeslat svůj konečný obrázek do Docker Hub, pokud hostujete aplikaci Open Source Python na GitHubu, GitLab, Gitea, Bitbucket nebo jakémkoli jiném úložišti.

Opusťte kontejner zadáním exit do terminálu. Zastavte kontejner, vyjměte kontejner a odeberte obrazy Docker (pokud chcete), abyste uvolnili místo na disku.

Gratuluji! Právě jste se naučili, jak vytvořit svůj vlastní obrázek Docker pro vaši aplikaci Python.

Bylo to pro vás užitečné?

Jak vidíte, Miniconda vám nejen pomáhá učinit vaši aplikaci flexibilnější a odolnější do budoucna na uživatelské úrovni, ale také výrazně usnadňuje roli vývojáře.

Představte si, jak pohodlné by bylo nastavení pomocí PyCharm! Minicondu a svou aplikaci Python nainstalujete stejně jako na hostitelský systém, ale protože jej vytvoříte a uložíte jako obraz Dockeru, stane se to pouze jednorázovým procesem!

Pokud chcete, můžete experimentovat s různými příklady uvedenými v tomto předchozím tutoriálu namísto "Hello World!" příklad, který jsem použil v tomto.

Snad to pomůže! Pokud máte dotazy nebo návrhy, zanechte prosím níže komentář.


Docker
  1. Jak nainstalovat a hostovat server OpenVPN pomocí Dockeru

  2. Jak nainstalovat Jenkins pomocí Docker

  3. Jak nasadit mikroslužby s Dockerem

  1. Jak nainstalovat WordPress s Dockerem, snadno sledovatelný průvodce

  2. Jak vytvořit kontejner Anaconda Python Data Science Docker

  3. Jak sdílet obrázky Docker s ostatními

  1. Jak nasadit aplikace s Rancherem

  2. Jak nasadit kontejner nginx s Dockerem na Linode

  3. Jak Dockerize Python aplikací s Miniconda