python で、モジュールをパッケージにするケースがあります。
- example
- Dockerfile
- setup.cfg
- setup.py
- example
- __init__.py
- main.py
まずは、モジュール化に必要なファイルの作成。setup.cfg、setup.py、__init__.py
モジュール化するスクリプトを作成。greetという関数で、Hello World!を出力するだけの簡単なものになります。
# -*- conding: utf8 -*- __version__ = '0.0.1' def greet(): print('Hello World!')
setup 設定ファイル。 [metadata] name = example version = attr:example.__version__ author = Your Name author_email = your-email@example.com description = example is a example package url = http://example.com/your/project/page license = Apache License, Version 2.0 classifier = Development Status :: 1 - Planning Programming Language :: Python :: 3.6 [options] zip_safe = False packages = find:
pipは、setup.pyの記述でインストールを行うので、setup.pyを作成します。
#!/usr/bin/env python # -*- coding: utf-8 -*- from setuptools import setup setup()
Dockerイメージで、モジュール化した関数を呼び出すpythonスクリプトを作成します。
import example if __name__ == '__main__': example.greet()
最後に、Dockerfileを作成
FROM python:3.7.3 WORKDIR /app COPY ./setup.py /app COPY ./setup.cfg /app RUN mkdir /app/example COPY ./example/ /app/example/ RUN pip install -U . COPY main.py /app CMD ["python", "main.py"]
Dockerイメージをビルドを行い、
docker build -t example .
イメージを実行すると、Hello World! が出力されれば成功です。
docker run --rm -it example:latest