【日記】dockerでpython+selenium環境構築

今日やっていた作業のメモです。
chromedriverは、「https://chromedriver.storage.googleapis.com/LATEST_RELEASE」でバージョンを確認して、そのバージョンのdriverをダウンロードするようにすれば都度Dockerfileを修正しなくても良くなりそうだったけど、そこまでやる気力がなかった。

事前準備

・Dockerをインストール
・Dockerfileを作成
以下のサンプルを参考に必要箇所を修正
・IPAフォントをダウンロード
ここからIPAフォントをダウンロードして、Dockerfileと同じ場所に配置。

Dockerfile

FROM ubuntu:20.10

# ここはchromeのバージョンに合わせて変える。
ARG CHROME_DRIVER_URL=https://chromedriver.storage.googleapis.com/86.0.4240.22/chromedriver_linux64.zip

# 環境変数設定
ENV TZ=Asia/Tokyo
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG ja_JP.UTF-8
ENV PYTHONIOENCODIND utf_8

# 色々とインストール
RUN \
 apt-get update && \
 apt-get install -y python3.8 curl wget unzip python3.8-distutils gnupg sudo apt-utils tzdata && \
 wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
 echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
 apt-get update && \
 apt-get install -y google-chrome-stable && \
 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
 rm -f /usr/bin/python /usr/bin/python3 && \
 ln /usr/bin/python3.8 /usr/bin/python && \
 ln /usr/bin/python3.8 /usr/bin/python3 && \
 python3 get-pip.py && \
 wget $CHROME_DRIVER_URL && \
 unzip chromedriver_linux64.zip && \
 mv chromedriver /usr/local/bin/. && \
 rm -f chromedriver_linux64.zip && \
 rm -f get-pip.py && \
 apt-get install -y language-pack-ja-base language-pack-ja && \
 locale-gen ja_JP.UTF-8

# Pythonライブラリインストール
RUN \
 pip install --upgrade pip && \
 pip install selenium beautifulsoup4

# フォントの設定。Dockerfileと同じ場所にIPAフォントを配置しておく。
# https://moji.or.jp/ipafont/ipafontdownload/
RUN mkdir -p /root/.fonts
ADD ipaexg.ttf /root/.fonts/.
ADD ipaexm.ttf /root/.fonts/.

# Define default command.
CMD ["/bin/bash"]

この例だと、
・ubuntu20.10
・python3.8+seleinum
・Chrome86 (ChromeDriverもchromeのバージョンに合わせる)
という環境ができます。

ビルド

docker build -t selenium-headless-chrome:latest .

コンテナ作成

docker run --rm -it selenium-headless-chrome /bin/bash

--rmを指定しているのでコンテナを抜けるとコンテナは破棄されます。

いいなと思ったら応援しよう!