Docker環境にJupyter labとOpenCVをinstallしたい
この記事は最終更新日から1年以上が経過しています。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Fdock.png?alt=media&token=1a8feaae-373b-4e47-9549-ecff3672fb3e)
M1 Macを購入したのですが、重宝していたpipenv環境でライブラリがインストールできない事象が結構発生し、OpenCVもM1 Mac環境でインストールに失敗してしまいました。。
ならば、Dockerコンテナの中ならいけるのではと思い立ちチャレンジしてみることにしました。
ただ、Google Colaboratorが便利なので別に環境構築などしなくてもと思ったのですが、ローカル環境で色々試行錯誤したい時にColaboratorだと私は少し気が引けたりします(変な画像とかUPするの恥ずかしかったりします笑)
なのでついでにJupyter labも入れてしまうことにしました!
まずはDockrfileからいきます。openCV関連のインストールからやっていきます。
FROM centos:latest
RUN yum update -y
RUN yum install -y python3 python3-pip
RUN pip3 install --upgrade pip setuptools
RUN pip3 install opencv-python opencv-contrib-python numpy pandas
そしてdocker-compose.ymlです。
version: '3'
services:
opencv_test:
container_name: opencv_test
build:
context: .
dockerfile: Dockerfile
command: python3
tty: true
working_dir: '/root/'
volumes:
- ./opt:/root
ではbuildします。
$ docker-compose build
$ docker-compose up
build後docker-compose up
し
docker container exec -it opencv_test bash
でコンテナの中に入りました。
import cv2
import numpy as np
filename = "test.jpg"
img = cv2.imread(filename, 1)
cv2.imwrite("write_test.jpg", img)
print(img)
index.pyというファイルにテストコードを記載しているので実行してみます。
python3 index.py
するとなんとエラーが出てしまいました。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Ferror_1.png?alt=media&token=cffe80b7-a3fd-4fa2-b4ac-c2389f5a9fcc)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
が原因のようなのですが、詳しい原因はわかりませんでした。
色々調べたところosにmesa-libGL
をインストールする必要があるようでした。
Dockerfileを編集します。
FROM centos:latest
RUN yum update -y
RUN yum install -y python3 python3-pip mesa-libGL # 追記しました
RUN pip3 install --upgrade pip setuptools
RUN pip3 install opencv-python opencv-contrib-python numpy pandas
もう一度、docker-compose build&docker-compose up
してからコンテナに入って
python3 index.py
をしました。
imgデータがprintされ、無事に動いておりました!
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Ferror_2.png?alt=media&token=c7048edb-7900-419e-9448-e54597db7196)
では次はJupyter labです。
Dockerfileに追記しました。
FROM centos:latest
RUN yum update -y
RUN yum install -y python3 python3-pip mesa-libGL
RUN pip3 install --upgrade pip setuptools
RUN pip3 install opencv-python opencv-contrib-python numpy pandas jupyterlab #追記しました
ほいで、docker-compose.ymlのコマンド部分もjupyter-labように修正します。
version: '3'
services:
opencv_test:
container_name: opencv_test
build:
context: .
dockerfile: Dockerfile
command: jupyter-lab # 編集しました
tty: true
working_dir: '/root/'
volumes:
- ./opt:/root
一旦docker-compose down
をしてコンテナを落とします。
ではbuildしますdocker-compose build
残念エラーでした。
error: command 'gcc' failed with exit status 1
↑のエラーが出ていたのでこちらも根本的な原因はわかりませんでしたが、
OSにgccを入れてみます。
FROM centos:latest
RUN yum update -y
RUN yum install -y python3 python3-pip mesa-libGL gcc # 追記しました。
RUN pip3 install --upgrade pip setuptools
RUN pip3 install opencv-python opencv-contrib-python numpy pandas jupyterlab
ではもう一度、docker-compose build
残念またダメでした。。腰痛は悪化しました。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Ferror_3.png?alt=media&token=04f3db5a-06c6-4b3d-b2f3-d47812738e44)
include <pyconfig.h>
のエラーが出ていたのでpythonが古いかもと思い
python3-develでpython3をインストールしてみることにしました。
FROM centos:latest
RUN yum update -y
RUN yum install -y python3-devel python3-pip mesa-libGL gcc # python3をpyton-develに変えました
RUN pip3 install --upgrade pip setuptools
RUN pip3 install opencv-python opencv-contrib-python numpy pandas jupyterlab
ではbuildします。
![buildできました!](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Ferror_4.png?alt=media&token=7c438497-37ec-4d92-8064-39cef6ffcf84)
ではコンテナ起動です。
$ docker-compose up
残念コンテナが落ちました。。
opencv_test | [C 2021-11-25 11:58:15.390 ServerApp] Running as root is not recommended. Use --allow-root to bypass.
ルートでコマンドを叩くなということのようです。
docker-compose.ymlを修正しました。
version: '3'
services:
opencv_test:
container_name: opencv_test
build:
context: .
dockerfile: Dockerfile
command: jupyter-lab --allow-root # --allow-rootを追記しました。
tty: true
working_dir: '/root/'
volumes:
- ./opt:/root
では立ち上げます。$ docker-compose up
おお!立ち上がりましたがノートブックにアクセスできません!
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Ferror_5.png?alt=media&token=58645592-66c6-45b5-aff4-ccb2460fdb61)
涙が出そうですが、portの設定をしていませんでした。
docker-compose.ymlを修正します。
version: '3'
services:
opencv_test:
container_name: opencv_test
build:
context: .
dockerfile: Dockerfile
command: jupyter-lab --allow-root
tty: true
working_dir: '/root/'
volumes:
- ./opt:/root
ports:
- '8888:8888' # 追記しました。
ではもう一度 docker-compose up
!!状況変わらずでした。。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Ferror_5.png?alt=media&token=fc74843c-dbac-4886-b0c3-6f031895de53)
わからなくなってしまいましたので「jupyter note 開かん docker」で検索しました。
どうやらdockerコンテナの外からアクセスしているので弾かれてしまうようでした。なのでコマンドに --ipオプションを付けることで解消できるようです。
docker-compose.ymlを修正します。
version: '3'
services:
opencv_test:
container_name: opencv_test
build:
context: .
dockerfile: Dockerfile
command: jupyter-lab --ip=* --allow-root # 追記しました。
tty: true
working_dir: '/root/'
volumes:
- ./opt:/root
ports:
- '8888:8888'
ではもう一度 docker-compose up
してターミナルに出力されたURLでアクセスします。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Flab.png?alt=media&token=23653d11-11d2-43e0-ba2b-853a314fa12b)
おおお!立ち上がりました。
お試しで先ほど作ったプログラムもnotebook上に入力します。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2Flab2.png?alt=media&token=f7ad35d1-222b-4589-91ff-6506598a77d1)
おおやっと動きました。
一安心です。
今回やってみて思ったのは、centos系のエラーの原因の根本がわからなかったのが悔しかったです。
ただnotebookが動いたので、色々と実験をしていきたいと思いました。
ここまでお読みいただきありがとうございました。