本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/eebd8068a0533ba49bea |
はじめに
限られた物理PC の中で、次の Python バージョン
・Python 3.6.8
・Python 3.7.3
・Python 3.8.3
・Python 3.9.4
をインストールしてプログラムを作成することになった.
今回は参考として「使い捨て型のコンテナ」の作成方法についても記しておく1
参考にした情報
書籍 |
---|
Docker/Kubernetes 実践コンテナ開発入門 (山田明憲 著) |
手順
構築後のファイル構成
.
|-- PV ......................... 永続ボリューム
| `-- py
| `-- app ................ この直下に *.py を配置する
| `-- a.py ........... サンプルコード
|-- assets
| `-- py
| |-- Dockerfile
| `-- requirements.txt ... 導入したい Python パッケージを記述しておく
`-- docker-compose.yml
手順
1. 永続ボリュームを作成する
コードやデータを配置するために使用する.
$ mkdir -p PV/py/app
2. Dockerfile を作成する
独自拡張するために使用する.
なお、「常駐型コンテナを作る」との差異は末尾 2行の ENTRYPOINT と CMD のみである.
$ mkdir -p assets/py/
$ vim assets/py/Dockerfile
assets/py/Dockerfile
FROM python:3.9.4-buster
## プロキシサーバを使う場合
# ENV http_proxy="http://proxy.co.jp:8080"
# ENV https_proxy="http://proxy.co.jp:8080"
# コンテナ内での作業場所を /usr/src/app とする
WORKDIR /usr/src/app
# Python に関する環境変数
# pyc を作成しない
ENV PYTHONDONTWRITEBYTECODE 1
# python -u 相当. バッファリングしない.
ENV PYTHONUNBUFFERED 1
# 日本環境に合わせる
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ENV LANGUAGE ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
# pip を更新したうえで必要なパッケージをインストールする
RUN python -m pip install --upgrade pip==21.0.1
COPY requirements.txt .
RUN pip install -r requirements.txt
# コンテナ起動すると同時に python を実行するための定義をする
ENTRYPOINT ["python"]
CMD [""]
3. requirements.txt を作成する
ここでは assets/py/requirements.txt
に定義する
assets/py/requirements.txt
以下は例である.
requests==2.23.0
sh==1.13.1
urllib3==1.25.9
4. docker-compose.yml を作成する
docker-compose.yml
version: '3.7'
services:
py:
build: ./assets/py
image: mypy0394
container_name: mypy0394
volumes:
- ./PV/py/app/:/usr/src/app/
5. イメージビルドをする
次のコマンドによって、Dockerイメージ「mypy0394
」が作られる
$ docker-compose build --no-cache
6. サンプルコードが動作するか確認をする
./PV/pv/app/a.py
物理ホストで次の ./PV/pv/app/a.py
を作成する.
コンテナ内からは /usr/src/app/a.py
として見えている.
#!/usr/bin/env python
#import requests
import urllib3
import sh
import sys
print("Hello Python 0394")
for a in sys.argv[1:]:
print(a)
7. コンテナを使い捨てで実行する
docker-compose のコマンドとして run --rm
を使えば良い.
$ docker-compose run --rm py a.py 1 2 3
Hello Python 0394
1
2
3
-
普段は「使い捨て型のコンテナ」をほとんど使用しない ↩