Con_HumiのDEV_LOG

開発メモやガジェットのことをつらつらと.

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
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 の命令が実行されるようになった。

参考