SlideShare a Scribd company logo
1 of 28
Download to read offline
Docker in Production
PIZZA_JP #3
@rs_wisteria
Agenda
● Docker in Production
● Challenging Amazon ECS (2 years ago)
● Docker base blue-green deployment
Docker in Production
夢の環境
物理構成に
依存しない
とか
環境構築が
楽そうだとか
サーバー資源
節約できそう
とか
デプロイが
簡単そうとか
冗長化とか
強そうとか
そんな
イメージ
でした
考え方の誤りに気づく
docker container = program + environment
なんだけど、なんとなく
lightweightなVMくらいの感じでいた
Docker化による影響
プログラムの副作用が見えなくなる
● ログとか
● 中間生成物のファイルとか
● その他環境に及ぼす影響など
明確に出力として定義する必要がある
定義すること
● プログラムに渡す引数
● 公開するport番号
● 共有するファイル・ディレクトリ
● etc...
本番環境で困ること
● 管理系のプログラムとの連携
○ 性能監視とか
○ ログローテートとか
○ etc.
Challenging Amazon
ECS
(2 years ago)
Amazon ECS
AWSのdockerコンテナサービス
● クラスターによるEC2インスタンスの管理
○ docker-machine, docker-swarmのお仕事
● タスク定義によるアプリケーションのdocker設定まとめ
○ docker-composeのお仕事
● AWS他サービスのインテグレーション
○ コンテナのLB対応等
Blue-Green Deployments
● 無停止デプロイ方法の一つ
○ Blue: 現在稼働しているインフラ系統
○ Green: デプロイ対象のインフラ系統
○ デプロイ完了後、LB等で稼働しているインフラをBlueから
Greenに切り替える
○ Blueはそのうち捨てる
DockerでのBlue-Green Deployment
コンテナレベルでBlue-Green Deploymentを実行
● デプロイ時に新しいコンテナを作成・起動
● 起動後にLBでアクセスを新しいコンテナへ向ける
● 古いコンテナを削除
Amazon ECSでの問題点
● コンテナ外での操作が多い
○ ECS上で制御する方法が無い
● デプロイ時にリソースを2倍必要とする
○ インスタンス上にデプロイ時のためだけに、常にリソースを
半分空けておく必要がある
結局
ECSの利用を諦めた
● 全部シェルスクリプトで書いた
● そのうちリベンジしたい
Docker base
blue-green
deployments
方針
● docker-composeでblue/greenを定義
○ デプロイ時にシェルスクリプトで頑張る
■ 現在起動している系統を調べる (blue or green)
■ 現在起動していない系統を立ち上げる
■ 立ち上げたコンテナのポート番号調べる
■ nginxの設定書き換えて再起動する
■ 古い系統を消す
ログローテート
ローテート前にプロセスにシグナル送ることが多い
→ pidが分からない問題
→ pidがコンテナ毎に独立しているため、pidファイル見ても意味が
無い
→ さらにローテートにプロセス再起動が必要な場合、コンテナが
終了する
ログローテート
● 諦めてcopytruncateで動かす
○ そもそもrailsのpuma使うと、シグナル渡しても駄目だし…
● 厳密さが必要ならばcloudwatch logsの採用を検
討しましょう
冗長化
サーバー毎にblue-green deploymentする必要
● とても面倒
● リソース (EC2 instance)とコンテナを独立して管理するのが大
変
○ docker-swarmを使わざるを得ない
○ LB対応も自力で行う必要があり
Contribution
Docker in Production?
● 茨の道ではあるが出来る
○ 発想とシェルスクリプトの勝利
■ プロダクト毎に考えるのはさすがに面倒
○ 今ならECSでがっつり頑張る
■ ECRもサービスインしたことだし、privateなdocker registryからpullする仕
組みを作るのは格段に楽になった
■ 監視とかログとか全部AWSのサービスに投げよう
○ どちらにせよ、docker周辺の知識は結構いる
■ 無いなら無理にやらなくてもいいと思う

More Related Content

Similar to Docker in production

いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達softlayerjp
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
Dockerで作るd3.jsインタラクション共有&DL環境
Dockerで作るd3.jsインタラクション共有&DL環境Dockerで作るd3.jsインタラクション共有&DL環境
Dockerで作るd3.jsインタラクション共有&DL環境Nao Oec
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめxyzplus_net
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Web系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ー
Web系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ーWeb系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ー
Web系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ーYosuke INOUE
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンドTakehara Ryo
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Etsuji Nakai
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~decode2016
 
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Masahito Zembutsu
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門KokiMakita1
 
オープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューション
オープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューションオープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューション
オープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューションTetsurou Yano
 

Similar to Docker in production (20)

いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Dockerで作るd3.jsインタラクション共有&DL環境
Dockerで作るd3.jsインタラクション共有&DL環境Dockerで作るd3.jsインタラクション共有&DL環境
Dockerで作るd3.jsインタラクション共有&DL環境
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Web系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ー
Web系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ーWeb系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ー
Web系エンジニアのためのスキルアップ講座 ーDockerで開発環境を作ろう ー
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
INF-015_そこのコンテナ、うまく積めてるね! ~Windows アプリケーション コンテナの展開と運用~
 
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
 
オープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューション
オープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューションオープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューション
オープンソースカンファレンス OSC 2014 エンタープライズ 東京 ownCloud 法人向けオンラインストレージ マルチデバイスファイル共有ソリューション
 

More from Yoichi Toyota

超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をするYoichi Toyota
 
ジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押しジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押しYoichi Toyota
 
ライブラリを作る思考回路
ライブラリを作る思考回路ライブラリを作る思考回路
ライブラリを作る思考回路Yoichi Toyota
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技Yoichi Toyota
 
はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計Yoichi Toyota
 
オブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないことオブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないことYoichi Toyota
 
Ruby is comming ractor編
Ruby is comming ractor編Ruby is comming ractor編
Ruby is comming ractor編Yoichi Toyota
 
array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねんarray.map(&:key)ってなんやねん
array.map(&:key)ってなんやねんYoichi Toyota
 
はじめてのPull Request
はじめてのPull RequestはじめてのPull Request
はじめてのPull RequestYoichi Toyota
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞYoichi Toyota
 
jqで極めるシェル芸の話
jqで極めるシェル芸の話jqで極めるシェル芸の話
jqで極めるシェル芸の話Yoichi Toyota
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろうYoichi Toyota
 
React Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうReact Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうYoichi Toyota
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかYoichi Toyota
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方Yoichi Toyota
 
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方Yoichi Toyota
 
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活Yoichi Toyota
 
How to fight against “full scratch disease”
How to fight against  “full scratch disease”How to fight against  “full scratch disease”
How to fight against “full scratch disease”Yoichi Toyota
 
Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみたYoichi Toyota
 
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンForkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンYoichi Toyota
 

More from Yoichi Toyota (20)

超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする
 
ジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押しジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押し
 
ライブラリを作る思考回路
ライブラリを作る思考回路ライブラリを作る思考回路
ライブラリを作る思考回路
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
 
はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計
 
オブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないことオブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないこと
 
Ruby is comming ractor編
Ruby is comming ractor編Ruby is comming ractor編
Ruby is comming ractor編
 
array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねんarray.map(&:key)ってなんやねん
array.map(&:key)ってなんやねん
 
はじめてのPull Request
はじめてのPull RequestはじめてのPull Request
はじめてのPull Request
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
 
jqで極めるシェル芸の話
jqで極めるシェル芸の話jqで極めるシェル芸の話
jqで極めるシェル芸の話
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろう
 
React Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうReact Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
 
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
 
How to fight against “full scratch disease”
How to fight against  “full scratch disease”How to fight against  “full scratch disease”
How to fight against “full scratch disease”
 
Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみた
 
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンForkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
 

Docker in production