はじめに
Flaskを用いてAPIで取得してきた商品データを一覧表示するだけの簡単なアプリケーションを一旦Cloud Runにデプロイしてみた際の手順を備忘録として徒然なるままにまとめてみた。
追記
アプリケーションの詳細まったく書いてなかったので別記事にでも書こうかなあと思ったり思わなかったり。
アプリケーションのディレクトリ構成
ディレクトリ構成は以下
今後機能を追加していくことを考慮してblueprintを利用
root/
├ apps/
│ ├ list/
│ │ ├ __init__.py
│ │ ├ models.py
│ │ └ views.py
│ ├ app.py
│ └ config.py
├ migrations/
├ venv/
├ local.sqlite
└ requirements.txt
1. requirements.txtの作成
毎回これのやり方を忘れるからいい加減覚えたい。
pip freeze > requirements.txt
2.Dockerfileの作成
rootディレクトリに以下のコマンドでDockerfileを作成
(Windows環境なのでコマンドプロンプトで以下を実行し、空のDockerfileを作成)
type nul > Dockerfile
作成したDockerfileに以下の内容を記述
# ベースイメージを指定
FROM python:3.11
# apt-getのversionを更新してSQLite3をインストール
RUN apt-get update && apt-get install -y sqlite3 && apt-get install -y libsqlite3-dev
# コンテナ上のワーキングディレクトリを指定
WORKDIR /usr/src/
# ディレクトリとファイルのコピー
COPY ./apps /usr/src/apps
COPY ./local.sqlite /usr/src/local.sqlite
COPY ./requirements.txt /usr/src/requirements.txt
# pipのversionの更新
RUN pip install --upgrade pip
# 必要なライブラリをコンテナ内の環境にインストール
RUN pip install -r requirements.txt
# "building..."を表示させる処理
RUN echo "building..."
# 必要な環境変数の設定
ENV FLASK_APP="apps.app:create_app"
EXPOSE 5000
# "docker run"実行時に実行される処理
CMD ["flask", "run", "-h", "0.0.0.0", "--port", "8080"]
環境変数の指定の仕方にお叱りをうけたので修正
- LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 25)
cloud run はport番号8080を指定しないとエラー起きるためflask runコマンド実行時に--port 8080を指定する必要がある
Dockerイメージの作成
毎回Docker Desktopの起動を忘れてエラー生成する自分をどうにかしたい。
docker build . --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Artigact Registryにコンテナイメージをプッシュ
- Artigact Registry に新しい Docker リポジトリを作成
今回はdockerイメージを使うのでrepository-formatにはdockerを指定
gcloud artifacts repositories create REPOSITORY --repository-format=docker \
--location=asia-northeast1 --description="Docker repository" \
--project=PROJECT
レポジトリが作成されたかどうかを一応確認
gcloud artifacts repositories list \
--project=PROJECT
イメージを push または pull する前に、Google Cloud CLI を使用して Artifact Registry に対するリクエストの認証
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
作成したDockerイメージをプッシュ
docker push asia-northeast1-docker.pkg.dev/PROJECT/REPOSITORY/productlist:latest
cloud runにデプロイ
ちょっとめんどかったからコンソール上からデプロイ
無事デプロイ完了
一旦デプロイできたけど、いまいちコンテナイメージとか理解できてないので、少しずつ理解していきたい
参考