どうもPナッツです!
本日2つ目の記事です。
1つ目の記事も気合を入れて書いたので良ければ見てください。

本記事はコンテナについてまとめた記事です。
悔しいことに公式テキストを読んでも全くイメージが分からなかったので、できるだけ分かりやすく書けるように頑張ります!
コンテナとは
早速コンテナとはどんなものなのでしょうか。公式テキストを見てみます。
アプリケーションの実行に必要なものを1つにまとめたもの
仮想サーバーに比べて軽量で素早く起動でき、効率性も高く環境への移植性も優れている
うん、全く分からん。
かろうじて別環境への移植はしやすいんだなということが分かったくらいです。
どんなものか一言でまとめると、ゲームカセットみたいなものです。

ゲームカセットって本体があればすぐに起動できますよね。あの感じが近いんじゃないかなと思いました。
ただ今回調べてみて分かったのは、コンテナの本当の強みは「軽いこと」よりも「同じ環境を持ち運べること」なのかもしれないということです。
例えば開発者のPCでは問題なく動くアプリがあったとします。
ところが本番サーバーに持っていくと、
- Javaのバージョンが違う
- 必要なライブラリが入っていない
- 設定ファイルが違う
などの理由で動かなくなることがあるそうです。
いわゆる、
「俺の環境では動くんだけど?」
問題ですね。

コンテナはアプリの実行に必要なものをまとめて管理できるため、この問題を起こしにくくしてくれます。
「移植性が高い」というのはこういう意味だったのかもしれません。
ちなみに5日目、6日目とサーバー関連の内容が続いていたので、
「コンテナの中にサーバーも入ってるのかな?」
と思っていましたが、実際はそうではないみたいです。
(もし入っていたらカセット付きゲーム機本体で例えてました。残念。)
コンテナを実行するための作業
コンテナを実行するためにはDockerというソフトウェアを利用します。
AWSの場合はEC2インスタンスにDockerを構築して、コンテナの実行や管理を行うことができます。
ただ、この方法だとEC2なのでOS管理が必要になりますし、サーバー台数が増えるほど管理の手間も増えていきます。
正直Dockerのコマンドを見た時点で「コンテナが何十個もあったら管理大変そうだな…」と思いました(笑)
また、
- コンテナが停止したら再起動
- アクセスが増えたらコンテナを追加
- バージョンアップしたら入れ替え
など、運用面でも色々大変そうです。
その課題を解決するために生まれたのが次に紹介するマネージドサービス達です!
マネージドサービス
上記課題を解決するために下記4つのサービスが用意されています。
- Amazon ECR
- Amazon ECS
- AWS Fargate
- Amazon EKS
全部大事そうなので1つずつ紹介します。

Amazon ECR
コンテナを保存しておく場所(レジストリ)を提供するサービスです。
ゲームで言うとカセットケースみたいなものでしょうか。
作成したコンテナを保管しておくことができます。
Amazon ECS
コンテナを管理・実行するサービスです。
どのコンテナを動かすのか、何個動かすのかなどを管理してくれます。
ちなみにこういった管理を行うサービスをオーケストレーションサービスと呼びます。
オーケストラの指揮者みたいなイメージなんでしょうかね。
AWS Fargate
個人的に一番ありがたそうだと思ったサービスです。
コンテナを動かすためには通常EC2などのサーバーが必要になります。
しかしFargateを使うと、そのサーバー管理をAWS側がやってくれます。
つまり、
コンテナだけ考えればOK
になります。
EC2のメンテナンスやスケーリングを意識しなくて良いのが大きなメリットです。
Amazon EKS
ECSとは別にKubernetes(クバネティス、クーベネティス)という有名なオーケストレーションサービスがあります。
そのKubernetesをAWS上で利用するためのサービスがEKSです。
Kubernetesでもコンテナの実行環境としてEC2やFargateを利用できます。
ユースケース

例えばゲームのランキングサイトを運営しているとします。
アプリをコンテナ化してECRに保存。
ECSで管理しながらFargateで実行します。
新作ゲーム発売でアクセスが急増。
サーバーが重くなってきたのでコンテナを増やして対応。
落ち着いたら減らす。
またアプリ更新時も新しいコンテナへ差し替えるだけなので、環境差異によるトラブルを減らしやすいそうです。
こういった柔軟な運用ができるのもコンテナのメリットです。
最後に
今日の3行まとめ
- コンテナはアプリ実行に必要なものをまとめたパッケージ
- 環境差異によるトラブルを減らしやすい
- AWSではECR、ECS、Fargate、EKSを利用して運用できる
今回調べてみて、コンテナの本当の強みは「軽量であること」よりも「環境をまとめて持ち運べること」にあるのかなと思いました。
正直まだありがたみを完全には理解できていません(笑)
こういうサービスは実際に触ってみて初めて価値が分かるタイプな気がします。
Dockerの運用とか障害調査とか、実務だとかなり大変そうですしね。
ただAWSがFargateのようなサービスを提供している理由は少し見えてきました。
利用者が管理するものを減らして、コンテナそのものに集中できるようにするためなんだと思います。
ではまた!
まとめ問題
問題1
コンテナの特徴として適切なものを選んでください。
A. OSそのものを仮想化する技術
B. アプリケーション実行に必要なものをまとめて管理する技術
C. データベース専用の管理技術
D. ネットワークを監視する技術
問題2
コンテナを利用するメリットとして適切なものはどれでしょうか。
A. サーバー台数を必ず減らせる
B. データベースが不要になる
C. 環境差異によるトラブルを減らしやすい
D. セキュリティ対策が不要になる
問題3
コンテナイメージを保存するAWSサービスはどれでしょうか。
A. Amazon ECS
B. Amazon EKS
C. AWS Fargate
D. Amazon ECR
問題4
コンテナを管理・実行するオーケストレーションサービスはどれでしょうか。
A. Amazon ECS
B. Amazon S3
C. Amazon Route 53
D. Amazon CloudFront
問題5
AWS Fargateの特徴として最も適切なものはどれでしょうか。
A. コンテナイメージを保存する
B. サーバー管理を意識せずコンテナを実行できる
C. DNS管理を行う
D. データ分析を行う
問題の解答はコチラ
問題1:B
問題2:C
問題3:D
問題4:A
問題5:B

コメント