Dockerについて
Dockerとは、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
上記記事でWindows 10へのインストール方法を紹介しています。ぜひご覧ください。
JupyterLab について
JupyterLab(ジュピター・ラボ)とは、ブラウザ上で動作する対話型実行環境です。
上記記事でJupyterLabの導入方法を紹介しています。ぜひご覧ください。
Seleniumについて
Seleniumとは、ブラウザ操作を自動化するツールとライブラリのことで、JavaやPython、Ruby、JavaScriptなどから利用できます。
Chrome、Firefoxm、Edge、Internet Explorer、Safari、Operaと主要ブラウザに対応しています。
Docker上のイメージ図
Docker上にあるJupyterLabサーバとSeleniumサーバ、あとnoVNCサーバのイメージ図です。
JupyterLabとは別のコンテナをたててSeleniumを動かします。
VNCは、Virtual Network Computingと略で遠隔操作用のソフトウェアです。Seleniumサーバでブラウザが動く様子をVNCサーバを介して見ることができます。
noVNCは、VNCクライアントがブラウザになったものです。通常、VNCビューアというソフトウェアを利用しないとVNCサーバに接続できないのですが、ブラウザからVNCサーバにアクセスできるようにしたものです。
このあと示すdocker-compose.yml
で、Python396コンテナでポート番号を8008:8888で、Selenium_firefoxコンテナでポート番号を7979:7900で指定したときはこのようになります。
JupyterLabサーバ自体はポート番号8888番でアクセスを受ける設定になっていますが、コンテナの外からはポート番号8008番でアクセスすることになります。
また、 noVNCサーバ自体はポート番号7900番でアクセスを受ける設定になっていますが、コンテナの外からはポート番号7979番でアクセスすることになります。
実施環境
- Windows 10 バージョン21H1(OSビルド 19043.1165)
- Docker Desktop 4.0.0(Docker Engine 20.10.8)
実施環境はこちらです。
構築手順
上記の記事と同じようにpython 3.9.6のイメージをベースに、JupyterLabをインストールしたイメージをビルドして作り、コンテナを起動することにします。
構成
まず、Dockerfile
とdocker-compose.yml
は上記のような構成にします。
python396_selenium用のDockerfile
とselenium_firefox用のDockerfile
は場所をわけておきます。
本記事では、WindowsのE:\workの場所に配置しました。
python_seleniumのDockerfile
python_seleniumのDockerfile
はこちらです。
下記のことを実施しています(Seleniumをインストールしているところだけがコチラの記事との違い)。
- python 3.9.6をベースに
- pipをアップグレードして、JupyterLabとSeleniumをインストール
- コンテナのワークディレクトリを/JupyterLabに、リッスンポート番号を8888番に設定
- コンテナ起動時に
jupyter-lab
コマンドを実行して、下記設定をおこなう- IPアドレス接続制限なし
- ポート番号8888でアクセスを受ける
- ブラウザを起動しない
- rootでの実行を許可
- トークンなしでのアクセスを許可
- 作業ディレクトリを/JupyterLabに設定
selenium_firefoxのDockerfile
selenium_firefox のDockerfile
はこちらです。
SeleniumのFirefox版のDockerイメージを持ってくるだけです。
docker-compose.yml
docker-compose.yml
は上記の内容になります。
python396_seleniumセクションではpython396_selenium
というイメージからpython396_selenium_container
という名前のコンテナを起動するように指定しています。
ポート番号については、8008番で受けてコンテナ内は8888番に流す、という設定です。
同様にselenium_firefoxセクションではselenium_firefox
というイメージからselenium_firefox_container
という名前のコンテナを起動するように指定しています。
ポート番号については、7979番で受けてコンテナ内は7900番に流す、という設定です。
このようにpython396_seleniumセクションとselenium_firefoxセクションを同時に起動することでhttp://selenium_firefox:4444/wd/hub
でJupyterLabからSeleniumにアクセスすることができます(Seleniumはデフォルトでポート番号4444番でリッスンしています)。
PowerShellでの構築
Dockerfile
とdocker-compose.yml
を作ったら、PowerShell
を開いてE:\workに移動します。
docker build
コマンドでDocker HubからDockerfile
に記載の内容にしたがってDocker imageを作ります。
イメージが作り終わったらdocker-compose
コマンドでコンテナを起動させます。-d
オプションでバックグラウンドで起動になります。
Docker Desktop上で見ると、このように見えます。
JupyterLabの確認
コンテナが起動したらブラウザでJupyterLabとnoNVCにアクセスできるようになります。
http://localhost:8008/labにアクセスすると、JupyterLab環境が表示されます!
noNVCの確認
http://localhost:7979にアクセスすると、noVNCが表示されます!
JupyterLabからSeleniumから動かす
noNVCに接続する
まずはnoNVCに接続しましょう。
【接続】をクリックします。
パスワードには「secret」を入力して【資格情報を送信】をクリックします。
無事接続できると上記のような画面が表示されます。
Seleniumを動かす
それではいよいよJupyterLabからSeleniumを動かしてみましょう。
このコードをセルに貼り付けて【Shift + Enter】を押します。
https://www.google.com/
にアクセスするだけの単純な処理ですね。
noNVCの画面を見るとこのようにGoogleの画面にアクセスできているのがわかります。
まとめ
DockerでJupyterLab環境とSelenium環境を構築して、JupyterLabからSeleniumを利用する方法を紹介しました。
JupyterLabコンテナとSeleniumコンテナを別々に起動させてコンテナ同士をやり取りさせています。
Seleniumが不要なときはコンテナを起動させなければ良いだけなので、Dockerは楽ですね。