自作の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作成に戻ります。
まず、Dockerfileの場所。仮想環境とかflaskアプリと同じ階層。
Dockerファイルの中身を作成します。
# ベースイメージを指定(Python 3.9)
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"]
私は、ChatGPTを使ってdockerfileを作成しました。
保存して閉じる。
docker-compose.yml作成
docker-compose.yml
これを
C:\Users\sharisa\Videos\ラズベリーパイIpad
version: '3'
services:
flask-app:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
environment:
FLASK_ENV: development
私は、ChatGPTを使ってdockerfileを作成しました。
保存して閉じる。
flaskアプリをdockerで起動
Dockerイメージをビルド
docker build -t flask-app .
コンテナにアップロード稼働
docker run -p 5000:5000 --name flaskr-container flaskr-app
Dcokerのコンテナ上でアプリが動き出せばOK。
※flask-appというのがImage名になります。