読者です 読者をやめる 読者になる 読者になる

FUJILOG

見た、聴いた、触れたこと。 動かしたもの、書いたもの。 ウェブとリアルの備忘録です。

参加録 Dockerを利用した開発事例~Docker導入から運用まで~

ただいま絶賛有給取得期間中、ヒカラボ@渋谷でした。

イベントURL:

日時:

2017/04/13 (木) 19:30 ~ 22:00

アジェンダ

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
         Rails(API)
 ダッシュボード
  EBS
      docker
           Angular
      docker
           Rails(API)
 ワーカー
  SQS
      docker
          Rails(API)
 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」への取り組み
 AWS
 マイクロサービス(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周辺ツール、特にクラスタ管理まわりの情報をキャッチアップできていなかったので、
貴重な知見を頂きました。