GNU/Linux >> Linux の 問題 >  >> Debian

Debian10でDockerを使用してFlaskアプリケーションをDocker化する

Dockerは、コンテナーを使用してアプリケーションを簡単に作成、デプロイ、実行できるように設計されたオープンソースツールです。コンテナは、コードとそのすべての依存関係をパッケージ化するソフトウェアパッケージであるため、アプリケーションは、あるコンピューティング環境から別のコンピューティング環境へと迅速かつ確実に実行されます。

Flaskは人気のあるPythonWebフレームワークです。特定のツールやライブラリを必要としないため、マイクロフレームワークとして分類されます。他のフレームワークと比較して、軽量で高度に構造化されています。

このチュートリアルでは、Debian10サーバーにDockerを使用してFlaskアプリケーションをデプロイする方法を説明します。

前提条件
  • Debian10を実行しているサーバー。
  • ルートパスワードはサーバーで構成されています。
はじめに

開始する前に、システムのパッケージを最新バージョンに更新することをお勧めします。次のコマンドを使用して、すべてのパッケージを更新できます。

apt-get update -y
apt-get upgrade -y

すべてのパッケージが更新されたら、システムを再起動して変更を適用します。

必要な依存関係をインストールする

次に、NginxWebサーバーとその他の依存関係をシステムにインストールする必要があります。次のコマンドを使用して、それらすべてをインストールできます。

apt-get install nginx apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -y

すべてのパッケージがインストールされたら、次のステップに進むことができます。

Dockerをインストールする

デフォルトでは、最新バージョンのDockerはDebian10リポジトリで利用できません。したがって、Docker公式リポジトリからインストールすることをお勧めします。

まず、次のコマンドを使用してGPGキーをダウンロードして追加します。

wget https://download.docker.com/linux/debian/gpg apt-key add gpg

次に、次のコマンドを使用してDockerリポジトリを追加します。

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"

次に、リポジトリを更新し、次のコマンドを使用してDockerをインストールします。

apt-get update -y
apt-get install docker-ce -y

インストールが正常に完了したら、次のコマンドを使用してDockerのステータスを確認します。

systemctl status docker

次の出力が得られるはずです:

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-04-19 06:26:25 UTC; 1min 8s ago
     Docs: https://docs.docker.com
 Main PID: 8883 (dockerd)
    Tasks: 10
   Memory: 46.6M
   CGroup: /system.slice/docker.service
           ??8883 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Apr 19 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.413828757Z" level=warning msg="Your kernel does not support swap memory limit
Apr 19 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.413876690Z" level=warning msg="Your kernel does not support cgroup rt period"
Apr 19 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.413889604Z" level=warning msg="Your kernel does not support cgroup rt runtime
Apr 19 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.414115814Z" level=info msg="Loading containers: start."
Apr 19 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.788332166Z" level=info msg="Default bridge (docker0) is assigned with an IP a
Apr 19 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.972022325Z" level=info msg="Loading containers: done."
Apr 19 06:26:25 debian10 dockerd[8883]: time="2020-04-19T06:26:25.010940205Z" level=info msg="Docker daemon" commit=afacb8b7f0 graphdriver(s)=o
Apr 19 06:26:25 debian10 dockerd[8883]: time="2020-04-19T06:26:25.011145541Z" level=info msg="Daemon has completed initialization"
Apr 19 06:26:25 debian10 systemd[1]: Started Docker Application Container Engine.
Apr 19 06:26:25 debian10 dockerd[8883]: time="2020-04-19T06:26:25.074603639Z" level=info msg="API listen on /var/run/docker.sock"

この時点で、Dockerがインストールされて実行されています。これで、次のステップに進むことができます。

フラスコディレクトリ構造の設定

次に、Flaskアプリケーションを保持するためのディレクトリ構造を作成する必要があります。

/ var / www/ディレクトリ内にflaskという名前のディレクトリを作成しましょう:

mkdir -p /var/www/flask

次に、ディレクトリをフラスコに変更し、フラスコのディレクトリ構造を作成します。

cd /var/www/flask
mkdir -p app/static
mkdir -p app/templates

静的ディレクトリは画像、CSS、JavaScriptファイルを保存するために使用され、テンプレートディレクトリはプロジェクトのHTMLテンプレートを保存するために使用されます。

次に、アプリディレクトリ内に__init__.pyファイルを作成する必要があります:

nano app/__init__.py

次のコンテンツを追加してFlaskインスタンスを作成し、views.pyファイルからロジックをインポートします。

from flask import Flask
app = Flask(__name__)
from app import views

ファイルを保存して閉じてから、アプリディレクトリにviews.pyファイルを作成します。

nano app/views.py

次の行を追加します

from app import app
@app.route('/')
def home():
   return "hello world!"

ファイルを保存して閉じてから、次のコマンドを使用してuwsgi.iniファイルを作成します。

nano uwsgi.ini

このファイルには、以下に示すように、アプリケーションのuWSGI構成が含まれます。

[uwsgi]
module = main
callable = app
master = true

終了したら、ファイルを保存して閉じます。 uWSGIは、プロトコルとアプリケーションサーバーの両方であるNginxの展開オプションです。

次に、main.pyファイルを作成して、アプリケーションパッケージからappという名前のFlaskインスタンスをインポートする必要があります。次のコマンドで作成できます:

nano main.py

次の行を追加します:

from app import app

終了したら、ファイルを保存して閉じます。次に、pipパッケージマネージャーがDockerデプロイメントにインストールする依存関係を指定するためのrequirements.txtファイルを作成します。

nano requirements.txt

最新バージョンのFlaskと一致する次の行を追加します。

Flask==1.1.2

終了したら、ファイルを保存して閉じます。

この時点で、Flaskアプリケーションは正常に構成されています。これで、次のステップに進むことができます。

FlaskをデプロイするようにDockerを構成する

次に、フラスコアプリケーションをビルドしてデプロイするためのDockerfileを作成する必要があります。

まず、次のコマンドを使用してDockerfileを作成します。

cd /var/www/flask
nano Dockerfile

次の行を追加します:

FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7
RUN apk --update add bash nano
ENV STATIC_URL /static
ENV STATIC_PATH /var/www/app/static
COPY ./requirements.txt /var/www/requirements.txt
RUN pip install -r /var/www/requirements.txt

終了したら、ファイルを保存して閉じます。次に、start.shスクリプトを作成して、Dockerfileからイメージを構築し、結果のDockerイメージからコンテナーを作成します。

nano start.sh

次の行を追加します:

#!/bin/bash
app="docker.test"
docker build -t ${app} .
docker run -d -p 56733:80 \
  --name=${app} \
  -v $PWD:/app ${app}

終了したら、ファイルを保存して閉じます。

:ポート56733が空いていて使用可能であることを確認してください。

最後に、次のコマンドを使用してスクリプトを実行します。

bash start.sh

これにより、Dockerイメージが作成され、以下に示すように、結果のイメージからコンテナーが構築されます。

Sending build context to Docker daemon  9.728kB
Step 1/6 : FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7
python3.6-alpine3.7: Pulling from tiangolo/uwsgi-nginx-flask
48ecbb6b270e: Pull complete 
692f29ee68fa: Pull complete 
f75fc7ac1098: Pull complete 
c30e40bb471c: Pull complete 
Successfully built f5de17e1ce82
Successfully tagged docker.test:latest
22cd2bd23c9190cf2900fa1d7c55e4765a266e68c74dc1e6858872e9ebe7bdcd

これで、次のコマンドを使用して実行中のコンテナを一覧表示できます。

docker ps

次の出力が得られるはずです:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                            NAMES
22cd2bd23c91        docker.test         "/entrypoint.sh /sta…"   About a minute ago   Up About a minute   443/tcp, 0.0.0.0:56733->80/tcp   docker.test

URL http:// your-server-ip:56733にアクセスして、Dockerコンテナを確認することもできます。次の画面が表示されます。

テンプレートファイルをデプロイする

テンプレートファイルをデプロイして、静的および動的コンテンツを提供することもできます。次のコマンドを使用して、アプリケーションのホームページテンプレートを作成できます。

nano app/templates/home.html

次のコードを追加します:

<!doctype html>

<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>Welcome Flask</title>
  </head>

  <body>
    <h1>Home Page</h1>
    <p>This is the home page of our flask application.</p>
  </body>
</html>

終了したら、ファイルを保存して閉じます。次に、新しく作成されたファイルを提供するために、views.pyファイルを変更する必要があります。

nano app/views.py

以下に示すようにファイルを更新します:

from flask import render_template

from app import app

@app.route('/')
def home():
   return "hello world!"

@app.route('/template')
def template():
    return render_template('home.html')

ファイルを保存して閉じます。次に、Dockerコンテナを再起動して変更を適用する必要があります。

次のコマンドを使用して、docker.testという名前のDockerコンテナを再起動できます。

docker stop docker.test
docker start docker.test

次に、Webブラウザーを開き、URL http:// your-server-ip:56733/templateを入力します。次の画面に、新しく作成したテンプレートが表示されます。

結論

おめでとう!これで、Debian10サーバーにDockerを使用してFlaskアプリケーションを正常にデプロイできました。これで、最小限の再構成で異なるサーバー間でアプリケーションを複製できます。ご不明な点がございましたら、お気軽にお問い合わせください。


Debian
  1. Debian – Debianで2つのディスプレイを使用していますか?

  2. Debian – Live-helperをオフラインで使用していますか?

  3. UbuntuとDebianへのDockerのインストールと使用

  1. Debian10BusterにDockerをインストールする方法

  2. Dockerガイド:PythonDjangoアプリケーションのDocker化

  3. DockerEngineをDebian11にインストールする方法

  1. Dockerガイド:Ubuntu18.04でのNodejsExpressアプリケーションのDocker化

  2. Debian11にDockerをインストールする方法

  3. Debian9にDockerをインストールする方法