Docker:【Dockerファイル,composeファイル】の例
目次
はじめに
ここに書いたこと
- Dockerファイルとcomposeファイルの例
- 内容の説明については概要レベル
- それぞれDockerで重要な構成ファイルの具体例からイメージを広げる
2つのファイルの概要
- Dockerファイル
- アプリ環境を定義する
- して、どこでも再現できるようにする
- このファイルの記述に沿ってコンテナが作成される
- composeファイル
- アプリを構成するサービスを定義する
- 分離された環境(コンテナなど)をつなぐ
- そうすると一緒に実行できるようになる
Dockerファイルの例
# syntax=docker/dockerfile:1 FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt EXPOSE 5000 COPY . . CMD ["flask", "run"]
- ベース環境
- Python3.7がインストールされているAlpine(Linux)
- Docker HUBから入手する
- 環境変数を設定
- Webフレームワークのflaskの設定
- 必要なツールをインストール
- requirements.txtに記載
- pip install 実行
- ここではflaskとredis
- Webのリスンポート設定
- 5000
- コンテナ既定のコマンド
- flaskの実行を設定
- このDockerファイルの記述に沿ってDockerイメージを作成する
- 補足
- flask …… シンプルなWebフレームワーク
- redis …… インメモリDB
composeファイルの例
web+db(最もシンプル)
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
- webの設定
- buildの場所は「.」
- portを8000→Dockerファイルでenvにしていた5000
- redisの設定
- 使うコンテナイメージ設定
web+db(ちょっとカスタマイズ程度)
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
- volumesの設定
- プロジェクトのディレクトリとして「/code」マウント
- イメージを再構築することなくコードをリアルタイムで変更できるようになる
- ここにプログラムを入れておけばいい
- environmentの設定
- 環境変数の設定
- flaskが使うFLASK_ENVに「development」を指定
- 「flask run」の時に、「development」で実行
- つまり、毎回コードをリロードしてから実行するようになる
web+db(規模が大きいとこんな感じ)
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
- 例えば、Django+PostgreSQLのような構成にできる
- さっきの
- flaskがDjango
- Django …… Pythonで作られたwebフレームワーク
- redisがPostgreSQL
- PostgreSQL …… 普通のDB
- flaskがDjango
リファレンス
- Get started with Docker Compose | Docker Documentation
- ファーストステップ
- Quickstart: Compose and Django | Docker Documentation
- 少しレベルアップ
