環境
- 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
Dockerfile
Dockerイメージをビルドするために使用します
FROM python:3.10-slim
RUN pip install --upgrade pip
WORKDIR /var/docker-python
COPY requirements.txt /var/docker-python
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
インストールが正常に完了しているか確認する場合は以下のコマンドを実行します
pip list
// bs4とrequestsが表示されていればOK
bs4を用いた簡単なスクレイピングができるプログラムを実行します(main.py)
masayanblog(本ブログの名前)が表示できていれば成功です。
python app/main.py
// masayanblog