DockerでPythonの動作環境を構築する

環境

  • Windows 10
  • Python 3.10.1
  • VSCode
  • Docker Desktop App 4.6.1

使用するソースコード

以下の公開リポジトリに置いています

GitHub - masayan1126/docker-python: pythonをdockerで動かすための基盤
pythonをdockerで動かすための基盤. Contribute to masayan1126/docker-python development by creating an account on GitHub.

この記事でやること

  • dockerでpythonが動く環境を構築
  • 上記環境で簡単なスクリプトを実行する
  • 外部ライブラリをpipを使ってインストールし、実行できることを確認する

ディレクトリ構成

ホストOS側のディレクトリ構成

docker-python
└app
└main.py
└hello.py
└.gitignore
└docker-compose.yml
└Dockerfile
└requirements.txt

各ファイルの役割

appディレクトリ内のpy

こちらは、サンプルプログラムです。

hello.py

print文でコンソールに文字を出力するだけです。pythonスクリプトが実行できることを確認する用です

print("Hello World !!")
main.py

bs4とrequestsを用いて簡単なスクレイピングを実行するプログラムです。外部ライブラリをインストールし、プログラムを実行できることを確認する用です

from bs4 import BeautifulSoup
import requests

URL = "https://maasaablog.com/"
response = requests.get(URL)
soup = BeautifulSoup(response.text, 'html')

tag = soup.select(selector=".logo > a > span")[0]
print(tag.text)

.gitignore

今回の記事では使用していません

docker-compose.yml

コンテナを起動する際に使用します

version: '3'
services:
  python3:
    restart: always
    build: .
    container_name: 'py3-container'
    working_dir: '/var/docker-python'
    tty: true
    volumes:
      - ./app:/var/docker-python/app
コンテナ名はpy3-containerとし、ホストのappディレクトリ(ソースコードが入っているディレクトリ)と、コンテナの/var/docker-python/appをバインドマウントしています

Dockerfile

Dockerイメージをビルドするために使用します

FROM python:3.10-slim

RUN pip install --upgrade pip
WORKDIR /var/docker-python

COPY requirements.txt /var/docker-python
最低限の記述のみなので、linux関連のパッケージなどは入れていません。requirements.txtはバインドマウントの対象としていないため、ビルドのタイミングでコンテナへコピーします

requirements.txt

依存関係が一覧で記載されています。こちらをもとに必要なパッケージをインストールして使用します

今回は、requestsとbs4のみです

requests==2.26.0
beautifulsoup4==4.10.0

構築手順

まず、上記のリポジトリを任意の場所にクローンします

git clone https://github.com/masayan1126/docker-python.git

ディレクトリを変えます

cd docker-python

エディタを起動します(vscodeなら以下)

code .

Dockerイメージをビルドします

docker-compose build

コンテナを起動します

docker-compose up -d

コンテナに入ります

docker exec -it py3-container bash 

プログラムの実行

最も基本的なスクリプトを実行する

hello.pyを実行します。コンソールにHello World !! と出力されれば完了です

python app/hello.py

// Hello World !!

外部ライブラリをpipを使ってインストールし、実行

依存関係をインストールする

requests,beautifulsoup4がインストールされます

pip install -r requirements.txt
-rのオプションを付けることで、requirements.txtをもとに依存関係をインストールすることが可能です
設定ファイル名は任意ですが、requirements.txtという名前が使われることが多いです。また、以下のコマンドでは、pipで管理しているパッケージをrequirements.txtに吐き出すことが可能です

pip freeze > requirements.txt

インストールが正常に完了しているか確認する場合は以下のコマンドを実行します

pip list

// bs4とrequestsが表示されていればOK

bs4を用いた簡単なスクレイピングができるプログラムを実行します(main.py)

masayanblog(本ブログの名前)が表示できていれば成功です。

python app/main.py

// masayanblog
処理の具体的な内容は割愛しますが、ウェブスクレイピングを行い、このブログのタイトルのテキストを取得し、出力しています

Python学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2022/08/04 17:32時点)
タイトルとURLをコピーしました