ドカドカDocker on aws

Preview:

Citation preview

ドカドカ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

Open Container Project

https://www.opencontainers.org/

opencontainers / runc

https://github.com/opencontainers/runc

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 !