LoginSignup
89
108

More than 5 years have passed since last update.

docker コンテナで python 開発

Posted at

概要

以前、pyenv 利用のまとめ という記事を書いたのですが、
今でもたまに参照頂いているようでありがたいことです。

ただ最近 python でスクリプト書く際には pyenv ではなく docker を利用することが多いので、
その方法をメモしておきます

tl;dr

  • docker で python 開発環境構築
  • ローカルで編集、コンテナで実行・テスト
  • (ほぼ)そのままデプロイ

環境

  • macOS High Sierra
  • Docker CE for Mac

準備

ディレクトリ構成

以下のようなディレクトリ構成を想定しています

.
├── Dockerfile
└── sample.py # 対象のスクリプト

上記は簡略化して書いていますが、要は普段利用している構成に Dockerfile を追加しただけ

構築と利用

実行環境用 Dockerfile の作成

必要なパッケージをインストールした Dockerfile を作成

Dockerfile
FROM python:3

RUN pip install requests==2.18.4 click==6.7

パッケージのバージョン指定の有無はお好みで。

build して、利用する

上記で設定したコンテナを build して、その上で開発していく

$ docker build -t myproject -f /path/to/Dockerfile
$ docker run --rm -it myproject bash

...のですが、これだとろくに設定されていないエディタで作業することになるのでツライ
ローカルとコンテナ内を同期して、書くのはローカルのエディタ、テストや実行はコンテナで行うようにする

$ docker run --rm -it -v $(pwd):/usr/local/src/myproject myproject bash
root@2156ba4f# python sample.py

ただ、毎回 docker コマンドにオプション渡すのも面倒くさいので、
かんたんな wrapper スクリプトを用意

run.sh
#!/bin/sh

IMAGE_NAME=$1
shift

if [ "${IMAGE_NAME}" = "" ]; then
  exit 1
fi

docker run --rm -it \
  -v $(pwd):/usr/local/src/${IMAGE_NAME} \
  -w /usr/local/src/${IMAGE_NAME} \
  ${IMAGE_NAME} "$@"

wrapper スクリプト経由で利用

$ ./run.sh myproject python sample.py

直接コマンド実行でも良いんだけど、
コンテナの立ち上げ時間が気になる場合は bash とかで中に入ってしまう(予めコンテナ起動しておく)と良いと思います。

$ ./run.sh myproject bash
root@2156ba4f# ls
Dockerfile run.sh sample.py
root@2156ba4f# python sample.py

まとめ

この環境で開発するようになってから、
ある程度形になってきたら Dockerfile に スクリプトの COPY とか、
CMDとかENTRYPOINT書くだけで、デプロイできるようになるのでとても楽

89
108
3

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
89
108