ECSの概要について解説をしました。今回はDockerを動かすための環境構築とコンテナ作成、そして作成したコンテナをECS上で動かし、動作を確認するまでの手順を解説していきます。便利なコンテナの使い方Dockerの環境構築とコンテナ作成コンテナの作成環境コンテナを作成するためにはDockerがインストールされた環境が必要になります。今回はAWSのEC2インスタンスにDockerをインストールし、コンテナの作成をしていきます。解説をするために作成したAWS環境はこのような形です。リージョンはどこでも構いません。VPCを作りDocker構築用のEC2インスタンスを作成しています。Manager(SSM)等を使う方法もありますので、接続方法はお好みの方法で構いません。Groupで接続元を制限しましょう。EC2インスタンスに接続ができたら、Dockerの実行環境を作成していきます。Linux)・Dockerのインストールと実行yumコマンドを使ってDockerをインストールします。dockerインストールが終わりましたら、Dockerを起動します。docker念のため、起動していることを確認しましょう。info・Dockerのバージョンは以下の通りです。b82b9f3コンテナの作成準備Dockerではdockerfileというファイルでどんなコンテナを作成するかコンテナの中身を定義しています。今回は簡単なWebページを表示するためのコンテナを作成します。・作業用のディレクトリを作成します。/docker・dockerfileを作成します。Hubなどのレジストリ(コンテナの置き場所)からダウンロードすることができます。hubを使用しています。hub:https://hub.docker.com/)dockerfile内のFROMでコンテナのイメージを指定しています。サーバー用のイメージである「httpd:2.4」というイメージを使用します。COPYでカレントディレクトリにあるindex.htmlを、/usr/local/apache2/htdocs/index.htmlにコピーをしています。・簡単なWEBページ用のhtmlを作成します。</body></html>これでコンテナの作成準備が完了しました。余談ですが、現時点ではまだコンテナのイメージを作成していません。コンテナの作成は次章で行いますが、事前に作成してみたいという方は下記のコマンドで作成・確認することが出来ます。・コンテナの作成dockerfile、index.htmlのあるディレクトリで下記のコマンドを実行してください。.※ドットまでがコマンドです。http-testというコンテナを作成する場合は下記のようになります。168MBhttp-testとhttpdの2つのコンテナが作成されていることが分かります。httpdはdockerfileのFROMで指定した、http-testを作成した際に使用した元のコンテナイメージとなります。・コンテナを実行する。relaxed_hofstadterSTATUSがUpとなっているので、コンテナIDがfcf95ec68816として、実行されていることが分かります。/bin/bashroot@fcf95ec68816:/usr/local/apache2#無事にコンテナの中に入り、Shell(bash)が表示されました。Registry)とはDockerのコンテナイメージを保存するためコンテナレジストリです。ECSでコンテナを扱うためにはレジストリと呼ばれるコンテナ置き場に、コンテナを配置する必要があります。Registryなどにも対応しています。今回はECRのプライベートレジストリ(外部公開をしないレジストリ)を使用します。ECRの作成AWSマネジメントコンソールを使いECRを作成します。ECR」を選択します。右側にあるレポジトリの作成にある、「使用方法」をクリックします。「レポジトリを作成」画面が表示されます。1「プライベート」を選択します。※パブリックを選択すると外部に公開されますのでご注意下さい。2お好みのリポジトリ名を入力して下さい。※本ブログ記事では「bare_test」として作成します。設定しませんので、入力が終わりましたら「リポジトリを作成」を選択します。ECRにDockerイメージをPush作成されたECRにチェックを入れて、「プッシュコマンドの表示」をクリックします。Mac/Linux用のコマンドと、Windows用のコマンドが表示されますので、環境に合わせてコマンドを実行します。基本的にはこの通りに実施すれば問題ありません。今回は用意したEC2インスタンスからPushしますので、Mac/Linux用のコマンドを実行していきます。Succeeded」と表示されれば、認証成功です。この時点でエラーが出る場合は、Linuxの実行権限、IAMロールなどの権限周りを確認して下さい。続いて、先程作成したdockerfileを使いイメージを構築(ビルド)します。コンテナを作成(build)します。dockerfileのあるディレクトリに移動します。bare_test:latestdockerイメージの構築に失敗する場合は、dockerfile中のスペルミスやファイル名が正しいかを確認してください。続いてイメージにタグを付けて、ECRにdockerイメージをプッシュします。1573これでECRにイメージをプッシュすることが出来ました。この後、必要となりますので、URIをメモしておきましょう。ECSでコンテナを動かしてみようここからはECSのクラスターとタスクを作成し、実際にコンテナを実行していきます。図の赤枠の部分となります。実行準備ECSの構成要素であるクラスターを作成します。クラスターの作成AWSマネジメントコンソールからECSへ移動し、「クラスター」、「クラスターの作成」を選択します。「クラスターの作成」画面で、任意の「クラスター名」、「ネットワーク」を入力・選択し「作成」を実行します。完了すると、「正常に作成されました」と表示されます。・タスク定義ECSの画面から「タスク定義」を選択し、「新しいタスク定義の作成」を実行します。「新しいタスク定義の作成」と「JSONを使用した新しいタスク定義の作成」がリストに出てきますので、「新しいタスク定義の作成」を選択します。「タスク定義とコンテナの設定」画面ではコンテナ(タスク)を定義するための具体的な設定をしていきます。1任意のタスク定義名を記入します。2コンテナの名前を記入します。3先程メモしたECRのURIを記入します。4どのポートに対してアクセスをするのかを設定します。5今回はhttpプロトコルを使ったWEBページへのアクセスとなりますので、80を入力します。入力が終わりましたら、下部にある「次へ」を選択します。「環境、ストレージ、モニタリング、タグの設定」画面で起動タイプ、コンテナのCPU/メモリなどの細かい設定をしてきます。今回はほぼデフォルト構成で実行していきます。1ECSの起動タイプを選択します。今回はFargateを選びました。2コンテナ(タスク)の実行サイズを指定します。お好みのサイズを指定して下さい。性能が高いほど利用料は上がります。3入力が終わりましたら、下部にある「次へ」を選択します。「確認して作成」画面で設定に問題がないか確認をして、下部の「作成」を選択します。実行(タスクの実行)タスクの実行はクラスターから行います。ECSのクラスターから、先程作成したクラスターを選択します。クラスターの画面から、「タスク」、「新しいタスクの実行」の順に選択します。「作成」画面で実行するタスクの設定をしていきます。デプロイ設定ではタスク定義のファミリーで、作成したタスク定義を指定します。「ネットワーキング」ではVPC、サブネット、セキュリティグループを設定します。今回はWEBページにアクセスするために、セキュリティグループで80ポートを開放しています。必要に応じてパブリックIP(グローバルIP)をオンにしてください。外部ネットワークからアクセスさせる場合、パブリックIPが必要となります。設定が終わりましたら、下部の「完了」を選択します。新しいタスクが実行されると、ステータスが「プロビジョニング」になり、少し待ってから更新すると「実行中」に変わります。動作確認ECSを使ったWEBサーバーの公開が完了したので、早速ECSにアクセスしてみましょう。実行したタスクを選択し、パブリックIPを確認します。今回はシンプルなWebページを表示する方法を解説して行きましたが、ECSの具体的な活用シーンには以下のようなものがあります。Batch」が挙げられます。S3に格納された大量のデータを定期的に処理したいとします。Lambdaでは起動時間が15分までという制限があり、処理時間に制限時間を超えるような時間のかかる処理には向いていません。EC2ですと常時起動状態にしたままだと時間分の費用が発生しますし、定時に起動させると言ったアクションをさせるにも手間がかかります。Eventsを使用するなどの工夫が必要です。ECSであれば、コンピューティングリーソースの自由度が高く、稼働時間の制限もないため、Lambdaの制限時間内では実行できないような時間のかかる処理を定期的に実行したい、という用途には向いていると言えます。Fargateを構築することで、サーバーの管理・維持を意識せずにシステムを構築することが可能です。基盤となる部分をFargateで構築し、コンテンツをS3やEFSなどに配置することで、基盤の更新とコンテンツの更新を明確に分けることが出来ます。コンテナはコードベース(dockerfile)で管理することができますので、ローカルでのテストや、その後のデプロイまでサーバー構成に依存せずに行えます。Service)というサービスがあります。コンテナ化は便利な技術ではありますが、コンテナが増加してしまうと、結果としてコンテナ自体の管理・運用に手間がかかるようになり、また煩雑になってしまいやすいといったデメリットも存在しています。Kubernetesはそうしたコンテナのデメリットを解決するために、コンテナの運用管理や自動化を行うための、ECSのようなコンテナオーケストレーションツールの一つです。EKSとはAWSでKubernetesを扱うためのマネージドサービスとなります。ECSとの主な違いは、ECSはAWSのオリジナルソフトウェアをベースに開発されたクローズドソフトウェアであり、一方でEKSはオープンソースがベースであるという点です。EKSの元となっているKubernetesはオープンソースとして世界中で開発されており、豊富な機能を持ち、頻繁なアップデートが実施されています。機能が豊富で便利な半面、使いこなすには相応の学習コストが必要なので、開発規模や使用目的に応じて使い分けることが大切です。コンテナは便利で楽しい技術です。この記事が少しでも皆様のお役に立ってくれれば嬉しい限りです。機能・...#TAGSタグ#AWS#Azure#ECS#ツール#入門編#改善#比較#設計トップページブログECSでコンテナを作成するには?Dockerの環境構築から動作確認までを。