ドカドカdocker on aws
TRANSCRIPT
ドカドカDocker on AWS
黒田 裕己Remixing with All About, Inc.
黒田 裕己
Server-side Engineer @ Richmedia
Outline
• Dockerとは?
• AWS EC2 Container Serviceについて
手作業で環境構築なにを入れてどんな設定をしたか分からない!
Nginx VarnishApache
MySQL
Elasticsearch
Rails
PHP Node.js
インフラは状態管理がしづらい
開発環境と本番環境が異なるものになりがち環境の配布はどうするか…
Production
Staging
Local A
Local B Local C
インフラは状態管理がしづらい
インフラは状態管理がしづらいChef・Ansibleで環境構築
99%同じだが、レポジトリが更新されたら…
yum install varnish
yum install varnish
Staging Production
Provisioning
_人人人人人人人人_ > ボクの出番? < ‾Y^Y^Y^Y^Y^Y^Y‾
Dockerとは?
• Docker社のオープンソースプロダクト
• コンテナ技術により軽量で高速な仮想環境を作れる
InfrastructureInfrastructure
Host OSHost OS
Docker EngineHypervisor
Guest OS Guest OS
Bins / Libs Bins / Libs
App1 App2
Bins / Libs Bins / Libs
App1 App2
コンテナとは?
Docker ContainerVirtual MachineゲストOS内で稼働 プロセスとして稼働
どれくらい軽量で高速か?
Dockerのメリット
手作業で環境構築なにを入れたか分からない
Nginx Varnish
Apache
MySQL
Elasticsearch
Rails
PHPNode.js
Varnish
Apache
MySQL
Dockerfileソースコードで管理する
Dockerfile
FROM centos:centos6RUN yum install httpd -yRUN echo “Hello Docker” > /var/www/index.htmlEXPOSE 80 CMD ["httpd", "-D", "FOREGROUND"]
docker build -t apache .
docker run -p 8080:80 apache
コンテナImage作成
コンテナ起動
問題:開発環境と本番環境が異なるものになりがちコンテナのImageを配布することで完全に同一
Production
Staging
Local A
Local B Local C
Dockerのメリット
Container Image
インフラが特定のベンダーにとらわれない:可搬性
Dockerのメリット
etc…
アプリケーションを 小さなコンポーネントの集合にする
Web Mail Batch
Microservices
API v1 API v2 Push通知
HTTP API Message cue
Web Mail
Batch
Immutable Infrastructure
API旧 PHP
Push通知
不変のインフラインフラを破棄・置き換えできるものと捉える
新 Golang
Push通知
_人人人人人人人人 > 100万Userに < > Push通知辛い < ‾Y^Y^Y^Y^Y^Y
Web Mail
Batch
Immutable Infrastructure
API旧 PHP
Push通知
不変のインフラインフラを破棄・置き換えできるものと捉える
新 Golang
Push通知
_人人人人人人_ > イケる! <
‾Y^Y^Y^Y^Y‾
Docker Ecosystem
Docker Hub Registry - https://registry.hub.docker.com/
centos (Base Image)
Apache (name: httpd)
PHP (name: httpd-php)
FROM httpd-phpADD your-applicationYour Application
Dockerfile
FROM httpdRUN yum install php
FROM centosRUN yum install httpd
Docker Ecosystem
centos (Base Image)
Apache (name: httpd)
PHP (name: httpd-php)
FROM httpd-phpADD your-applicationYour Application
Dockerfile
FROM httpd-phpRUN yum install php
FROM httpd-phpRUN yum install httpd
GitHubで世界中のDeveloperが
OSSを開発したように
Docker Hub Registryで世界中のDeveloperが インフラを開発して共有している
Docker Ecosystem
Docker で遊ぶJenkins Repository : https://registry.hub.docker.com/_/jenkins/
Jenkins Repository : https://registry.hub.docker.com/_/jenkins/
docker run -p 8080:8080 -v /your/home:/var/jenkins_home jenkins
Docker で遊ぶ
AWS EC2 Container Service
• 4月にリリースとなったAWSの新しいサービス
• あらゆる規模においても、EC2クラスタ上でDockerを動作させることができる
AWS EC2 Container Service
• EC2がベースであるためElastic Load Balancing、Virtual Private
Cloud、IAM、および CloudTrail などと簡単に連携ができる
• Amazonで培った技術によりコンテナ数が数十だろうと数万であっても簡単に起動できる
Run Container on Cluster
Cluster : WebWeb1 Web2 Web3
_人人人人人人_ > 発見! < ‾Y^Y^Y^Y^Y‾
_人人人人人人_ > 発見! < ‾Y^Y^Y^Y^Y‾
_人人人人人人_ > 発見! < ‾Y^Y^Y^Y^Y‾
Blue Green Deployment
新機能 新機能
新機能 新機能ELB
Blue Green Deployment
ELB
新機能 新機能
新機能 新機能
AWS EC2 と ECS の違い
• ECS Container AgentというEC2インスタンスの中で動くエージェントが動作している
• このエージェントを通してContainerインスタンス内で稼働するコンテナの開始や停止などの管理を行う
ECS のデメリット• まだまだ発展途上のサービス
• マルチホスト時のログはどうするの?
- Fluentdコンテナでログ送信
• マルチホスト時の Dynamic port mapping はどうするの? - 1 Server 1 Port 制約 → Consul + Registrator で管理
• コンテナの監視・死活管理はどうするの?
• Docker Registryは自前で立てるか、Quai.ioなど有料サービスか
HAIR Deployment
WebhookContainer Image
Container Deploy
Docker Registry
Build Dockerfile
Docker Registryhttps://docs.docker.com/registry
まとめ
• Dockerとは - インフラをソースコードで管理でき、 - 同一性、可搬性があり、軽量で高速。
• AWS EC2 Container Serviceについて - AWSサービスと連携して簡単にDockerを 実行できる
Let’s ドカドカ Docker !