1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[01] docker-composeを活用して即座にPython 3.9.4 を立てる ... ビルドコンテナを作る

Last updated at Posted at 2021-08-04
本シリーズのトップページ
https://qiita.com/robozushi10/items/eebd8068a0533ba49bea

はじめに

限られた物理PC の中で、次の Python バージョン
・Python 3.6.8
・Python 3.7.3
・Python 3.8.3
・Python 3.9.4
をインストールしてプログラムを作成することになった.

ただし、物理PC を汚染させるわけにもいかないので Docker を活用した.
(操作しやすいように docker-compose を導入した)

また、物理ホスト側からバッチを使って、極力コンテナに「手動で」ログインせずに
Python コードを実行するようにした.

今後もこの環境構築は頻発すると思うので書き残しておく.

今回は「ビルドコンテナ」を作成する場合についてである.

 

構築後のファイル構成

.
|-- PV ......................... 永続ボリューム
|   `-- py
|       `-- app ................ この直下に *.py を配置する
|           `-- a.py ........... サンプルコード
|-- assets
|   `-- py
|       |-- Dockerfile
|       `-- requirements.txt ... 導入したい Python パッケージを記述しておく
`-- docker-compose.yml

手順

1. 永続ボリュームを作成する

コードやデータを配置するために使用する.

$ mkdir -p PV/py/app

2. Dockerfile を作成する

独自拡張するために使用する.

$ 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

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. 常駐型コンテナを起動させる

次のコマンドによって、Dockerコンテナ「mypy0394」が作られる

$ docker-compose up -d
$ docker-compose ps
  Name     Command   State   Ports
----------------------------------
mypy0394   python3   Up    

7. 所望のバージョンであることを確認する

デフォルトで使用される Python が 3.9.4 であることを確認する.

$ docker-compose exec py bash -c 'which python' 
/usr/local/bin/python

$ docker-compose exec py bash -c 'python --version' 
Python 3.9.4

8. サンプルコードが動作するか確認をする

./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)

9. 実行する

コンテナログイン時のパスは /usr/src/app である. (∵ Dockerfile の WORKDIR のため)

$ docker-compose exec py bash -c 'python a.py' 
Hello Python 0394

 

補足

コンテナ内には python 2.7.16 と 3.7.3 も存在している

ちなみに次のように異なる Python が存在している模様.
ただし、3.9.4 以外は使ったことは無いので、動作するかは不明.

Python バージョン コンテナ内パス
/usr/bin/python 2.7.16
/usr/bin/python3 3.7.3
/usr/local/bin/python 3.9.4

実行環境 (イメージとコンテナ) を一掃する

永続ボリューム (ここでは ./PV) は残るので問題ない

$ docker-compose down --rmi all  --volumes --remove-orphans
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?