🙆

DockerでFlask環境構築【Python】

2022/07/09に公開

ディレクトリ構成

ディレクトリ構成
└─foldername(任意)
    ├─Dockerfile
    ├─docker-compose.yml
    └─app
        ├─requirements.txt
        └─app.py

Dockerfile

# pythonのバージョンは任意
FROM python:3.8

WORKDIR /usr/src/app
ENV FLASK_APP=app

COPY /app/requirements.txt ./

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

FROM
ベースになるコンテナイメージの指定

WORKDIR
コンテナ内の作業ディレクトリを指定

ENV
環境変数の設定
必要に応じて使う.

COPY
イメージを構築するときに、ローカル環境からコンテナ内にファイルをコピーして設置する

RUN
コンテナ内のシェルコマンドを実行

docker-compose.yml

version: "3"
services:
  app:
    build: .
    ports:
      - "5001:5000"
    container_name: app
    volumes:
      - ./app:/usr/src/app
    command: flask run --host=0.0.0.0

version
composeファイル形式のバージョン
バージョンによって書き方が異なるようです

service
全体を構成するコンテナの設定

app
コンテナ名

build
Dockerfileを含むディレクトリパスを指定します。

ports
ホスト側ポートとコンテナ側ポートのマッピングを指定する.
[host_port]:[container_port]

composeファイルの書き方でよさげのものがあったので引用します。
引用元

version: '3.8'

services:
  [service_name]:
    build: [context_path]
    image: [image_name]:[tag_name]
    container_name: [container_name]
    command: [command]
    environment:
      [variable_name]: [value]
    volumes:
      - [volume_name]:[container_directory_path]:[mode]
      - [host_directory_path]:[container_directory_path]:[mode]
      - type: volume
        source: [volume_name]
        target: [container_directory_path]
      - type: bind
        source: [host_directory_path]
        target: [container_directory_path]
    networks:
      - [network_name]
    ports:
      - '[host_port]:[container_port]'
    tty: [boolean]
    restart: [restart_policy]
    depends_on:
      - [other_service_name]
  [other_service_name]:
    ...

volumes:
  [volume_name]:

networks:
  [network_name]:

requirements.txt

このファイルを作成して、パッケージ情報を記載します。
Dockerfile内にあるRUN pip install -r requirements.txtコマンドにより
requirements.txtファイル内にあるパッケージを一括インストールすることができます。

flask==2.0.1

app.py

app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "index page"

実行

以下のコマンドを実行して、localhost5001にアクセスします

docker-compose up

index pageという文字が表示させていれば成功です。

参考

ubuntuを使う場合

# ubuntuに変更
FROM ubuntu:latest
# FROM python:3.8
RUN apt-get update
# pythonとpipをインストール
RUN apt-get install -y python3 python3-pip

WORKDIR /usr/src/app
ENV FLASK_APP=app

COPY /app/requirements.txt ./

RUN pip3 install -r requirements.txt

Discussion