DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

GCEにDockerでnginxサーバ構築でImmutable Infrastructureに初挑戦

と言う事で話題になっているので挑戦しました。
普通にMac上でDockerだけやっても他の方の事例があるので、今回はGoogle Compute Engine上にサーバを作ってそのサーバをホストサーバとしてDockerを入れました。

■環境の確認

・Mac OSX 10.9 Mavericks
・Google Compute Engine centos-6-v20140415
そういえば、asiaリージョンいつの間にか出来ましたね

■GCE関連の設定

まずはhttps://console.developers.google.com/projectから、「CREATE PROJECT」して適当に新規プロジェクトを作ります。
プロジェクトが出来たら左のメニューから
「Compute Engine」->「VM Instances」で画面上に出る「NEW INSTANCE」
インスタンスを生成します。
※クレジット情報が必要です。
こんな感じでdocker-serverを構築します。

これでサーバにログインするために、Mac側にgcutilのSDKが必要なので設定します。 
gcutil Tool - Google Compute Engine — Google Developers
に書いてある通りなのですが、下記コマンドでDLします。

$ curl https://dl.google.com/dl/cloudsdk/release/install_google_cloud_sdk.bash | bash
DLが終わったら
$ gcloud auth login

をするとブラウザでauthの認証が開くので許可してあげます。
ターミナル戻るとproject_id入れるよう支持が出ると思いますので入れてあげて下さい。
プロジェクト IDは例えばこんな感じの文字列です。「spheric-mesh-223」
(何か不明なのがあれば、コンソール https://console.developers.google.com/project から確認してください)

上記が済めば下記コマンドでサーバにSSHできます。

$ gcutil --service_version="v1" --project="プロジェクト名" ssh --zone="asia-east1-a" "docker-server"
※このコマンドは「Compute Engine」->「VM Instances」画面にサーバリストが出ていて
リストの一番右の「SSHボタン」を押す事によっていつでも取り出せます。
一番最初だけ、パスフレーズ入れて鍵を勝手に生成してくれるようなのでちょっと待ちます。


ログインが成功すると、ターミナルは

[ke-16@docker-server ~]$
みたいに表示されると思います。(たぶんユーザ名は勝手にとってきてますね)
これでGCEサーバへのSSHは終了です。簡単ですね〜

ちなみにgcutilのコマンドメモとして
■ファイルを転送したい(push)

$ gcutil --project="プロジェクト名" push "docker-server" /Users/USER_NAME/Documents/a.txt /tmp
みたいな感じですね。オプションは「push サーバー名 転送元 転送先」です。
■ファイルを取得したい(pull)
$ gcutil --project="プロジェクト名" pull "db01" /tmp/my.cnf /Users/USER_NAME/Documents
単純にpushの逆です。
■FireWall変えたい
$ gcutil addfirewall port-80 --description="Open up port 80." --allowed="tcp:80”--project="プロジェクト名"
$ gcutil addfirewall port-443 --description="Open up port 443." --allowed="tcp:443”--project="プロジェクト名"
$ gcutil addfirewall port-3306 --description="Open up port 3306." --allowed="tcp:3306”--project="プロジェクト名"
のような感じです。

それでこのサーバをホストにDockerを用いてnginxサーバを構築したいのですが、これに関してはGitHubに先にまとめてしまったので
そちらをご覧下さい。
k1row/Docker · GitHub

いろんなサイトを参考にさせて頂きながら、Dockerfileを構築しました。
Dockerの個人的な感想としては、
・設定ファイル(Dockerfile)は可読性が高いので設定は容易
・実際いろんなリポジトリがすでにあり便利(Home | Docker Index)
・言われている通り、サーバ毎の環境を気にしなくて良くなるので効果的
・ただ、yumが結構重いのですがこれはこんなものなのでしょうか?
apt-getだとキャッシュすべしみたいな記載が散見されたのですが
・高負荷になった時にどういう挙動になるのか謎なので確かにproductionだとまだ怖い
・もっと細かく作るなら、Docker単体と言うよりは他のプロダクトとの組み合わせになりそう

って感じですかねー。でもとってもいいですね。

# 参考URL
Docker公式
Docker Documentation
Dockerfile - Docker Documentation
Run Reference - Docker Documentation

memorycraft: Dockerってなんじゃ?(docker+nginxで複数コンテナにWEBサーバーをたてる)
MacからSSH接続可能なDockerコンテナを作る。 - Less is Best
Docker Memo | すてねこのダンボール箱
私の Docker TIPS - Qiita
Dockerでnginxサーバー立ててみた。あとDockerの使い方とか。 - Less is Best
はじめてのDocker on EC2 | Developers.IO