参加録 Dockerを利用した開発事例~Docker導入から運用まで~
19:35 ~ 19:40 EmotionTech 田邊氏:イベント説明
19:40 ~ 20:00 Amazon Web Services Japan K.K. 岩永氏:AWSでDockerを扱うためのベストプラクティス
20:00 ~ 20:20 EmotionTech 子安氏:Dockerで構成するWebサービス~EmotionTechの場合~
20:20 ~ 20:40 VASILY 光野氏:(仮)Docker/Apache Mesos/Marathonで構築した新インフラについて
20:40 ~ 21:00 UZABASE 羽山氏:新規プロダクトでDockerを導入した話(→テーマ更新)
Amazon Web Services Japan K.K. 岩永氏:AWSでDockerを扱うためのベストプラクティス
ID: @riywo
AWS技術支援
Web、ゲーム企業へ
開発
運用
ECSの事例
コンテナ
リソースの隔離が目的(CPU,Disk,Filesystem
DevOpsの文脈で再発見(デリバリー速度向上
便利
本番で使うとハマリポイントがある
VMとサーバと違う勘所
インフラよりアプリの作りが異なる
Transformationが必要
どこに向かうべきか
12 factor apps
12 factor apps
Herokuが提唱した原則
開発者、運用者が対象
■開発
Docker使いやすさ
・設定とビルドは分離
イメージには設定は入れない
環境変数として用意すること
・ステートレスなものはDBはコンテナを使わない
・ログはファイルでなくストリームとして外部に置くようにする
■運用
DevOps
Source
Build
Test
Production
デリバリー速度向上
Docker以前の課題
開発環境の構成のメンテナンスが大変
開発、テスト、本番に差異がある
オートスケール、障害対応が大変
Docker以後
Source
Provision
Config
Application
そのまま本番まで一気通貫。
Docker単体の課題
どこで、どうやってDocker動かす?
フロントからのルーティングは?
コンテナのフェイルオーバーは?
クラスタ管理が必要になる。
クラスタのMaster群
状態をDBのに置く
静的情報
LBのWorkerの付け外し
→これらはAWS ECSが面倒見てくれる
ECS
Scheduler
Manager
Task Definition
Agent(Cluster)
サービス
動的ポートマッピング
アプリのバージョン1を4個下さいでOK
BlueGreenデプロイメントが容易
AWS Batchでもジョブスケジューリング
ECSがジョブを持ってくれる
3 clear trends ECS adoption by Datadog
1年で3%→15%へユーザー数向上
コンテナ数増えると問題増える(25台超えるとECS40%利用)
ECS利用企業例
Slack
Expedia
Mapbox
マイクロサービス
EC2タイプ別で稼働可能
Spot fleetを利用
結果
21サービス
2000コンテナ
25%台数減った
コスト80%ほどのコストで運用可能
EmotionTech 子安氏:Dockerで構成するWebサービス~EmotionTechの場合~
ID: @akirakoyasu
旧社名 wizpla
Elastic BeansStore
Base Image Docker
EmotionTechでのDocker
アンケート回答してもらう、回答分析する
URLによりスパイクがある
Docker
Elastic Beanstalk
Phusion/base image docker
仕組み
clone
syslog
構成
S3
Internet
EBS
docker
Angular
docker
ダッシュボード
EBS
ワーカー
SQS
DB
RDS(※本番)
Elastic Cache
docker mysql(※ローカル)
docker redis(※ローカル)
開発フロー
ステージングのTravisが通ればJenkinsで本番デプロイ
■ 導入から運用まで
最初の状況
秘伝のタレ事件(V1の時代)
環境差異との戦い
Jenkinsががんばる
人少ない(インフラ専任は1名)
既存サービスをフルリプレース
導入前に考えたこと
ステートレスなコンテナができるか?(イメージにタグをつける)
開発ワークフローが組めるか
手がかからないインフラがいい(BeansTalk)
Dockerの先人に学ぶ(RubyでFusionを使う)
構築するときに気をつけたこと
ポリシーをもって構築する
各環境で使えるDockerバージョン
Docker fileの手本に倣う(github/docker-library)https://github.com/docker-library
ローカル環境を本番に近づける
使ってみたら起きたこと
rails c で30秒無反応
CIで使いたいコマンドが使えない(CirlcieCI→TravisCIへ変更)
db:migrateする仕組みがない(deploy前処理、後処理。独自YAMLファイル。)
環境変数をコンテナ挙動を変えたい(初期化に応じて)
本稼働
ビルド(15分くらいかかる)
監視はふつう
インスタンスを敢えて変える(ステートレスとの接続徹底)
Tips
ローカルはDocker-Composeで
環境初期化はラッパースクリプトを使う
ローカルはDocker for XXXが主流
デプロイはGithub tagとDocker imageのtagを揃える
ステージングイメージを本番にデプロイする
VASILY 光野氏:(仮)Docker/Apache Mesos/Marathonで構築した新インフラについて
ID: @kotatsu
Docker化した
デプロイについて
詳しくは技術ブログにて。
UZABASE 羽山氏:新規プロダクトでDockerを導入した話
テーマ変更:Dockerへの取り組み
※公開資料見当たらず。
インフラ担当
前職はゲーム会社
Docker運用
FORCASのDockerへの取り組み
2008年設立
2016年上場
社員200名ほど
サービス
SPEEDA
NEWSPICKS
entrepedia
FORCAS(アカウントベースドマーケティング)
新サービス、30人の開発体制
Dockerホストが複数台立ち上がり
実現したかったこと
簡単スケール
一括管理
スケール環境下でもデータ永続化
スケール環境下でも自動リソース管理
プロジェクトごとのコンテナ管理
Rancher
Dockerクラスタ管理ツール
RancherOS
充実したWebインターフェース(KubernetesでもMesosでも管理可能)
ホストを足すだけでスケール自動
コンテナ分散も可能
Docker Link機能でホスト間の通信も簡単
DockerレジストリにイメージPushしたら使用可能
PJTごとのコンテナ管理(Stackを利用)
PJT作成(Stack作成)、docker-composeをアップロード、Stackが追加されDockerコンテナ起動
データ永続化
Catalog(docker-composeのテンプレ集)
Rancher-NFSで永続化
コンテナ自動監視
Prometheusで自動監視
Catalogから起動すると簡単に監視可能
新サービス「FORCAS」への取り組み
マイクロサービス(APIはDocker)
バッチ(Docker)
CI環境(CirlceCI)
目標
マイクロサービス担当者がそれぞれCIを作れる状態
メンテナンスフリーな環境
4つのサービスがある
バッチ処理の取り組み
DockerレジストリにイメージPushするだけでリリースされる仕組み
SPEEDAからアクションをトリガーにバッチ稼働
データ配信→S3→Lambda→バッチサーバ→Dockerイメージ起動→自身をシャットダウン
CI取り組み
CircleCIでイメージ作成自動化
ChatOps
仕組みはバッチ同様
DockerイメージPush→サーバ再起動→Dockerイメージ取得、起動
Slackから処理をキックさせる
ELBからサーバプールの切り替え
複数開発PJTを管理するPlatformではRancherが便利
StackのPJT管理
Catalogからの環境構築ができるの便利
EC2インスタンス起動するとデプロイ済のイメージが起動するようにしている。
講演内容は以上。
各社とも敏腕インフラエンジニアがOSSを使うかマネジメントツールにするかを試行錯誤して、
サービスに向き合っていました。
Docker周辺ツール、特にクラスタ管理まわりの情報をキャッチアップできていなかったので、
貴重な知見を頂きました。