目次

Convoy

データの永続化を行うため、Dockerのストレージドライバ兼バックアッププラグインConvoyを導入しています。

1.Convoyのインストール

DockerホストにGitHubからConvoyをインストールします。
DockerホストはCoreOSで稼働していますので、下記はcoreユーザーでの実行になります。
<html>

$ CONVOY_VER=0.5.0 …(1)
$ CONVOY_URL=https://github.com/rancher/convoy/releases/download/v$CONVOY_VER
$ CONVOY_FILE=convoy.tar.gz
$ pushd /tmp
$ wget $CONVOY_URL/$CONVOY_FILE
$ tar xvf $CONVOY_FILE
$ sudo cp -v convoy/convoy* /opt/bin …(2)
$ popd

(1) 2017/11/07執筆時のバージョンです。最新バージョンは</html>GitHub<html>で確認してください。<br>
(2) /opt/binは事前に作成済のディレクトリです。
</html>

2.Convoyの起動

インターネット上では、ループバックデバイスを作成しストレージ・バックエンドにdevicemapperを利用した記事が多いのですが、Dockerコンテナのフェイルオーバーを想定し、NFS上でのディレクトリ共有で行うことにします。
下記の起動/停止スクリプトを作成し、start/stopで起動/停止を行います。
(例)
/opt/systemd/docker/convoy.shに作成し、/opt/systemd/docker/convoy.sh startで起動します。
<html>

#!/bin/sh
CONVOY_DIR=/var/docker/volume …(1)
PROG=convoy
CONVOY=/opt/bin/$PROG
CONVOY_LOG=/var/log/$PROG.log
CONVOY_PID=/var/run/$PROG.pid
CONVOY_SOCKET=/var/run/convoy/convoy.sock
CONVOY_OPTS=“–drivers vfs –driver-opts vfs.path=$CONVOY_DIR” …(2)
PLUGIN_DIR=/etc/docker/plugins
PLUGIN_SPEC=$PLUGIN_DIR/convoy.spec …(3)

[ ! -e $PLUGIN_DIR ] && mkdir $PLUGIN_DIR
case “$1” in
start)

[ -e $CONVOY_PID ] && exit
echo -e "\n*\n*** Start $PROG $(date) ***\n*\n" >> $CONVOY_LOG
mkdir   -p /var/run/$PROG
echo    "unix://${CONVOY_SOCKET}" > $PLUGIN_SPEC                …(4) 
$CONVOY daemon $CONVOY_OPTS >> $CONVOY_LOG 2>&1 &
echo    $(pidof $CONVOY) > $CONVOY_PID
;;

stop)

[ ! -e $CONVOY_PID ] && exit
kill    $(cat $CONVOY_PID)
rm  -f  $CONVOY_PID
rm  -f  $PLUGIN_SPEC
echo -e "\n*\n*** Stop $PROG $(date) ***\n*\n" >> $CONVOY_LOG
;;

esac

(1) Convoyボリュームを配置するNFS上のディレクトリです。実際はシンボリックリンクを作成しています。<br>
(2) NFSを使用する場合の起動パラメータです。<br>
(3) DockerエンジンにConvoyを組み込む先のディレクトリです。<br>
(4) DockerエンジンとUnixドメインソケットで連携させます。
</html>

3.ボリュームの作成

作成するボリューム名をwebdataとした場合の作成方法は下記になります。
<html>

$ sudo /opt/bin/convoy create webdata
$ sudo /opt/bin/convoy mount webdata

# 作成したボリュームを確認してみます
$ sudo /opt/bin/convoy list

</html>

4.起動サービス定義

Systemd用の起動サービス定義ファイルは下記になります。
<html>

[Unit]
Description = Docker Volume Plugin - Convoy
Before = docker.service

[Service]
Type = oneshot
ExecStart = /opt/systemd/docker/convoy.sh start
ExecStop = /opt/systemd/docker/convoy.sh stop
RemainAfterExit = yes

[Install]
WantedBy = default.target

</html>