Update 2014-10-13
: MoinMoinをDigitalOceanのCoreOSに移設する - Part2: Dockerイメージの作成Update 2014-10-12
: MoinMoinをDigitalOceanのCoreOSに移設する - Part1: はじめに
Dockerで構築したWordPressの2-Container-Appを複製してステージング環境を作ろうとしました。
commitしてイメージを作成してからコンテナを起動したのですがvolumeに指定したディレクトリの中身がありません。
Data Container volumes can’t be saved as images #7583にもissueがありますが現状のデザインのようです。
Right, so volumes are not part of the container’s fs, they are on the host’s fs.
In most cases people don’t want data in volumes to be in an image, either because it’s huge, sensitive information, etc.
Flockerみたいな仕組みはあらためて便利に思います。
volumeバックアップの参考資料
StackOverflowから参考になりそうなポストを探します。
nsenter
nsenterはnsenterコマンドをDockerコンテナからホストにマウントして使うでインストールして、nseのラッパーを作成しておきます。
|
コンテナのcommit
複製元になるコンテナをcommitします。ただしvolumeのディレクトリはimageに含まれません。
$ docker stop wp |
DBデータコンテナの作成
DBコンテナをinspectしてvolumeを確認します。
$ docker inspect --format="{{ .Volumes }}" wp-db |
DBコンテナの/var/lib/mysqlと/etc/mysqlをバックアップをします。
$ docker run --rm --volumes-from wp-db -v $(pwd):/backup busybox tar cvf /backup/var_lib_mysql.tar /var/lib/mysql |
nsenterで接続したいのでbusyboxでなくubuntuでデータコンテナを作成します。
作成したデータコンテナにDockerホストのローカルにバックアップしたtarをuntarします。
$ docker run -i -t -d -v /var/lib/mysql -v /etc/mysql --name db-stg-vol ubuntu /bin/bash |
db-stg-volコンテナをマウントしてdb-stgコンテナを起動します。
$ docker run --name db-stg -d --volumes-from db-stg-vol masato/blog-db |
nsenterでdb-stgに接続して、DBコンテナが正常に複製できたかmysqlの確認をします
$ nse db-stg |
WordPressデータコンテナの作成
wpコンテナのボリューム(/app/wp-content)をバックアップして、wp-stg-volにリストアします。
$ docker run --rm --volumes-from wp -v $(pwd):/backup busybox tar cvf /backup/app_wp_content.tar /app/wp-content |
db-stgコンテナのIPアドレスの確認をします。
$ docker inspect --format="{{ .NetworkSettings.IPAddress }}" db-stg |
wp-stgコンテナを起動します。
$ docker run -d --link db-stg:db -e DB_HOST="172.17.0.128" -e DB_PORT="3306" -e DB_PASS="password" --name wp-stg --volumes-from wp-stg-vol -p 8091:80 masato/blog |
このイメージは一度DBを作成した状態から作成しています。すでに/.mysql_db_createdが存在しているので/run.shを実行後にexitしてしまいます。そのためDB_HOSTとDB_HOSTの環境変数がlinkingから取得して設定できないため、上記のrunでは明示的に環境変数をしていしています。
|
使い捨てのコンテナで、どのような環境変数が設定される確認します
$ docker run --rm -i -t --link db-stg:db -e DB_HOST="172.17.0.128" -e DB_PORT="3306" -e DB_PASS="password" --volumes-from wp-stg-vol idcf/engineer-blog env |
wp-stgコンテナにnsenterで接続してリバースプロキシ用に、これから作成するxipのドメインを指定します。
$ nse wp-stg |
OpenRestyでリバースプロキシのHTTPルーティングを指定します。
$ docker restart wp-stg |
- xipのドメインで複製したコンテナの起動を確認します。