ドカドカdocker on aws

37
ドカドカDocker on AWS 黒田 裕己 Remixing with All About, Inc.

Upload: yuuki-kuroda

Post on 15-Aug-2015

58 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: ドカドカDocker on aws

ドカドカDocker on AWS

黒田 裕己Remixing with All About, Inc.

Page 2: ドカドカDocker on aws

黒田 裕己

Server-side Engineer @ Richmedia

Page 3: ドカドカDocker on aws

Outline

• Dockerとは?

• AWS EC2 Container Serviceについて

Page 4: ドカドカDocker on aws

手作業で環境構築なにを入れてどんな設定をしたか分からない!

Nginx VarnishApache

MySQL

Elasticsearch

Rails

PHP Node.js

インフラは状態管理がしづらい

Page 5: ドカドカDocker on aws

開発環境と本番環境が異なるものになりがち環境の配布はどうするか…

Production

Staging

Local A

Local B Local C

インフラは状態管理がしづらい

Page 6: ドカドカDocker on aws

インフラは状態管理がしづらいChef・Ansibleで環境構築

99%同じだが、レポジトリが更新されたら…

yum install varnish

yum install varnish

Staging Production

Provisioning

Page 7: ドカドカDocker on aws

_人人人人人人人人_ > ボクの出番? < ‾Y^Y^Y^Y^Y^Y^Y‾

Page 8: ドカドカDocker on aws
Page 9: ドカドカDocker on aws

Dockerとは?

• Docker社のオープンソースプロダクト

• コンテナ技術により軽量で高速な仮想環境を作れる

Page 10: ドカドカDocker on aws

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内で稼働 プロセスとして稼働

Page 11: ドカドカDocker on aws

どれくらい軽量で高速か?

Page 12: ドカドカDocker on aws

Dockerのメリット

手作業で環境構築なにを入れたか分からない

Nginx Varnish

Apache

MySQL

Elasticsearch

Rails

PHPNode.js

Varnish

Apache

MySQL

Dockerfileソースコードで管理する

Page 13: ドカドカDocker on aws

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作成

コンテナ起動

Page 14: ドカドカDocker on aws

問題:開発環境と本番環境が異なるものになりがちコンテナのImageを配布することで完全に同一

Production

Staging

Local A

Local B Local C

Dockerのメリット

Container Image

Page 15: ドカドカDocker on aws

インフラが特定のベンダーにとらわれない:可搬性

Dockerのメリット

etc…

Page 16: ドカドカDocker on aws

アプリケーションを 小さなコンポーネントの集合にする

Web Mail Batch

Microservices

API v1 API v2 Push通知

HTTP API Message cue

Page 17: ドカドカDocker on aws

Web Mail

Batch

Immutable Infrastructure

API旧 PHP

Push通知

不変のインフラインフラを破棄・置き換えできるものと捉える

新 Golang

Push通知

_人人人人人人人人 > 100万Userに < > Push通知辛い < ‾Y^Y^Y^Y^Y^Y

Page 18: ドカドカDocker on aws

Web Mail

Batch

Immutable Infrastructure

API旧 PHP

Push通知

不変のインフラインフラを破棄・置き換えできるものと捉える

新 Golang

Push通知

_人人人人人人_ > イケる! <

‾Y^Y^Y^Y^Y‾

Page 19: ドカドカDocker on aws

Docker Ecosystem

Docker Hub Registry - https://registry.hub.docker.com/

Page 20: ドカドカDocker on aws

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

Page 21: ドカドカDocker on aws

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

Page 22: ドカドカDocker on aws
Page 23: ドカドカDocker on aws

Open Container Project

https://www.opencontainers.org/

Page 24: ドカドカDocker on aws

opencontainers / runc

https://github.com/opencontainers/runc

Page 25: ドカドカDocker on aws

Docker で遊ぶJenkins Repository : https://registry.hub.docker.com/_/jenkins/

Page 26: ドカドカDocker on aws

Jenkins Repository : https://registry.hub.docker.com/_/jenkins/

docker run -p 8080:8080 -v /your/home:/var/jenkins_home jenkins

Docker で遊ぶ

Page 27: ドカドカDocker on aws

AWS EC2 Container Service

• 4月にリリースとなったAWSの新しいサービス

• あらゆる規模においても、EC2クラスタ上でDockerを動作させることができる

Page 28: ドカドカDocker on aws

AWS EC2 Container Service

• EC2がベースであるためElastic Load Balancing、Virtual Private

Cloud、IAM、および CloudTrail などと簡単に連携ができる

• Amazonで培った技術によりコンテナ数が数十だろうと数万であっても簡単に起動できる

Page 29: ドカドカDocker on aws

Run Container on Cluster

Cluster : WebWeb1 Web2 Web3

_人人人人人人_ > 発見! < ‾Y^Y^Y^Y^Y‾

_人人人人人人_ > 発見! < ‾Y^Y^Y^Y^Y‾

_人人人人人人_ > 発見! < ‾Y^Y^Y^Y^Y‾

Page 30: ドカドカDocker on aws

Blue Green Deployment

新機能 新機能

新機能 新機能ELB

Page 31: ドカドカDocker on aws

Blue Green Deployment

ELB

新機能 新機能

新機能 新機能

Page 32: ドカドカDocker on aws

AWS EC2 と ECS の違い

• ECS Container AgentというEC2インスタンスの中で動くエージェントが動作している

• このエージェントを通してContainerインスタンス内で稼働するコンテナの開始や停止などの管理を行う

Page 33: ドカドカDocker on aws

ECS のデメリット• まだまだ発展途上のサービス

• マルチホスト時のログはどうするの?

 - Fluentdコンテナでログ送信

• マルチホスト時の Dynamic port mapping はどうするの? - 1 Server 1 Port 制約 → Consul + Registrator で管理

• コンテナの監視・死活管理はどうするの?

• Docker Registryは自前で立てるか、Quai.ioなど有料サービスか

Page 34: ドカドカDocker on aws

HAIR Deployment

WebhookContainer Image

Container Deploy

Docker Registry

Build Dockerfile

Page 35: ドカドカDocker on aws

Docker Registryhttps://docs.docker.com/registry

Page 36: ドカドカDocker on aws

まとめ

• Dockerとは - インフラをソースコードで管理でき、 - 同一性、可搬性があり、軽量で高速。

• AWS EC2 Container Serviceについて - AWSサービスと連携して簡単にDockerを 実行できる

Page 37: ドカドカDocker on aws

Let’s ドカドカ Docker !