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

wordpressよりシンプルなghostに移行した時にした処理の備忘録
開発環境でthemeをいじって本番にGUIを通じて本番環境にインポート(lab->import)して、
本番環境のブログを更新して、GUIを通じて開発環境にインポート(general->update theme)する。

# 必要なもの
- Docker
- Docker-machine
- Virtual box

# Install(Mac)
```console
$ brew install docker-machine
$ brew install docker
$ brew install virtual-box
```

# Version
```console
$ docker-machine --version
docker-machine version 0.8.1, build 41b3b25
$ docker --version
Docker version 1.12.1, build 6f9534c
```

# Docker-machene
```console
$ 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して編集した方が早い

```console
$ 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が遅い場合はコンテナ消して起動し直した方が早い

```console
$ vim ghost/config.js # ゴニョゴニョ
$ docker restart blog
```

## Backup
```console
$ mkdir backup
$ tar cvf backup/backup.tar ghost
```

## Restore
```console
$ 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を使う必要はあまり必要ない気がする

```console
$ # 名前無し
$ 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
```console
$ docker pull busybox
$ docker create --name data -v /var/lib/ghost busybox
```

## Ghost Container
```console
$ 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
```console
$ open http://$(docker-machine ip):80
```

## Backup
Data volume containerをマウントしてバックアップ後削除されるコンテナを使う

```console
$ 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をマウントとしてバックアップを復元後削除されるコンテナを使う

```console
$ find backup
backup
backup/backup.tar
$ docker run --rm --volumes-from data \
-v $(pwd)/backup:/backup busybox \
tar xvf /backup/backup.tar 
```

# GCP



## 接続テスト
```console
$ 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
```console
$ sudo su - 
$ apt-get update
$ apt-get install docker.io
```

## <del>backupファイルのコピー</del>
```
$ scp backup/backup.tar gcp1:/home/mgoldchild
$ ssh gcp1
$ mkdir ghost
$ tar xvf backup/backup.tar -C .
$ vim ghost/config.js # productionのURL, portを変更
```


# そうじ
```console
$ 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/