クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

モジュール化したpythonのコンテナイメージ化について


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 

 

コメントは受け付けていません。