CoreOSで動かしているMoinMoin はData Volume ContainerにBitTorrent Sync を使っています。Figを使う場合もvolumes_from のキーを使い定義ができます。
fleet units MoinMoinのfleet unitファイルです。これをfig.ymlに変換します。環境変数のVIRTUAL_HOST
はFQDN、SSLは有効にしている例です。引数はMoinMoinのユーザー名を指定しています。
~/docker_apps/moinmoin-system/moinmoin@.service [Unit] Description=MoinMoin Service Wants=%p-data@%i.service After=%p-data@%i.service [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill %p%i ExecStartPre=-/usr/bin/docker rm -v %p%i ExecStartPre=/usr/bin/docker pull masato/moinmoin ExecStart=/usr/bin/docker run --name %p%i \ --volumes-from %p-data%i \ -e VIRTUAL_HOST=www.example.com \ -e SSL=true \ masato/moinmoin ScottTiger ExecStop=/usr/bin/docker kill %p%i [Install] WantedBy=multi-user.target [X-Fleet] Conflicts=%p@*.service MachineMetadata=role=moin
同様に、Data Volume Containerのunitファイルもfig.ymlに変換しますが、BitTorrent Syncは使わないようにします。
~/docker_apps/moinmoin-system/moinmoin-data@.service [Unit] Description=MoinMoin Data Service Requires=docker.service After=docker.service [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill %p%i ExecStartPre=-/usr/bin/docker rm -v %p%i ExecStartPre=-/usr/bin/docker pull masato/btsync ExecStart=/usr/bin/docker run --name %p%i masato/btsync xxx ExecStop=/usr/bin/docker kill %p%i [Install] WantedBy=multi-user.target [X-Fleet] Conflicts=%p@*.service MachineMetadata=role=moin
fig.yml 上記のunitファイルをfig.ymlに書き直します。だいぶすっきりしたYMLファイルになりました。テスト起動なのでSSLは使いません。
fig.yml moinmoin: image: masato/moinmoin command: ScottTiger volumes_from: - data environment: VIRTUAL_HOST: www.example.com data: image: ubuntu:14.04 command: /bin/bash volumes: - /data
figを使いコンテナを起動します。fleetを使う場合は個別にunitを起動しないといけないのですがfig up
だけで済むのは便利です。
$ fig up -d Creating root_data_1... Creating root_moinmoin_1... $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d99cedd6c882 masato/moinmoin:latest "/run-moinmoin.sh" 19 seconds ago Up 18 seconds 80/tcp root_moinmoin_1 4df621c0854d ubuntu:14.04 "/bin/bash" 19 seconds ago Exited (0) 18 seconds ago root_data_1
MoinMoinデータのリストア バックアップしている最新のpagesをIDCFオブジェクトストレージからダウンロードします。
$ s3cmd get s3://xxx/backups/2014-11-26-17-16-09_pages.tar.gz $ LATEST_FILE=2014-11-26-17-16-09_pages.tar.gz
Data Volume Containerをマウントして、tar.gzを解凍します。
$ docker run --rm --volumes-from root_data_1 -v $(pwd ):/backup ubuntu /bin/bash -c "rm -fr /data/moin/pages && mkdir -p /data/moin/pages && tar zxf /backup/$LATEST_FILE --strip-components=1 -C /data/moin/pages/ && chown -R www-data:www-data /data/moin/pages/ && chmod -R g+w /data/moin/pages/ && chmod 2775 /data/moin/pages/"
userファイルをData Volume Containerにコピーします。
$ docker run --rm --volumes-from root_data_1 -v $(pwd ):/backup ubuntu /bin/bash -c 'mkdir -p /data/moin/user && cp /backup/user /data/moin/user/xxxxxxxxxx.xx.xxxxx && chown -R www-data:www-data /data/moin/user/ && chmod -R g+w /data/moin/user/ && chmod 2775 /data/moin/user/'
docker execコマンドを使い、起動しているコマンドにbashを起動します。
$ docker exec -it root_moinmoin_1 /bin/bash
elinksからMoinMoinが起動していることを確認します。
$ IP_ADDRESS=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" root_moinmoin_1) $ elinks $IP_ADDRESS
コンテナの削除 とりあえず動いているようなので、今日の作業の終了としてコンテナは削除します。まず起動しているコンテナをstopします。
$ fig stop Stopping root_moinmoin_1...
コンテナを削除します。アタッチしたボリュームも削除します。
$ fig rm -v Going to remove root_moinmoin_1, root_data_1 Are you sure? [yN] y Removing root_data_1... Removing root_moinmoin_1...