Python
docker
python3
Pipenv

docker runでpipenvを使ったpythonプロジェクトを動かす

ディレクトリ構成

project_name/
    Dockerfile
    src/
        Pipfile
        Pipfile.lock
        main.py

Dockerfile

FROM python:3.6-alpine
RUN pip install pipenv
RUN mkdir /app
COPY ./src/Pipfile /app
COPY ./src/Pipfile.lock /app
WORKDIR /app
RUN pipenv install
ENTRYPOINT ["pipenv", "run"]
CMD ["python", "main.py"]

build

docker build -t project_name .

実行

-vオプションを使うので,srcの変更後にビルドは必要ない.ただし,Pipfileが変わった場合は再ビルドが必要.

docker run --rm -v $(pwd)/src:/app project_name

main.pyの例

simple case

def main():
    print("Hello world from python")


if __name__ == '__main__':
    main()

argparse

CMDが上書きされるので,argparseを使ってpython scriptにコマンドライン引数を渡すこともできる.main.pyしか実行されない場合,ENTRYPOINTに["python", "main.py"]も含めても良いかもしれない.

import argparse


def main(args):
    print("Hello %s" % args.user_name)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--user-name', type=str, default="")
    args = parser.parse_args()
    main(args)

実行は以下のようにすれば良い.

docker run --rm -v $(pwd)/src:/app project_name python main.py --user-name hoge