環境
- Windows 10
- Python 3.10.1
- VSCode
- Docker Desktop App 4.6.1
この記事でやること
- 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
処理の具体的な内容は割愛しますが、ウェブスクレイピングを行い、このブログのタイトルのテキストを取得し、出力しています
まとめ
いかがでしたでしょうか。本記事では、Dockerを用いたPythonの動作環境を構築する方法について紹介しています。参考にしてみてください。