GhostをDockerでGCP上で起動したときのメモ

  • 2
    いいね
  • 0
    コメント

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/