はじめに
私はM2のMacbookAirを使用していますが、端末に直接いろんなものをインストールすることに少し抵抗があり、Dockerを使って開発環境を構築しています。
今回は最も使用する頻度の高いPython環境についてご紹介します。
執筆している2025年2月の時点で私がPythonでやりたいことは以下の2つです。
- Pythonの基本的なコマンドなどの練習
- BeautifulsoupやSeleniumなどを用いたスクレイピングによる自動化処理構築
これらの目的を達成するためにどのようにDockerfileを作成しているのかを紹介します。
Dockerfileの構成
以下のような構成でDockerfileなどを作成しています。
Dir
├─ README.md
├─ docker-compose.yml
├─ python_jupyterlab
| └─ Dockerfile
| └─ requirements.txt
├─ selenium_chrome
| └─ Dockerfile
└─ work
└─ test
├─ test.py
└─ test.csv
基本的にPythonコードはJupyterLab環境で実行する想定の為、2つのDockerfileを用意しています。
- Pythonコードを実行するためのコンテナ
- スクレイピングを行うためのブラウジング環境のコンテナ
これらを「docker-compose.yml」を使って、それぞれ立ち上げる仕組みです。
各ファイルの詳細
「python_jupyterlab」フォルダの「Dockerfile」
このファイルは、PythonコードをJupyterLab環境で実行するためのコンテナを作成します。具体的には、以下の処理を行っています。
1. Ubuntuベースのコンテナを使用
最新のUbuntuをベースに環境を構築します。
2. 必要なパッケージのインストール
必要な開発ツール(例:build-essential, cmake, gitなど)をインストールし、キャッシュを削除してコンテナサイズを削減します。
3. Anaconda3のインストール
Anacondaをインストールし、Python環境を整えます。
4. pipのアップデートとライブラリのインストール
pipを最新にアップデートし、必要なPythonライブラリをインストールします。
5. JupyterLabをデフォルトで実行
JupyterLabを起動し、セキュリティのために認証トークンを設定します。
FROM ubuntu:latest
# update and install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
git \
sudo \
wget \
vim && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# install anaconda3
WORKDIR /opt
RUN wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh && \
sh ./Anaconda3-2024.06-1-Linux-x86_64.sh -b -p /opt/anaconda3 && \
rm -f Anaconda3-2024.06-1-Linux-x86_64.sh
# set path
ENV PATH /opt/anaconda3/bin:$PATH
# update pip and install python libraries
RUN pip install --upgrade pip && \
pip install -r /requirements.txt
# create working directory
WORKDIR /work
# run jupyterlab as default command with security
ENV JUPYTER_TOKEN my_secure_token
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=$(JUPYTER_TOKEN)"]
「python_jupyterlab」フォルダの「requirements.txt」
ここでは、コンテナにインストールしたいPythonライブラリを指定します。以下のライブラリをインストールしています。
requests
selenium
BeautifulSoup4
pandas
「selenium_chrome」フォルダの「Dockerfile」
このファイルは、スクレイピング用のブラウジング環境を構築します。以下の内容でChromiumをインストールしたコンテナを作成します。
FROM seleniarm/standalone-chromium:latest
seleniarm/standalone-chromiumは、ARMアーキテクチャ向けのSeleniumとChromiumが統合されたコンテナイメージです。これにより、常に最新のChromiumとSeleniumが利用できます。
「docker-compose.yml」
これまで紹介したファイルを使って、イメージを作成し、コンテナを立ち上げるための設定ファイルです。
version: "3"
services:
selenium_chrome:
build: ./selenium_chrome
container_name: selenium_chrome_container
shm_size: 2gb
restart: unless-stopped # 自動再起動
ports:
- "4444:4444" # Selenium server port
- "7900:7900" # VNC (ブラウザ動作の確認用)
python_jupyterlab:
build: ./python_jupyterlab
container_name: python_jupyterlab_container
platform: linux/x86_64
restart: unless-stopped # 自動再起動
ports:
- "8888:8888" # JupyterLab port
volumes:
- ${HOME}/Desktop/work:/work
environment:
SELENIUM_URL: http://selenium_chrome:4444 # `/wd/hub` を削除(Selenium 4向け)
tty: true
stdin_open: true # インタラクティブ入力を有効化
depends_on:
- selenium_chrome
1. selenium_chromeコンテナ
• Selenium WebDriverとChromiumを使ったブラウザ操作環境を提供します。
• ポート設定(4444と7900)はSeleniumとVNC(ブラウザの動作確認用)用です。
• メモリ設定(2GB)により、安定した動作が可能になります。
2. python_jupyterlabコンテナ
• PythonとJupyterLabを使ったデータ分析環境を提供します。
• JupyterLabはポート8888でアクセスできます。
• Seleniumと接続するために、SELENIUM_URL環境変数を設定しています。
最後に
このように、Dockerを使ったPython開発環境の構築を簡単に行うことができます。
JupyterLabとSeleniumを使った作業も、コンテナで分けて管理することで、効率的な開発が可能になります。
もしよろしければお試し下さい!
コメント