コンテナー仮想化

DockerでReadyMedia(MiniDLNA)を起動する

投稿日:2016/02/21 更新日:

家にCentOSでNASといってもRAID構成はしていない簡易的なものがあるのですが、DockerでReadyMediaを起動してみました。
ホストにインストールしてもよかったのですが、FFmpegって外部レポジトリ参照したり依存物も多くてできればゲストとして動かしたいというのが動機です。

つい先日までCentOS6.6で動かしていたのですが、Dockerをよく使うのでCentOS7.1へアップデートしていました。
DLNAといえばMediaTombだったのですが最近更新が止まっているのかCentOS7.1ではうまくコンパイルできなかったので、ReadyMediaをインストールすることにしました。
FFmpegをインストールするとき、自分でコンパイルするか外部レポジトリを使うかでいろいろやり方があるのですが、nux-dextopのレポジトリからインストールする方法にしました。
自分で、FFmpegのインストールオプション等を調整したいという方はソースからのインストールのほうがより細かく調整できます。
今回は、DockerのゲストOSとして起動するのでyumでお手軽にインストールします。

Dockerコンテナに含めるファイル

start.sh

#!/bin/bash

if [ ! -e /etc/sysctl.d/readymedia.conf ]; then
  echo "fs.inotify.max_user_watches = 100000" >> /etc/sysctl.d/readymedia.conf
  sysctl -p
fi

/usr/local/sbin/minidlnad -d

ReadyMediaのリストに表示させるメディアの数が8192より多いと、それ以上ファイルを追加できないので、fs.inotify.max_user_watchesの数を100000に変更しています。
8192より少ない場合は指定しなくてもよいと思います。sysctlの設定を変更する場合はDockerのrun時に–privilegedを指定する必要があり、Dockerにより権限を与えることになるので。

minidlna.conf

# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200

# network interfaces to serve, comma delimited
#network_interface=eth0

# specify the user account name or uid to run as
#user=jmaggard

# set this to the directory you want scanned.
# * if you want multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to specific content types, you
#   can prepend the types, followed by a comma, to the directory:
#   + "A" for audio  (eg. media_dir=A,/home/jmaggard/Music)
#   + "V" for video  (eg. media_dir=V,/home/jmaggard/Videos)
#   + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#   + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera)
media_dir=A,/media/audio
media_dir=V,/media/video
media_dir=P,/media/picture

# set this to merge all media_dir base contents into the root container
# note: the default is no
#merge_media_dirs=no

# set this if you want to customize the name that shows up on your clients
friendly_name=DLNA Server

# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
#db_dir=/var/cache/minidlna

# set this if you would like to specify the directory where you want MiniDLNA to store its log file
#log_dir=/var/log

# set this to change the verbosity of the information that is logged
# each section can use a different level: off, fatal, error, warn, info, or debug
#log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn

# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash ("/")
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg

# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes

# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no

# set this to strictly adhere to DLNA standards.
# * This will allow server-side downscaling of very large JPEG images,
#   which may hurt JPEG serving performance on (at least) Sony DLNA products.
strict_dlna=no

# default presentation url is http address on port 80
#presentation_url=http://www.mylan/index.php

# notify interval in seconds. default is 895 seconds.
notify_interval=900

# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1

# specify the path to the MiniSSDPd socket
#minissdpdsocket=/var/run/minissdpd.sock

# use different container as root of the tree
# possible values:
#   + "." - use standard container (this is the default)
#   + "B" - "Browse Directory"
#   + "M" - "Music"
#   + "V" - "Video"
#   + "P" - "Pictures"
#   + Or, you can specify the ObjectID of your desired root container (eg. 1$F for Music/Playlists)
# if you specify "B" and client device is audio-only then "Music/Folders" will be used as root
#root_container=.

# always force SortCriteria to this value, regardless of the SortCriteria passed by the client
#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

# maximum number of simultaneous connections
# note: many clients open several simultaneous connections while streaming
#max_connections=50

今回の設定では、cacheファイルをホストディレクトリに配置してdocker run時にホストディレクトリをマウントします。
またメディアファイルはコンテナ上からは/media/{audio,video,picture}として、docker run時にホストディレクトリをマウントします。
その他の設定は基本デフォルトだと思います・・・。

Dockerfileの内容

FROM centos:centos7

RUN yum -y update \
    && ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

RUN yum -y groupinstall "Development Tools" \
    && yum -y install git \
    && yum -y install libjpeg-turbo-devel libid3tag-devel libogg-devel libvorbis-devel flac-libs flac-devel wget sqlite-devel libexif-devel

RUN yum -y install git vim \
    && yum -y install epel-release \
    && yum -y localinstall http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm \
    && yum -y install ffmpeg ffmpeg-devel

RUN cd /usr/local/src \
    && wget -O  minidlna-1.1.5.tar.gz "http://downloads.sourceforge.net/project/minidlna/minidlna/1.1.5/minidlna-1.1.5.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fminidlna%2F&ts=1449585164&use_mirror=jaist" \
    && tar zxf minidlna-1.1.5.tar.gz \
    && cd minidlna-1.1.5 \
    && ./configure && make && make install

ADD minidlna.conf /etc/

RUN echo '/usr/local/lib' > /etc/ld.so.conf.d/minidlna.conf \
    && ldconfig

ADD start.sh /
RUN chmod +x /start.sh

CMD /start.sh

ReadyMediaコンテナの起動

# build
docker build -t readymedia .

# run
docker run -d -it \
  --net=host \
  --privileged \
  -v /datafs/docker/readymedia/cache:/var/cache/minidlna \
  -v /datafs/dlna:/media \
  --name readymedia \
  readymedia

ビルドして起動します。docker ps等でreadymediaが表示されていれば起動はしていると思います。
あとはDLNAクライアントで表示できれば問題ないと思います。
家の環境ではPS3とMacのVLCで再生できました。

-コンテナー仮想化
-

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

no image

MacでVagrantを使ってみる boxの準備から起動

いよいよVagrantを使ってみます。 Vagrantとはなにかということを調べてみました。 結論からいうと、仮想マシンを簡単に立ち上げるツールということではないかと思いました。 今までの流れ 1)O …

no image

MacでVagrantを使ってみる VirutalBoxのインストール

はてなブログで書いていたのですが、なんというかすっごい使いにくいのでこちらのブログで書くことにしました。 Vagrantを使用するためにVirutalBoxをインストールします。 VMWareに代表さ …

クローズドな環境で動いているシンプルなhtmlアプリケーションを一部Docker環境へ移行した話

経緯 クローズドな環境で動いている非常にシンプルなCMSを、一部Docker環境へ移行しました。 このアプリケーションは簡単に3つのサービスで構成されており、それぞれ以下の様な感じです。 ・CMS(h …

Chef実践入門を買ってみた

昨年くらいからChefやDevOpsという言葉をよく耳にする機会があって、Chefはすごい便利そうだなーと色々なホームページを見て自分の環境に導入してみたが実際の業務に使えるというほど深く触れなかった …

WindowsにLaravel 5.4をインストールする

どうもPHP初心者、Laravel初心者のものです。 今回の案件ではPHPのフレームワークにLaravelを使うことにしましたのでインストール手順をまとめたいと思います。 環境 ホストOS:Windo …