wordpressよりシンプルなghostに移行した時にした処理の備忘録
開発環境でthemeをいじって本番にGUIを通じて本番環境にインポート(lab->import)して、
本番環境のブログを更新して、GUIを通じて開発環境にインポート(general->update theme)する。
必要なもの
- Docker
- Docker-machine
- Virtual box
Install(Mac)
$ brew install docker-machine
$ brew install docker
$ brew install virtual-box
Version
$ docker-machine --version
docker-machine version 0.8.1, build 41b3b25
$ docker --version
Docker version 1.12.1, build 6f9534c
Docker-machene
$ docker-machine create --driver virtualbox default
$ docker-machine ls
$ docker-machine env default
$ docker-machine start default
$ eval $(docker-machine env default)
$ docker info # 接続確認
開発用
Container
Themeの開発はghost/theme以下にcloneして編集した方が早い
$ mkdir ghost
$ docker run --name blog \
-p 80:2368 -v $(pwd)/ghost:/var/lib/ghost \
-d ghost npm start --production
$ find ghost -maxdepth 1
ghost
ghost/apps
ghost/config.js
ghost/data
ghost/images
ghost/themes
Restart Conatainer
Memo: restartが遅い場合はコンテナ消して起動し直した方が早い
$ vim ghost/config.js # ゴニョゴニョ
$ docker restart blog
Backup
$ mkdir backup
$ tar cvf backup/backup.tar ghost
Restore
$ find backup
backup
backup/backup.tar
$ tar xvf backup/backup.tar -C . # カレントディレクトリにghostフォルダが展開される
$ docker run --name blog \
-p 80:2368 -v $(pwd)/ghost:/var/lib/ghost \
-d ghost npm start --production
本番用
Data Volume
Data Volumeを予め作成しておけば、docker⌘ディレクトリ以下にData Volumeを
作る際わかりやすい名前を付けられるが、Data Volume Containerを使う場合は
Container名を指定できるので、docker volumeを使う必要はあまり必要ない気がする
$ # 名前無し
$ docker create --name data -v /var/lib/ghost busybox
$ docker volume list
DRIVER VOLUME NAME
local 77d3126e1ec04353cb58e1548e46fe42b97c4347e494634814ca1bd2b86bf83f
$ docker rm data
$ docker volume rm 77d3126e1ec04353cb58e1548e46fe42b97c4347e494634814ca1bd2b86bf83f
$ # 名前あり
$ docker volume create --name store
$ docker create --name data -v store:/var/lib/ghost busybox
$ docker volume list
DRIVER VOLUME NAME
local store
$ docker rm data
$ docker volume rm store
Data Volume Container
$ docker pull busybox
$ docker create --name data -v /var/lib/ghost busybox
Ghost Container
$ docker pull ghost
$ docker run --name blog --restart=always \
--volumes-from data -p 80:2368 \
-v $(pwd)/ghost:/var/lib/ghost \
-d ghost npm start --production
Acccess Test
$ open http://$(docker-machine ip):80
Backup
Data volume containerをマウントしてバックアップ後削除されるコンテナを使う
$ mkdir backup
$ docker run --rm --volumes-from data:ro \
-v $(pwd)/backup:/backup busybox \
tar cvf /backup/backup.tar /var/lib/ghost
$ find backup
backup
backup/backup.tar
Restore
data volume containerをマウントとしてバックアップを復元後削除されるコンテナを使う
$ find backup
backup
backup/backup.tar
$ docker run --rm --volumes-from data \
-v $(pwd)/backup:/backup busybox \
tar xvf /backup/backup.tar
GCP
接続テスト
$ cat ~/.ssh/id_rsa.pub # GCPのメタデータのSSH認証キーに追加
$ ssh -i ~/.ssh/id_rsa mgoldchild@100.100.100.100
$ cat ~/.ssh/config # 以下のGCP設定を追加
Host gcp1
HostName 100.100.100.100
IdentityFile /Users/os10/.ssh/id_rsa
User mgoldchild
Protocol 2
ServerAliveInterval 15
ServerAliveCountMax 10
$ ssh gcp1
Docker install in Debian 8
$ sudo su -
$ apt-get update
$ apt-get install docker.io
backupファイルのコピー
$ scp backup/backup.tar gcp1:/home/mgoldchild
$ ssh gcp1
$ mkdir ghost
$ tar xvf backup/backup.tar -C .
$ vim ghost/config.js # productionのURL, portを変更
そうじ
$ docker-machine rm default
$ docker rm $(docker ps --all --quiet) -f
$ docker rmi $(docker images --quiet) -f
$ docker volume rm `docker volume ls -q -f dangling=true`
References
https://hub.docker.com/_/ghost/
https://hub.docker.com/_/busybox/
http://qiita.com/sokutou-metsu/items/b83b275198fc9594f5a4
https://github.com/docker-library/ghost/issues/7
http://qiita.com/togana/items/30b22fc39fe6f7a188ec
http://alexander.holbreich.org/docker-ghost-image/