Docker je nástroj s otevřeným zdrojovým kódem navržený tak, aby usnadnil vytváření, nasazení a spouštění aplikací pomocí kontejnerů. Kontejner je softwarový balíček, který balí kód a všechny jeho závislosti, takže aplikace běží rychle a spolehlivě z jednoho výpočetního prostředí do druhého.
Flask je populární webový rámec Pythonu. Je klasifikován jako mikrorámec, protože nevyžaduje zvláštní nástroje nebo knihovny. Ve srovnání s jinými frameworky je lehký a vysoce strukturovaný.
V tomto tutoriálu vysvětlíme, jak nasadit aplikaci Flask s Dockerem na serveru Debian 10.
Předpoklady
- Server se systémem Debian 10.
- Na vašem serveru je nakonfigurováno heslo uživatele root.
Začínáme
Než začnete, je dobré aktualizovat balíček vašeho systému na nejnovější verzi. Všechny balíčky můžete aktualizovat pomocí následujícího příkazu:
apt-get update -y
apt-get upgrade -y
Jakmile jsou všechny balíčky aktualizovány, restartujte systém, aby se změny projevily.
Instalovat požadované závislosti
Dále budete muset nainstalovat webový server Nginx a další závislosti do vašeho systému. Všechny je můžete nainstalovat pomocí následujícího příkazu:
apt-get install nginx apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -y
Jakmile jsou všechny balíčky nainstalovány, můžete přejít k dalšímu kroku.
Instalovat Docker
Ve výchozím nastavení není nejnovější verze Dockeru k dispozici v úložišti Debian 10. Je tedy dobré jej nainstalovat z oficiálního úložiště Docker.
Nejprve si stáhněte a přidejte klíč GPG pomocí následujícího příkazu:
wget https://download.docker.com/linux/debian/gpg apt-key přidat gpg
Dále přidejte úložiště Docker pomocí následujícího příkazu:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"
Dále aktualizujte úložiště a nainstalujte Docker pomocí následujícího příkazu:
apt-get update -y
apt-get install docker-ce -y
Po úspěšném dokončení instalace ověřte stav Dockeru pomocí následujícího příkazu:
systemctl status docker
Měli byste získat následující výstup:
? docker.service – Docker Application Container Engine Načteno:načteno (/lib/systemd/system/docker.service; povoleno; přednastaveno dodavatelem:povoleno) Aktivní:aktivní (běží) od Ne 2020-04-19 06:26:25 UTC; Před 1 minutou 8 s Dokumenty:https://docs.docker.com Hlavní PID:8883 (dockerd) Úkoly:10 Paměť:46,6M CGroup:/system.slice/docker.service ??8883 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sockApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413828757Z" level=warning msg="Váš ker nepodporuje swap memory limitApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413876690Z" level=warning msg="Vaše jádro nepodporuje cgroup rt period"06. dubna:19 26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413889604Z" level=warning msg="Vaše jádro nepodporuje cgroup rt runtimeApr 19 06:26:24 debian10 dockerd:="2020-04-19T06:26:24.414115814Z" level=info msg="Načítání kontejnerů:start."Apr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:2833:2444 Z" level=info msg="Výchozí most (docker0) je přiřazen s IP aApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.972022325Z" lev el=info msg="Načítání kontejnerů:hotovo." 19. dubna 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.010940205Z" level=info msg="Démon Docker" commit=afacb8b7f0 graphdriver(s)=oApr 19 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.011145541Z" level=info msg="Daemon dokončil inicializaci 2906" 25 debian10 systemd[1]:Spuštěn Docker Application Container Engine. 19. dubna 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.074603639Z" level=info msg="API listen on / var/run/docker.sock"
V tomto okamžiku je Docker nainstalován a spuštěn. Nyní můžete přejít k dalšímu kroku.
Nastavení adresářové struktury lahvičky
Dále budete muset vytvořit adresářovou strukturu pro uložení vaší aplikace Flask.
Vytvořme adresář s názvem flask v adresáři /var/www/:
mkdir -p /var/www/flask
Dále změňte adresář na flask a vytvořte adresářovou strukturu pro flask:
cd /var/www/flask
mkdir -p app/static
mkdir -p app/templates
Statický adresář se používá k ukládání obrázků, souborů CSS a JavaScript, zatímco adresář šablon se používá k ukládání šablon HTML pro váš projekt.
Dále budete muset vytvořit soubor __init__.py v adresáři aplikace:
nano app/__init__.py
Přidejte následující obsah, abyste vytvořili instanci Flask a importovali logiku ze souboru views.py:
z importu baňky Flaskapp =Flask(__name__)z zobrazení importu aplikace
Uložte a zavřete soubor a poté vytvořte soubor views.py v adresáři aplikace.
nano app/views.py
Přidejte následující řádky
z app import [email protected]('/')def home():return "ahoj světe!"
Uložte a zavřete soubor a poté vytvořte soubor uwsgi.ini pomocí následujícího příkazu:
nano uwsgi.ini
Tento soubor bude obsahovat konfigurace uWSGI pro naši aplikaci, jak je uvedeno níže:
[uwsgi]module =maincallable =appmaster =true
Po dokončení uložte a zavřete soubor. uWSGI je možnost nasazení pro Nginx, který je protokolem i aplikačním serverem.
Dále budete muset vytvořit soubor main.py pro import instance Flask s názvem app z balíčku aplikace. Můžete jej vytvořit pomocí následujícího příkazu:
nano main.py
Přidejte následující řádek:
z aplikace pro import aplikací
Po dokončení uložte a zavřete soubor. Dále vytvořte soubor requirements.txt pro určení závislostí, které správce balíčků pip nainstaluje do vašeho nasazení Docker:
nano requirements.txt
Přidejte následující řádek, který odpovídá nejnovější verzi Flask:
Flask==1.1.2
Po dokončení uložte a zavřete soubor.
V tomto okamžiku byla vaše aplikace Flask úspěšně nakonfigurována. Nyní můžete přejít k dalšímu kroku.
Konfigurace Dockeru pro nasazení Flask
Dále budete muset vytvořit soubor Dockerfile k sestavení a nasazení aplikace flask.
Nejprve vytvořte soubor Dockerfile pomocí následujícího příkazu:
cd /var/www/flask
nano Dockerfile
Přidejte následující řádky:
Z tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7RUN apk --update add bash nanoENV STATIC_URL /staticENV STATIC_PATH /var/www/app/staticCOPY ./requirements.txt /var/www/requirements. txtRUN pip install -r /var/www/requirements.txt
Po dokončení uložte a zavřete soubor. Dále vytvořte skript start.sh pro vytvoření obrázku z Dockerfile a vytvořte kontejner z výsledného obrázku Docker.
nano start.sh
Přidejte následující řádek:
#!/bin/bashapp="docker.test"docker build -t ${app} .docker run -d -p 56733:80 \ --name=${app} \ -v $PWD:/app ${app}
Po dokončení uložte a zavřete soubor.
Poznámka :Ujistěte se, že je port 56733 volný a použitelný.
Nakonec spusťte skript pomocí následujícího příkazu:
bash start.sh
Tím se vytvoří obrázek Docker a z výsledného obrázku vytvoří kontejner, jak je znázorněno níže:
Odeslání kontextu sestavení do démona Docker 9,728kBKrok 1/6 :Z tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7python3.6-alpine3.7:Stahování z tiangolo/uwsgi-nginx-flask48ecbb6 dokončeno:Pull70ecbb6 692f29ee68fa:Úplné vytažení f75fc7ac1098:Úplné vytažení c30e40bb471c:Úplné vytažení Úspěšně postaveno f5dec1ce82Úspěšně označeno docker.test:latest22cd2bd23c9190cf2905>8a2757d76c18e40fa1d76cNyní můžete vypsat spuštěné kontejnery pomocí následujícího příkazu:
docker psMěli byste získat následující výstup:
ID KONTEJNERU PŘÍKAZ OBRÁZKU VYTVOŘEN STAV NÁZVY PORTŮ22cd2bd23c91 docker.test "/entrypoint.sh /sta…" Asi před minutou Nahoru Asi před minutou 443/tcp, 0.0.0.0:56733->80/tcp docker.test před>Kontejner Docker můžete také ověřit na adrese URL http://ip-ip-vašeho-serveru:56733. Měli byste vidět následující obrazovku:
Nasadit soubory šablon
Můžete také nasadit soubory šablon pro poskytování statického a dynamického obsahu. Šablonu domovské stránky pro vaši aplikaci můžete vytvořit pomocí následujícího příkazu:
nano app/templates/home.htmlPřidejte následující kódy:
Uvítací láhev Domovská stránka
Toto je domovská stránka naší aplikace pro láhev.
Po dokončení uložte a zavřete soubor. Dále budete muset upravit soubor views.py, aby sloužil nově vytvořenému souboru:
nano app/views.pyAktualizujte soubor, jak je uvedeno níže:
z baňky importovat render_templatefrom app import [email protected]('/')def home():return "hello world!"@app.route('/template')def template():return render_template('home .html')Uložte a zavřete soubor. Poté budete muset restartovat kontejnery Docker, abyste použili změny.
Kontejner Docker s názvem docker.test můžete restartovat pomocí následujícího příkazu:
docker stop docker.test
docker start docker.testNyní otevřete webový prohlížeč a zadejte adresu URL http://ip-vaseho-serveru:56733/template. Nově vytvořenou šablonu byste měli vidět na následující obrazovce:
Závěr
Gratulujeme! úspěšně jste nasadili aplikaci Flask s Dockerem na serveru Debian 10. Nyní můžete replikovat aplikaci na různých serverech s minimální rekonfigurací. Pokud máte nějaké dotazy, neváhejte se mě zeptat.
Debian