Best Flask open-source libraries and packages

Infra server env build practice

CLI<-->Nginx<-->Gunicorn -- Flaskの構成でAPPを作成しherokuへデプロイする練習リポジトリ。
Updated 1 year ago

概要

以下の練習を行うためのリポジトリ。 ※ApplicationサーバはFlaskで作成。このサーバの処理内容はhealthチェックAPIくらいしか持たない(この部分はこのリポジトリのコア目的ではないため)

  1. Nginx+Gunicorn(uWSGI)にてWebサーバ+APPサーバの構成をローカルで立ち上げられるようにする。[Completed]
  2. 1の設定をheroku上でデプロイ。[Skip]
  3. Webサーバ、APPサーバをDocker化。[Completed]
  4. 3をdocker-composeで管理[Now]
  5. DBサーバ(PostgresSQL)をかませる。[Order Changed]
  6. Ansible等を利用してさらなる管理効率化。

Commands

  • make build - app-server、web-serverコンテナイメージをビルド
  • make run - appサーバ、webサーバのコンテナをdocker-composeにて起動。基本はこれを利用。
  • make run_web - webサーバコンテナを起動
  • make run_app - appサーバコンテナを起動
  • make cleanup - 停止コンテナを破棄、さらにapp-server、web-serverコンテナイメージを削除

Access

http://localhost:8000/ http://localhost:8000/health/ http://localhost:8000/test/

Tips

docker-compose

1つのYAMLファイルに複数のDockerコンテナ定義を行い、 複数コンテナの管理、連携を効率化するツール。k8sよりも手軽に使える分、k8sよりもできることはかなり少ない。ローカルでLTレベルの動作確認を行うのであればこれで十分だと思われる。

起動コマンド

docker-compose -f {YAML_FILE} up -d

オプション

  • -f {YAML_FILE} : 起動時のyamlファイルを指定。指定なしだとカレントの「docker-compose.yml」が設定される。
  • -d : upのオプション。バックグラウンドで実行される。逆に-dを指定しなければ、ターミナル上にcompose構成コンテナのログを見ることができる。

docker

イメージの作成

docker image build -f deployment/dockerfiles/web-server/Dockerfile -t centos:nginxtest . # 最後の「.」がカレントディレクトリで実行の意

オプション

  • -f {DOCKER_FILE} : Dockerファイルの指定。
  • -t タグの指定.「:」の左側がリポジトリ名称、右側がタグ名称となる。

コンテナ作成

docker run --rm --name nginx_test -p 9090:9123 centos:nginxtest

オプション

  • --rm : 終了時、自動的にコンテナを削除
  • --name : コンテナの名称を指定
  • -p : ポートフォワーディング。左側がDockerコンテナのポート、右側がホストPCのポート。

その他のDockerコマンド

  • docker ps : 現在稼働中のコンテナの一覧。「-a」をつけるとすべてのコンテナを表示。
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
bc967a8d3527        centos:nginxtest    "nginx -g 'daemon of…"   4 seconds ago       Up 2 seconds        80/tcp, 0.0.0.0:9090->9123/tcp   nginx_test
  • docker images/ docker image ls : イメージ一覧。「-a」をつけると中間イメージも含めて表示
  • docker container rm {CONTAINER_ID} : 指定したコンテナを削除
  • docker image rm {IMAGE_ID} : 指定したイメージを削除。ただし、指定イメージで作成されたコンテナが存在している場合エラーとなる。この場合、コンテナを削除してからイメージを削除する必要あり。
  • docker exec {CONTAINER_NAME} {COMMAND} : 稼働中のコンテナ内で{COMMAND}を実行。結果はコンソールに表示。
  • docker attach {CONTAINER_NAME} : 稼働中のコンテナ内部に入る。Ctrl+Qでホストの戻ることができる。

ホストOS上のコンテナ間通信

link or networkでの接続が可能。ただしlinkは公式ドキュメント上でlegacy featureとされており、推奨されていない。よってnetworkよりデフォルトで提供されるBridgeインターフェースを用いる。

  • ネットワークの確認
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
518552b941b8        bridge              bridge              local <-使うのはこれ
be46431a0b28        host                host                local
50e2c508a603        none                null                local
  • 独自Bridgeネットワークの作成
docker network create --driver bridge {NW_NAME}
docker network inspect {NW_NAME}  # 確認用コマンド
  • コンテナをネットワークに所属させて起動
docker container run --network {NW_NAME} {IMAGE_NAME}