Dockerを使ってサンプルプログラムを動作させよう

本日(2020年10月4日)Docker イメージの配布を Docker Hub にて開始しました。ホスト OS は Ubuntu です。

ここではDockerとはなにか、Dockerの基本的な操作方法、Docker内で配布されたサンプルプログラムを動作させるまでを解説いたします。

Dockerとはなにか

既にご存じの方はこちらを読み飛ばして頂いて結構です。
聞いたことはあるけど使ったことはない…、という方はこのままお付き合いください。

DockerとはDocker社が作成した軽量で可搬性のある仮想環境を作成する仕組みです。
これまではバーチャルマシンなど大掛かりな仮想環境を作っていたものを、ホストOSとカーネルを共通化することで軽量・コンパクトなコンテナと呼ばれる仮想環境を作り出すことが出来ます。
開発環境から本番環境まで全てDocker内で完結できることから多くの企業で採用されています。

Dockerのインストール

Ubuntuへインストールする場合

これからずっとDockerを社内で使い続ける場合はリポジトリからインストールしてください。作業は煩雑ですがセキュリティアップデートがシステムに準じて行われますのでセキュアです。こちらのページに導入手順をまとめてあります。
逆にちょっと使ってみるだけだよという場合は公式ダウンロードサイトからdebファイルをダウンロードしてインストールしましょう。公式ダウンロードサイトをクリックしてLinux用をインストールしてください。

Windows10の場合

上記サイトからWindows用インストーラをダウンロードしてください。
Windows固有の情報については以下の公式チュートリアルをご参照ください。

初期確認

いくつかターミナル(パワーシェル)からコマンドをうって動作を確認しましょう。

$ docker
$ docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/home/****/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default
                           context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/home/terms/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/h
以下略

上のようになれば次のステップに進みます。

Docker イメージの取得

リポジトリからイメージを取得します。下のコードは長いのでそのままコピペでも良いと思います。

$ docker pull tokaikaoninsho/face_recognition_env

このイメージは Ubuntu をベースに開発環境を構築してあります。具体的には Python3 実行環境と Face01_Imager を動作させるためのライブラリ一式が入っています。

ダウンロードには時間がかかります。

ダウンロードが終わったらイメージが取得できているか確認してみましょう。

$ docker images
 REPOSITORY                            TAG       IMAGE ID       CREATED        SIZE
 tokaikaoninsho/face_recognition_env   latest    9b6fa2144f99   7 months ago   1.75GB

念の為今動いているコンテナがあるかどうか見てみましょう。(今の段階ではまだコンテナは動いていないはずです)

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

まだ何も動いていないことが確認できました。

Face01 Imager を動作させる

pull して頂いたイメージからコンテナを起動させます。この時同時にダウンロードしたディレクトリをマウントしてください。具体的には $ docker images とした時に以下のようになったことを確認した後に $ docker run をオプション付きで実行します。

$ docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
tokaikaoninsho/face_recognition_env   latest              9b6fa2144f99        4 hours ago         1.75GB

上のように確認が終わったら次のようなコードを打ちます。

$ docker run [イメージファイル]

docker runコマンドはイメージをビルドしてスタートさせる2つの機能を持っています。
更に-vオプションをつけることで今使っているパソコンに接続してデータを読み書きできるように指定します。
-itオプションはサンプルプログラムをホストのターミナルで実行できるようにしています。よくわからない場合はこちらの解説記事が分かりやすいです。

では下のように打ち込んでください。

## イメージからコンテナを作成してホストへマウントする
$ docker run -v /[ダウンロードしたFACE01のフォルダー]/:/home/app -it tokaikaoninsho/face_recognition_env /bin/bash

[ダウンロードしたFACE01のフォルダー]

上記の部分はホスト OS 側の Face01_Imager の実行ファイル・フォルダがあるディレクトリを指定してください。 Docker 側は /home/app/ を作成していてそこにマウントするようにしています。

上記が出来ましたら以下のように操作しながら動作を確認していきましょう。

## コンテナ内のフォルダへ移動する
root@fc707ed9c78f:/# cd /home/app/

## フォルダ内部の確認
root@fc707ed9c78f:/home/app# ls
pycache check_images dist face01_imager_115.py noFace npKnown.txt output pictures_of_people_i_know pytransform recognated test_script_for_imager115.py

## Face01 Imagerを起動
root@fc707ed9c78f:/home/app# python3 face01_imager_115.py
/home/app/check_images/
name 石川遼 date 2020,10,04,22,07,31,263093 face_distance 0.13
name 茂木健一郎 date 2020,10,04,22,07,31,392547 face_distance 0.12
name 永尾まりや date 2020,10,04,22,07,31,506078 face_distance 0.15
name 花田優一 date 2020,10,04,22,07,31,615693 face_distance 0.11
name 有賀さつき date 2020,10,04,22,07,31,726761 face_distance 0.15
344 Error: 小池知事kmirror.jpg に顔を検出できませんでした。 mode を hog から cnn にして再試行…
349 Msg: mode = 'cnn' で顔探索中…
361 Msg: 顔を検出しました mode='hog' に戻します
…OK
(以後略)

/home/app/ ディレクトリに移動し $ python3 face01_imager_115.py を起動しています。

Face01_Imager が動作していることが確認できます。

エラーが出たら

もし以下のようなエラーが出た場合、サンプルプログラムの使用期限が過ぎています。サンプルプログラムは予め設定された使用期限までしか使用することは出来ません。使用期限を過ぎて使用したい場合はご連絡ください。

$ python3 ./test_script_for_imager115.py 
Start test_script
 Traceback (most recent call last):
(中略)
 RuntimeError: License is expired

まとめ

Docker を使うと端末に何行か打ち込むだけで環境設定が完了、プログラムが動作確認できます。また出来上がったコンテナやイメージを削除するのも簡単です。

更にデプロイ時に様々なアプリケーションが相乗りしている PC に Docker をインストールするだけで互いに干渉しないシステムを構築することができます。

今回配布する Docker イメージは Face01_Imager 用です。
Face01_Graphics に対応させた Docker イメージはまだ作成できておりません。作成でき次第、本ブログで公開させていただきます。

以上です。最後までお読みいただきありがとうございました。

Follow me!