#Dockerとは?(簡単に)
Virtual Boxなどといった仮想マシーンと違い、仮想環境ごとにOSを作成する、起動する必要がないです。
アプリケーションを開発・実行環境から隔離し、アプリケーションを他の仮想マシーンより、素早く提供できることができます。
ロゴの出典:https://www.docker.com/
#DokcerFileとは
Docker上で動作させるコンテナの構成情報を記述するためのファイルのことです。
(つまり、ここを自分で書いたり、読んで理解しないとDockerを扱うことができない!)
#前置き
学校で、Intel社のOpenVinoModelServerを使用したプロジェクトを行っているので、Intel社の社員の方の公式githubのOpenVinoModelServerのDockerFileを読んで、理解していきたいです
OpenVinoModelServerの公式DockerFile
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
libgomp1 \
python3-dev \
python3-pip \
virtualenv \
usbutils \
gnupg2
RUN curl -o GPG-PUB-KEY-INTEL-OPENVINO-2020 https://apt.repos.intel.com/openvino/2020/GPG-PUB-KEY-INTEL-OPENVINO-2020
RUN apt-key add GPG-PUB-KEY-INTEL-OPENVINO-2020
RUN echo "deb https://apt.repos.intel.com/openvino/2020/ all main" > /etc/apt/sources.list.d/intel-openvino-2020.list
RUN apt-get update && apt-get install -y intel-openvino-dev-ubuntu18-2020.4.287
ENV DL_INSTALL_DIR=/opt/intel/openvino/deployment_tools
ENV PYTHONPATH="/opt/intel/openvino/python/python3.6"
ENV LD_LIBRARY_PATH="$DL_INSTALL_DIR/inference_engine/external/tbb/lib:$DL_INSTALL_DIR/inference_engine/external/mkltiny_lnx/lib:$DL_INSTALL_DIR/inference_engine/lib/intel64:$DL_INSTALL_DIR/ngraph/lib"
WORKDIR /ie-serving-py
COPY requirements.txt /ie-serving-py/
ENV WRAPT_INSTALL_EXTENSIONS=false
RUN virtualenv -p python3 .venv && \
. .venv/bin/activate && pip3 install --upgrade pip==20.2.1 && \
pip3 --no-cache-dir install -r requirements.txt --use-feature=2020-resolver
COPY start_server.sh setup.py version /ie-serving-py/
COPY ie_serving /ie-serving-py/ie_serving
RUN . .venv/bin/activate && pip3 install .
#このDockerfileで使用している命令群について
####・FROM ... Docker Hubで公開されているベースイメージを利用
書き方:
FROM <イメージ>
FROM<イメージ>:<タグ>
例:
FROM centos
FROM ubuntu:18.04
####・RUN … コマンドを実行する
書き方:
RUN <コマンド>
例:
RUN chown -R mysql:root /var/lib/mysql/
####・COPY … ファイル又はディレクトリをコピーする
書き方:
COPY <ソース> <送信先>
例:
COPY xxx.sh /usr/local/bin/xxx.sh
####・ENV … 環境変数設定
書き方:
ENV [key] = [value]
例:
ENV PYTHONPATH="/opt/intel/openvino/python/python3.6"
####・WORKDIR ... 作業ディレクトリ指定
書き方:
WORKDIR <ディレクトリパス>
#実際に読んでみる
1行目 ... ubuntu0Sのimageを利用する
Linuxディストリビューションの1つであり、フリーソフトウェアとして提供されているubuntuの18.04は現在、最新に近くでかつ安定している
2~10行目 ... ubuntuのパッケージ(ca-certificates,curl,libgomp1,python3-dev,python3-pip,virtualenv,usbutils,gnupg2)をインストールする
コマンドのオプション -y は コマンドの途中で聞いてくる yes を自動入力されるためです
--no-install-recommends は デフォルトの必須ではないパッケージもインストールさせない為です
12行目
Intelの公式リポジトリから、公開鍵ファイルを、**"GPG-PUB-KEY-INTEL-OPENVINO-2020"**というファイル名で、インストールする
curlはURLを使用してデータ転送するためのコマンドラインツールです
-oは、ファイル名を指定してダウンロードするときのcurlのオプションです
GPGは公開鍵暗号を手軽に利用することが出来るフリーソフトウェアです
13行目
公開鍵ファイル**"GPG-PUB-KEY-INTEL-OPENVINO-2020"**を信頼キーのリストに新しいキーとして追加する
Ubuntu公式以外からパッケージを取得するには、このコマンドで認証する鍵情報を取り込んでおく必要があります
apt-key は、apt が パッケージを認証するのに使用するキーの一覧を管理します
14行目
以下の相対パス"/etc/apt/sources.list.d"に、intel-openvino-2020.listを作成し、**"deb https://apt.repos.intel.com/openvino/2020/ all main"という文字列を出力する
echoコマンドは、文字列をファイルに出力する場合は、>**で出力するファイル名を指定します
15行目
OpenVinoツールキットの開発者パッケージの**"intel-openvino-dev-ubuntu18-2020.4.287"**をダウンロードする
19行目
Pythonのimport文で標準ライブラリやpipでインストールしたパッケージ、自作のパッケージなどをインポートするときに探索されるパスを設定
20行目
共用ライブラリが格納されているパスを指定
21行目
作業ディレクトリを、**"/ie-serving-py"**と指定
24行目
"requirements.txt"というテキストファイルを"/ie-serving-py/"の直下に置く
25行目
wraptの拡張機能インストールをoffにします
wraptとはラッパー記述を補助してくれるライブラリです
ラッパーとはラップされたオブジェクトを使用する「異なる」方法を提供するものです(ほかにも、さまざまな意味がほかのwebサイト、書籍にあるので、詳しく知りたい方はそちらを参考にしてください)
26行目
pythonの仮想環境を作成する
-p オプションを付けてバージョンを指定することでそのバージョンで仮想環境が作られます
27行目
仮想環境をacitvateし、pip20.2.1をインストールする
28行目
設定ファイルrequirements.txtに従ってパッケージが一括でインストールしている
--use-feature=2020-resolverというオプションで新しいリゾルバーを使えます
--no-cache-dirというオプションは、キャッシュは通常Dockerイメージでは役に立たないため、キャッシュを無効にすることでイメージサイズを縮小させています
30行目
start_server.shをversionにコピーする
setup.pyを**/ie-serving-py/**以下にコピーする
31行目
ie_servingを**/ie-serving-py/ie_serving**にコピーする
33行目
仮想環境をactivateし、パッケージをインストールする