ディレクトリ構成
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