docker-compose を使ってpythonの実行環境を作るメモ
しばらく更新していなかったので使い方を忘れていますが、 作業メモの投稿です。
はじめに
下記の内容は執筆時点のものです。 内容に謝りや勘違いが含まれる可能性が高いので、まさかりお待ちしております。 語尾がだ・である調ですが、作業メモということでご容赦いただければと思います。
前提環境
- OS: Ubuntu 16.04
- Docker: 17.03.0-ce
- docker-compose: 1.11.2
やりたかったこと
- Python の実行環境をコンテナに押し込みたかった。
- virtualenv とか pyenv とかを導入するのが面倒だった。
やったこと
下記の docker-compose.yml と Dockerfile を用意した。
- docker-compose.yml
version: "2" services: python: build: . volumes: - "./:/usr/src/app" ports: - "8500:5000" command: [python, hello-flask.py]
- Dockerfile
FROM python:3.6-onbuild
- hello-flask.py は flask クイックスタート のサンプルソース↓
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(host='0.0.0.0')
使い方
- コンテナを立てっぱなしにする時
docker-compose up -d --force-recreate --build
- コンテナ内で作業したい時 or ソースコードを編集しながら動作確認やデバッグをしたい時
docker-compose run -p 5000:5000 python /bin/bash
便利だったこと
python:X.X.-onbuild
- python 公式イメージのうち、
onbuild
というやつを使うとrequirements.txt
を読み込んで依存ライブラリをコンテナ何にインストールしてくれて、さらに Dockerfile と同じディレクトリのファイルをコンテナ内(/usr/src/app)にコピーしてくれる(神)
何で困ったのか
公式イメージの ONBUILD の命令を実行するためには docker-compose ファイルに image
コンテキストとして記述するのではダメっぽい(imege なので build 不要って言われる) ので、1行 Dockerfile を作って build
コンテキストに記述することで build 可能になり、ONBUILD の命令が実行されるようになった。