0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker上で自作のwebアプリを動かす。(Flask)

0
Last updated at Posted at 2024-09-20

自作のwebアプリが動く環境をdockerを使って構築します。

まずメリット紹介

ライブラリインストールなど面倒な作業をスキップできる。
dockerで動かすアプリごとにリソース管理ができる。

dockerインストール

インストールしてください。
win11を使っているので docker for windowsをインストールしました。
WSL2はONにしてください。

まずライブラリインストールリストをつくる。(requirements.txt)

自分のwebアプリがあるディレクトリまで、cmdで移動してください。

cd C:\Users\sharisa\Videos\ラズベリーパイIpad

仮想環境があるならば仮想環境をアクティブにしてください。
requirements.txt作成コマンドを打ちます。

(myenv_pai) C:\Users\sharisa\Videos\ラズベリーパイIpad>pip freeze > requirements.txt

すると、、、C:\Users\sharisa\Videos\ラズベリーパイIpad ここに、 requirements.txtが作られます。
これは、仮想環境にインストールされたライブラリになります。

Dockerfile作成

ここからDocker上でwebアプリを動かすためのDocker関連ファイルが登場します。サクっと全体をお伝えします。

Dockerfileとは、

役割: Docker イメージを作成するための設計図です。

内容: アプリケーションをコンテナで動かすために必要な指示や設定が記述されています。例えば、ベースとなるOS、必要な依存関係、ファイルのコピー、コンテナ内で実行するコマンドなどを定義します。

使い方: Dockerfile をもとに、docker build コマンドを使って Docker イメージを作成します。

Docker イメージ (Docker Image)

役割: Dockerfile から生成された「完成した状態のテンプレート」です。イメージは、コンテナを実行するために必要なアプリケーション、依存関係、設定などがすべて含まれたパッケージです。

内容: コンテナのベースになるものです。イメージ自体は変更されませんが、イメージから作られるコンテナは動的に動作します。

使い方: docker run コマンドなどでイメージを基にコンテナを起動します。1つのイメージから何度でもコンテナを作成できます。

例: Pythonアプリ用のDockerイメージや、MySQLデータベースのDockerイメージ。

Docker Compose

役割: 複数のコンテナ(サービス)を簡単に管理・起動するためのツールです。各サービスの設定や依存関係、ネットワークやボリュームの設定を一括で行えます。

内容: 複数のコンテナを連携させる設定を docker-compose.yml ファイルで定義し、すべてのコンテナを一括で管理・操作できます。例えば、ウェブアプリケーションとデータベースのコンテナを連携させる場合に便利です。

使い方: docker-compose up コマンドで、docker-compose.yml に記載された全てのサービスをまとめて起動します。


Dockerfile作成に戻ります。

image.png
まず、Dockerfileの場所。仮想環境とかflaskアプリと同じ階層。

Dockerファイルの中身を作成します。

# ベースイメージとしてPython 3.12.3の軽量バージョンを使用
FROM python:3.9-slim

# 作業ディレクトリを作成
WORKDIR /app



# Pipを最新バージョンにアップデート
RUN pip install --upgrade pip

# requirements.txtをコンテナにコピー
COPY requirements.txt .

# 必要なPythonパッケージをインストール
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションファイルをすべてコンテナにコピー
COPY . .

# 環境変数の設定
ENV FLASK_APP=flaskr
ENV FLASK_ENV=development

# ポート5000を公開
EXPOSE 5000

# アプリを起動
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000", "--debug"]

保存して閉じる。

docker-compose.yml作成

docker-compose.yml
これを
C:\Users\sharisa\Videos\ラズベリーパイIpad

image.png

version: '3'
services:
  flask-app:
    image: ipad-flask-app
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    environment:
      FLASK_ENV: development
    restart: always  # Docker起動時に自動起動する設定

保存して閉じる。

flaskアプリをdockerで起動

Dockerfile をもとに、docker build コマンドを使って Docker イメージを作成
flask-app部分はイメージの名前になります。

docker build -t ipad-flask-app .

コンテナにアップロード稼働
flask-app部分はイメージの名前になります。
↓これはcomposeファイルを使ってアップロードする方法

docker-compose up -d

↓これはcomposeファイルを使わないで手動でアップロードする方法

docker run --reload -p 5000:5000 --name flaskr-container --restart always -e FLASK_ENV=development flask-app

--restart always:このオプションは、Dockerデーモンが再起動するたびにコンテナを自動的に再起動します。

image.png

Dcokerのコンテナ上でアプリが動き出せばOK。
※flask-appというのがImage名になります。

デバック

いまのところローカルをマウントしてデバック実行できない。
dockerイメージを上げ直せば変更が反映される。
dockerイメージを上げ直すのが手間なので、開発段階ではflaskを通常起動させて、デバックするかな。
dockerで動かしつつデバックできる方法、教えてほしいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?