22
Web 制制制制 meets 制制制制制制制制制制制 2014 制 5 制制 (β) 2014 制 5 制 19 制 制制制制 @pekeq / RYDEN Inc.

Web制作会社 meets Docker

Embed Size (px)

Citation preview

Page 1: Web制作会社 meets Docker

Web 制作会社 meets

月刊ライトニングトーク 2014 年 5 月号 (β)2014 年 5 月 19 日

松本英夫 @pekeq / RYDEN Inc.

Page 2: Web制作会社 meets Docker

自己紹介• 松本英夫 (@pekeq)

• 株式会社ライデン

• アラフォープログラマー– インターネット技術で 20 年

経歴だけ長くて実力が伴わない残念なタイプです– PHP, Python, (Coffee|Type|Java)Script

Page 3: Web制作会社 meets Docker

ざっくり docker とは?• 「軽い」仮想化環境– 立ち上がりが早い– メモリやディスクを(そんなに)食わない

• 最近流行してる– github 風に「ぼくのさいきょうの VM 」を公

開できる• いみゅーたぼー

Page 4: Web制作会社 meets Docker

他の仮想化環境との違い• 「コンテナ」を作ることに特化

– アプリケーションに必要な依存をひとまとめにして、「コンテナ」として配布できる

– Dev はコンテナ内部の品質を作り込めば良く、 Ops はコンテナの外側から操作すればよい

• 厳密な仮想化ではない– 「アプリケーション環境を分離させること」が目的

• 「筋肉増強剤を用いた chroot みたいなもの」– その分、軽い

Page 5: Web制作会社 meets Docker

Why Container?

Page 6: Web制作会社 meets Docker

( 閑話休題 ) 「コンテナ」小話• 「沖仲仕」という仕事があります 。 ( 略 )• 港で、輸送船の荷物の積み替えをする、「荷揚げ労働者」の

人達のことです。

• コンテナによる輸送という新しいシステムを思いついてから数年で、 ( 略 )  積み込みから輸送先までコンテナを下ろすこと無く届けるサービスに変わりました。

• コンテナへの積み込みも陸で行いトラックに載せ、港でコンテナごと積み替えるので、積み替えの仕事が無い。

「孫の代までの仕事」が 10 年で消えたケースhttp://d.hatena.ne.jp/repon/20121030/p1

Page 7: Web制作会社 meets Docker

Web 制作会社の納品• 制作して、ファイルで納品

– コンテンツはクライアント側でサーバーに配置

• クライアント先サーバーに入り口は置くが、一部 API 処理 (eg. Facebook API) だけ自社運用

• 環境構築・コンテンツ制作・運用まで自社で実施

Page 8: Web制作会社 meets Docker

クライアントのサーバー• 各社異なる環境 / ミドルウェア

– 去年まで PHP4(!) の環境が生き残っていたり– ファイル保存先のディレクトリ構成が違っていたり

• 各社異なるルール– 共通ヘッダ・フッタとか– 共通のおまじないとか

• これらを上手く分離して開発したい

Page 9: Web制作会社 meets Docker

これまで• VirtualHost を一杯作る

• 案件ごとにさくら VPS を買う

• 社内に置いたサーバーでVMware vSpshere Hypervisor (旧 ESXi )を使う

Page 10: Web制作会社 meets Docker

VirtualHost を一杯作る• 安い(さくら VPS 934 円 / 月・税別)• 放っておくぶんにはラク

• httpd.conf が地獄のようになる• 古い案件がいつまでも残る• httpd.conf だけでは分けきれないものがある

Page 11: Web制作会社 meets Docker

案件ごとにさくら VPS を買う• 案件がはじまったら契約、終わったら解約

• 専用で環境を立てるので、開発の支障は少ない

• ムダが多い– VPS1台の能力を使い切ることは、ほぼない– 解約処理してから実際に解約できるまで2ヶ月

Page 12: Web制作会社 meets Docker

VMware で仮想化• 社内に置いたサーバー (HDD 2TB, MEM 8GB) で運用• 安定性はピカイチ

• 毎回OS インストールからやるので結構手間– 案件を開始するたびに Ubuntu の新しいのが出てる

• 社外に公開できない– がんばって設定すればできるけど、面倒

• OS まるごと起動なのでメモリ / ディスクを結構食う

Page 13: Web制作会社 meets Docker

そこで Docker ですよ• さくら VPS HDD プラン 2G

– コンテナを複数立てても大丈夫

• 環境ごとの独立性は良い– 今 PHP4 が必要です!と言われても何とかなる– Web 制作する上では十分

• さくら VPS(Ubuntu LTS) の標準カーネルで動く– OpenVZ みたいに独自のカーネルを入れなくて良い

Page 14: Web制作会社 meets Docker

Docker の問題点• コマンド実行が終わったらコンテナが終了する• Apacheずーっと起動とかやりづらい• Dockerfile の CMD にコマンドを書いて実行できるが、 CMD で

実行できるコマンドは一つだけ– Apache と SSHD両方起動したいとか、どうしたら?

• → CMD で superviord を起動– 各種デーモンは superviord から起動

• sshd, apache, 等

Page 15: Web制作会社 meets Docker

ベース image

Apache image

案件別 image

Ubuntu image docker.io 公式の Ubuntu image

自社特有の環境構築をする・ SSH の公開鍵を入れる、 timezone設定など

Apache + PHP5 の環境構築をする

案件別の構成をする

image の作り

Page 16: Web制作会社 meets Docker

ベース image

Apache image

案件別 image

Ubuntu image

手で設定して、一段落したらdocker commit する

Dockerfile で定義して作る

Page 17: Web制作会社 meets Docker

コンテンツのデプロイ

① 開発者が git リポジトリにコンテンツを push

② git push を Backlog がJenkins に通知

③ Jenkins が git リポジトリをpull して、コンテナに rsync

Page 18: Web制作会社 meets Docker

アクセス振り分け

Apache httpd+ mod_proxy

Wildcard DNS で*.stg.ryden.co.jp を受ける

mod_proxy で各コンテナに振り分け

Page 19: Web制作会社 meets Docker

アクセス振り分け• mod_proxy のルールは、手で書いています– docker run した後、 docker inspect でコンテナの IP ア

ドレスを拾って、 httpd.conf に記載

– OS再起動すると、非常にだるいことになります

– 面倒なので、どっかにいいツールがないかしら、とは思っております…

Page 20: Web制作会社 meets Docker

ムリをしない• 環境設定でがんばり過ぎると後が続かない• 環境毎の細かいことは Dockerfile 化せず、

手で設定したあと commit• Chef 化しない & デプロイは rsync でユルく–広告案件なんて長くても6ヶ月– いみゅーたぼーじゃない!でも気にしない!

Page 21: Web制作会社 meets Docker

Docker を使って数ヶ月経過• Vhost で十分すぎる案件は Vhost に戻しま

した– Docker起動するのすら、面倒– Docker だと、外部から直接 SFTP できない

• テスト環境以上のものを置くのは怖い– Jenkins等、永続データが必要なものはホスト

OS 側で動かしています

Page 22: Web制作会社 meets Docker

ハマり事例• 今日、何気なく apt-get upgrade したら全コンテナ死亡。二度と返らぬ人に– 動いていたコンテナを docker commit して再起動してもう動かず…

• ホスト Ubuntu のバージョンが古かった? (12.04 LTS)– Ubuntu を upgrade したら動き出しました

• まだ production で使うのは怖い…かな?