ニュース
» 2016年03月16日 08時00分 公開

古賀政純の「攻めのITのためのDocker塾」:第18回 Dockerで植物が育つ様子を自動録画してみよう――その2 (2/3)

[古賀政純(日本ヒューレット・パッカード),ITmedia]

 以下は、Motionとhttpdが稼働するDockerイメージを生成するためのDockerfileの例です。今回、Dockerコンテナのテンプレートは、CentOS 7.2のOSイメージを使用します。また、Motionとhttpdといった複数のサービスが同時に一つのDockerコンテナ内で稼働しますので、連載第16回でご紹介したように、Supervisorを利用してMotionとhttpdを稼働、監視するようにします。そのため、Dockerfileにはhttpd、motionだけでなく、Supervisorの導入工程も含まれています。


# mkdir /root/supervisord_httpd_motion
# cd /root/supervisord_httpd_motion/
# vi Dockerfile
FROM            centos:centos7.2.1511
MAINTAINER      Masazumi Koga
ENV             container docker
RUN             yum install -y \ ↓Motion RPMパッケージの入手に必要なリポジトリを追加
http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm \
                && yum clean all 
RUN             yum update -y \
                && yum clean all ↓iprouteとSupervisorとhttpdとMotionをインストール
RUN             yum install -y iproute supervisor httpd motion \
                && yum clean all
RUN             mkdir -p /var/www/html/motion ←画像・動画データ保存用のディレクトリを作成
COPY            motion.conf /etc/motion/ ←Motionの設定ファイルを配置
COPY            supervisord.conf /etc/ ←Supervisorの設定ファイルを配置
RUN             chmod 600 /etc/supervisord.conf ←Supervisorの設定ファイルの閲覧権限を設定
EXPOSE          80 9001 ←Webアクセスに必要なポートを設定
ENTRYPOINT      ["/usr/bin/supervisord"] ←Supervisorのデーモンを起動

 上記のDockerfileについて簡単に解説します。


必要なRPMパッケージの導入

  • 上記のDockerfileでは、まずMotionのRPMパッケージのインストールに必要なnux-dextopリポジトリを追加しています。
  • supervisorのインストールに必要なEPELリポジトリも、nux-dextopリポジトリのインストール時に依存関係を自動的に解決されてインストールされます。
  • iprouteはipコマンドなどを提供するRPMパッケージです。コンテナに割り当てられたIPアドレスを表示する際に必要になりますのでインストールしておきます。
  • 必要なRPMパッケージとしてsupervisor、httpd、motionをインストールします。

画像ファイルや動画ファイルの保存用ディレクトリ

  • Dockerコンテナ内で録画した動画データの保管場所となる「/var/www/html/motion」ディレクトリを作成しています。
  • httpd RPMパッケージが標準で提供するWebコンテンツ用のディレクトリは、/var/www/htmlディレクトリですので、動画データの保存先としてコンテナ内の/var/www/html/motionディレクトリを作成しておけば、httpd RPMパッケージが提供する設定を変更することなく、httpdサービスを起動するだけで、クライアントに動画データをHTTPプロトコルで提供できます。

Motionの設定ファイル

  • COPY行ではMotionの設定ファイルであるmotion.confをコンテナ内の/etc/motionディレクトリにコピーしています。
  • このmotion.confファイル自体は、Dockerfileが置いたホストOS上の作業用ディレクトリ(今回はホストOS上の/root/supervisord_httpd_motionディレクトリ)にあらかじめ配置しておく必要があります。

Supervisorの設定ファイル

  • 次のCOPY行でMotionとhttpdを稼働させるためのSupervisorの設定ファイルsupervisord.confファイルをコンテナ内の/etcディレクトリにコピーしています。
  • SupervisorのWeb管理画面へのアクセスを行うためのアカウントとパスワードは/etc/supervisord.confファイルに暗号化されずに平文(ひらぶん)で記述します。したがって、「chmod 600 /etc/supervisord.conf」により、/etc/supervisord.confファイルのアクセス権限を「所有者のみが読み込みと書き込み可能」に設定します。

 以上で、Motionとhttpdをsupervisordで起動・監視するDockerコンテナのためのDockerfileが完成しました。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ