Dockerで、Django,Anaconda3がinstallされたimageを作ってみる
概要
Dockerで、Django,Anaconda3,opencvがinstallされたimageを作ってみる。
参考書籍・サイト
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る
opencvで参考にしたサイト:
やって見たこと
djangoのテストアプリをlocalに作る
- pyenvを使って、pythonのversionをanaconda3で環境を作っておく。
$ pyenv global anaconda3-2.5.0 $ pyenv virtualenv dockeranaconda $ pyenv activate dockeranaconda # djangoをinstallして、projectを作成する $ pip install django $ django-admin startproject dockersite $ pip freeze > requirements.txt $ ls Dockerfile dockersite manage.py requirements.txt # この時点で、runserverして、127.0.0.1:8000に it workedが表示されればOK $ python manage.py runserver
Dockerfileを作成する
とりあえず、djangoの公式サイトに則って、以下のように作成して見ました! 変更したのは、FROMの箇所です。
FROM continuumio/anaconda3 # ここは、anaconda3の公式パッケージを持ってきた RUN apt-get update \ && apt-get install -y --no-install-recommends \ postgresql-client \ && rm -rf /var/lib/apt/lists/* WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install -r requirements.txt COPY . . EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Dockerfileからimageを作成してみる。
# djangotestという名前のimageを、Dockerfileから生成する docker build -t djangotest .
無事作成できた!
作成したimageからコンテナを起動してみる。
docker run -i -t -d djangotest /bin/bash
localhost:8000にあくせすしてみる。。。ページが表示されず。。。
多分portを指定してないせいだな!
$ docker run -d -p 8000:8000 djangotest
これで試してみる。。。できた!
とりあえず、これでpython, django, anaconda3 が含まれたimageができた!
opencvを入れてみる。
Dockerfileに、opencvを入れる記述を入れてみる。
参考サイト:
RUN apt-get update && \ apt-get install -y \ build-essential \ cmake \ git \ wget \ unzip \ yasm \ pkg-config \ libswscale-dev \ libtbb2 \ libtbb-dev \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libjasper-dev \ libavformat-dev \ libpq-dev RUN wget https://github.com/Itseez/opencv/archive/3.0.0.zip \ && unzip 3.0.0.zip \ && mkdir /opencv-3.0.0/cmake_binary \ && cd /opencv-3.0.0/cmake_binary \ && cmake -DBUILD_TIFF=ON \ -DBUILD_opencv_java=OFF \ -DWITH_CUDA=OFF \ -DENABLE_AVX=ON \ -DWITH_OPENGL=ON \ -DWITH_OPENCL=ON \ -DWITH_IPP=ON \ -DWITH_TBB=ON \ -DWITH_EIGEN=ON \ -DWITH_V4L=ON \ -DBUILD_TESTS=OFF \ -DBUILD_PERF_TESTS=OFF \ -DCMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=$(python3.5 -c "import sys; print(sys.prefix)") \ -DPYTHON_EXECUTABLE=$(which python3.5) \ -DPYTHON_INCLUDE_DIR=$(python3.5 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \ -DPYTHON_PACKAGES_PATH=$(python3.5 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") .. \ && make install \ && rm /3.0.0.zip \ && rm -r /opencv-3.0.0
再びimageをbuildしてみる。
$ docker build -t djangotest .
めっちゃ時間かかる、、、15分くらいしたら無事imageをbuildできた!
そのimageを元にcontainerをrunできるか確認してみる。
$ docker run -d -p 8000:8000 djangotest
無事 It worked!
が表示された!
できたコンテナのshell でanacondaとかopencvを使ってみる。
# 起動中のcontainerをshellで動かしてみる。 $ docker exec -it container_name or container_id /bin/bash
anaconda系がちゃんと動くか確認
>>> import numpy >>> import matplotlib import scipy
error出ないからanacondaはちゃんと入ってるぽい。
opencvを試してみる。
>>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: /opt/conda/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /opt/conda/lib/libopencv_ml.so.3.0)
やっぱinstallでerror出てからうまくopencvは、installできてなかったぽいな。。。
ちょっと多分、これは解決できそうにないので、opencvは別の方法を試してみる。
opencvを別の方法で入れてみる。
anaconda経由で入れるのが、楽そうなので、それをdockerfileに書き込んでみる。
参照サイト:
以下のコードを追記。
RUN conda install -y --channel https://conda.anaconda.org/menpo opencv3
これで再度、$ docker build -t djangocv .
してみる。。。。なんか怪しい挙動はあったが無事imageはbuildできた!
$ docker run -d -p 8000:8000 djangocv
でコンテナを起動してみる。
docker exec -i -t container_id /bin/bash
でコンテナをshellで動かしてみる。
>>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
またもやerror!cv2は入ってるぽいけど、やっぱopencvはソースからビルドするしかなさそうな気がする。。とりあえず、anacondaは無事入ったので、anacondaで色々進めていこう!