Upload
hideo-matsumoto
View
2.064
Download
0
Embed Size (px)
Citation preview
Web 制作会社 meets
月刊ライトニングトーク 2014 年 5 月号 (β)2014 年 5 月 19 日
松本英夫 @pekeq / RYDEN Inc.
自己紹介• 松本英夫 (@pekeq)
• 株式会社ライデン
• アラフォープログラマー– インターネット技術で 20 年
経歴だけ長くて実力が伴わない残念なタイプです– PHP, Python, (Coffee|Type|Java)Script
ざっくり docker とは?• 「軽い」仮想化環境– 立ち上がりが早い– メモリやディスクを(そんなに)食わない
• 最近流行してる– github 風に「ぼくのさいきょうの VM 」を公
開できる• いみゅーたぼー
他の仮想化環境との違い• 「コンテナ」を作ることに特化
– アプリケーションに必要な依存をひとまとめにして、「コンテナ」として配布できる
– Dev はコンテナ内部の品質を作り込めば良く、 Ops はコンテナの外側から操作すればよい
• 厳密な仮想化ではない– 「アプリケーション環境を分離させること」が目的
• 「筋肉増強剤を用いた chroot みたいなもの」– その分、軽い
Why Container?
( 閑話休題 ) 「コンテナ」小話• 「沖仲仕」という仕事があります 。 ( 略 )• 港で、輸送船の荷物の積み替えをする、「荷揚げ労働者」の
人達のことです。
• コンテナによる輸送という新しいシステムを思いついてから数年で、 ( 略 ) 積み込みから輸送先までコンテナを下ろすこと無く届けるサービスに変わりました。
• コンテナへの積み込みも陸で行いトラックに載せ、港でコンテナごと積み替えるので、積み替えの仕事が無い。
「孫の代までの仕事」が 10 年で消えたケースhttp://d.hatena.ne.jp/repon/20121030/p1
Web 制作会社の納品• 制作して、ファイルで納品
– コンテンツはクライアント側でサーバーに配置
• クライアント先サーバーに入り口は置くが、一部 API 処理 (eg. Facebook API) だけ自社運用
• 環境構築・コンテンツ制作・運用まで自社で実施
クライアントのサーバー• 各社異なる環境 / ミドルウェア
– 去年まで PHP4(!) の環境が生き残っていたり– ファイル保存先のディレクトリ構成が違っていたり
• 各社異なるルール– 共通ヘッダ・フッタとか– 共通のおまじないとか
• これらを上手く分離して開発したい
これまで• VirtualHost を一杯作る
• 案件ごとにさくら VPS を買う
• 社内に置いたサーバーでVMware vSpshere Hypervisor (旧 ESXi )を使う
VirtualHost を一杯作る• 安い(さくら VPS 934 円 / 月・税別)• 放っておくぶんにはラク
• httpd.conf が地獄のようになる• 古い案件がいつまでも残る• httpd.conf だけでは分けきれないものがある
案件ごとにさくら VPS を買う• 案件がはじまったら契約、終わったら解約
• 専用で環境を立てるので、開発の支障は少ない
• ムダが多い– VPS1台の能力を使い切ることは、ほぼない– 解約処理してから実際に解約できるまで2ヶ月
VMware で仮想化• 社内に置いたサーバー (HDD 2TB, MEM 8GB) で運用• 安定性はピカイチ
• 毎回OS インストールからやるので結構手間– 案件を開始するたびに Ubuntu の新しいのが出てる
• 社外に公開できない– がんばって設定すればできるけど、面倒
• OS まるごと起動なのでメモリ / ディスクを結構食う
そこで Docker ですよ• さくら VPS HDD プラン 2G
– コンテナを複数立てても大丈夫
• 環境ごとの独立性は良い– 今 PHP4 が必要です!と言われても何とかなる– Web 制作する上では十分
• さくら VPS(Ubuntu LTS) の標準カーネルで動く– OpenVZ みたいに独自のカーネルを入れなくて良い
Docker の問題点• コマンド実行が終わったらコンテナが終了する• Apacheずーっと起動とかやりづらい• Dockerfile の CMD にコマンドを書いて実行できるが、 CMD で
実行できるコマンドは一つだけ– Apache と SSHD両方起動したいとか、どうしたら?
• → CMD で superviord を起動– 各種デーモンは superviord から起動
• sshd, apache, 等
ベース image
Apache image
案件別 image
Ubuntu image docker.io 公式の Ubuntu image
自社特有の環境構築をする・ SSH の公開鍵を入れる、 timezone設定など
Apache + PHP5 の環境構築をする
案件別の構成をする
image の作り
ベース image
Apache image
案件別 image
Ubuntu image
手で設定して、一段落したらdocker commit する
Dockerfile で定義して作る
コンテンツのデプロイ
① 開発者が git リポジトリにコンテンツを push
② git push を Backlog がJenkins に通知
③ Jenkins が git リポジトリをpull して、コンテナに rsync
アクセス振り分け
Apache httpd+ mod_proxy
Wildcard DNS で*.stg.ryden.co.jp を受ける
mod_proxy で各コンテナに振り分け
アクセス振り分け• mod_proxy のルールは、手で書いています– docker run した後、 docker inspect でコンテナの IP ア
ドレスを拾って、 httpd.conf に記載
– OS再起動すると、非常にだるいことになります
– 面倒なので、どっかにいいツールがないかしら、とは思っております…
ムリをしない• 環境設定でがんばり過ぎると後が続かない• 環境毎の細かいことは Dockerfile 化せず、
手で設定したあと commit• Chef 化しない & デプロイは rsync でユルく–広告案件なんて長くても6ヶ月– いみゅーたぼーじゃない!でも気にしない!
Docker を使って数ヶ月経過• Vhost で十分すぎる案件は Vhost に戻しま
した– Docker起動するのすら、面倒– Docker だと、外部から直接 SFTP できない
• テスト環境以上のものを置くのは怖い– Jenkins等、永続データが必要なものはホスト
OS 側で動かしています
ハマり事例• 今日、何気なく apt-get upgrade したら全コンテナ死亡。二度と返らぬ人に– 動いていたコンテナを docker commit して再起動してもう動かず…
• ホスト Ubuntu のバージョンが古かった? (12.04 LTS)– Ubuntu を upgrade したら動き出しました
• まだ production で使うのは怖い…かな?