始まりました。Docker Advent Calendar 2016 1 日目です。
メトリクス収集まとめを書くつもりでしたが、re:Invent 参加中ということもありやっぱり AWS ネタで。新サービス・機能について書きたいですが、今のところ発表がないので既存サービス内で。
(以下すべて、いちユーザとしての感想です)
デプロイ
パターン
AWS のマネージドを中心に CI / CD パイプラインを組むなら
- ECS
- ElasticBeanstalk
- CodeDeploy
- Docker for AWS
を用途に応じて使い分けられます。
ECS
用途
自分でクラスタを管理したい / しなければならないといった特別な理由がなければ、ECS がオススメです。最近 Datadog も ECS の本番利用が増加していることを記事1にしています。
メリット
- コンピュートリソースを最大限有効に利用できる
- ALB との併用で動的ポートマッピングが有効に
- Service Auto Scaling でスケールも AWS に任せられる
- タスク単位で IAM ロールを使った適切な権限管理ができる
- Spot fleet 上での運用でコスト最適化も
- CloudWatch でクラスタとしてのメトリクスも扱える
構成例
継続的デプロイ例
ElasticBeanstalk(EB)
用途
もともと EB を使っていて慣れている、または EB のデプロイ戦略を利用したいとき。
コンテナだけでなく RDS / ELB / AutoScaling などのプロビジョニング(初期設定など)も AWS に任せてしまいたいとき。
メリット
- EB の豊富なデプロイ戦略や環境クローンを利用できる
- ELB や AutoScaling に不慣れでもコンテナだけに集中できる
- .ebextensions で環境を柔軟にカスタマイズできる
- Kubernetes の Daemon Set 的に動くので 1 コンテナ 1 ホストなどには有用
継続的デプロイ例
CodeDeploy
用途
Docker Compose を使いたい、Swarm モードで動かしたい、nvidia-docker を挟みたいなど、AWS 外のフレームワークでコンテナを起動したいとき。
コンテナの起動前後で特定のスクリプトを流したり、特定の挙動をもってデプロイの成否を判定したいとき。
メリット
- docker-compose や Swarm モードなアプリがデプロイできる
- Swarm モードなら 1 台でも無停止アップデートが簡単
- Docker レジストリが必須ではない
- DockerHub や ECR が使えなくても大丈夫
- S3 を経由した docker save / load
(暗号化やライフサイクルポリシーなど各種メリットを享受できる) - Dockerfile でその場でビルドでももちろん OK
- デプロイ前後にフックスクリプトが使える
継続的デプロイ例
(上のスクリプトと違って、S3 を経由する絵ですが)
Docker for AWS
パブリックベータになりましたね!
ちょっと古いバージョンですが中身はこんな感じ。
用途
Swarm モードを、Docker 社の管理するフレームワークで稼働させたいとき。IAM や ELB など AWS の便利なマネージドサービスは使いつつも、クラスタ管理は自前で行いたいとき。
メリット
- Docker の新しい機能群が使える可能性が常に最も高い
- 例えば v1.13 リリース予定の prune 機能がすでに有効化済み
- インターナルサービスディスカバリに Docker の Ingress Load Balancing が使える
- AutoScaling や ELB、DynamoDB、SQS による運用負荷の軽減
- IAM やネットワークがセキュア側にプリセットされた安心感
Docker イメージの共有
ECR
用途
IAM やポリシーにより適切に権限管理することのできる Docker レジストリの管理を AWS を任せたいとき。
メリット
- コマンド 1 行で簡単にリポジトリを作れる / 削除できる
- AWS に管理を任せることで、可用性が高くスケーラブルなインフラに
- IAM や独自のポリシー機能でアクセスを厳密に制御できる
- オンプレミスなど AWS の外からも使うことができる
- 同リージョン内の ECR と EC2 間データ転送量は無料
Tips
- [公式] Automating ECR Authentication on Marathon with the Amazon ECR Credential Helper
- Amazon ECR にログインなしで接続する
- 特定 IAM ユーザからのみのアクセスを許可
自前管理 Docker レジストリ
用途
公式に公開されているレジストリを自らの手で運用したいとき。アクセス管理を IAM 以外で行ったり、データの冗長化などを独自の方法で行いたいとき。
メリット
- S3 や CloudFront を使うことで各サービスのメリットが得られる
- 独自のホスト名を割り当てることができる
- Docker のより新しい機能を早めに使うことができる(かもしれない)
以上です。
明日は @netmarkjp さんの「Dockerドキュメント日本語化に参加しよう!」です :)