24
25

More than 3 years have passed since last update.

Docker + FlaskでWebサービスを作成する

Posted at

Docker + FlaskでWebサービスを作成する

はじめに

サンプルアプリ(feedback-api)を用いてご紹介します。

Mac環境の記事ですが、Windows環境も同じ手順になります。環境依存の部分は読み替えてお試しください。

目的

この記事を最後まで読むと、次のことができるようになります。

No. 概要 キーワード
1 docker設定 install, Dockerfile, docker-compose.yml
2 docker起動 docker run, docker-compose up

実行環境

環境 Ver.
macOS Catalina 10.15.3
Python 3.7.3
Docker 19.03.8

ソースコード

実際に実装内容やソースコードを追いながら読むとより理解が深まるかと思います。是非ご活用ください。

GitHub

関連する記事

0. 開発環境

tree.sh
/
│── config/
├── app/
└── Dockerfiles/
     ├── app/
     │   ├── Dockerfile
     │   ├── docker-compose.yml
     │   └── entrypoint.sh
     ├── docker_compose_up.sh
     └── docker_run.sh

1. dockerのインストール

command_line.sh
~$ brew install docker
~$ brew cask install docker

2. 共通定義

2-1. Dockerfile定義

FROM python:3.7

RUN mkdir /code
WORKDIR /code

ADD entrypoint.sh /code/entrypoint.sh
ADD app/ /code

RUN pip install --upgrade pip --no-cache-dir
RUN pip install -r requirements.txt --no-cache-dir

EXPOSE 5000
ENV PYTHONPATH "${PYTHONPATH}:/code/"
ENV FLASK_APP "/code/run.py"
CMD ["/code/entrypoint.sh"]

2-2. entrypoint定義

Dockerfiles/app/entrypoint.sh
#!/bin/sh

sleep 5

flask db init
flask db migrate
flask db upgrade

flask run --host=0.0.0.0 --port=5000

3. ローカルホストのRDBと接続する場合

docker(flask) <-> localhost(postgres)

3-0. 前提条件

localhostでpostgresをstartしておくこと。

3-1. sh定義

Dockerfiles/docker_run.sh
#!/bin/sh

docker stop $(docker ps -q)
docker rm $(docker ps -q -a)
# docker rmi $(docker images -q) -f

rsync -av --exclude=app/tests* app Dockerfiles/app

docker build -t feedback-api Dockerfiles/app
docker run -it -p 5000:5000 feedback-api:latest

3-2. sh実行

command_line.sh
Dockerfiles/docker_run.sh

4. コンテナのRDBと接続する場合

docker(flask) <-> docker(postgres)

4-0. 前提条件

localhostのpostgresをstopしておくこと。

4-1. sh定義

Dockerfiles/docker_compose_up.sh
#!/bin/sh

docker stop $(docker ps -q)
docker rm $(docker ps -q -a)
# docker rmi $(docker images -q) -f

rsync -av --exclude=app/tests* app Dockerfiles/app

docker-compose -f Dockerfiles/app/docker-compose.yml up --build

4-2. yml定義

Dockerfiles/app/docker-compose.yml
version: '3'
services:
  docker_postgres:
    image: postgres:11.5
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: feedback
      POSTGRES_INITDB_ARGS: --encoding=UTF-8

  app:
    build: .
    depends_on:
      - docker_postgres
    ports:
      - 5000:5000
    environment:
      ENV_CONFIG: docker
      SQLALCHEMY_POOL_SIZE: 5
      SQLALCHEMY_MAX_OVERFLOW: 10
      SQLALCHEMY_POOL_TIMEOUT: 30

4-3. sh実行

command_line.sh
Dockerfiles/docker_compose_up.sh
24
25
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
24
25