2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Elastic Container Service入門やってみた

Last updated at Posted at 2024-11-30

はじめに

本記事はAWS公式のハンズオン資料「Amazon Elastic Container Service 入門 コンテナイメージを作って動かしてみよう」で実施した内容のアウトプットになります。
今まで利用機会がなかったのですが、今回初めてDockerに触れてみました。

☆資料
https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-ECS-2022-reg-event.html?trk=aws_introduction_page

そもそもDockerとは?

簡単に言うと仮想化を行う仕組みです。
仮想マシンを使う仮想化の仕組みよりも軽量なのが特徴です。
一台のホストOSを共有して利用することで軽量化を実現しています。

image.png

ざっくりの実施内容

  • CloudShellを使ってコンテナイメージを作成する ※
  • コンテナイメージをECRにアップロードする
  • VPCを作成する
  • ECSクラスターの作成とタスク定義の作成をする
  • サービスの作成をする
  • コンテナの自動復旧を試す(本記事では割愛)

※ハンズオン資料では、Cloud9を使用してコンテナイメージを作成していますが、
 Cloud9の新規利用はすでに停止しているためCloudShellを使用しました。

実際やったこと

①Dokerfileの作成

コンテナイメージを作成するには、Dockerfileを使ってbuildを行う必要があります。
ハンズオン資料に添付されているドキュメントをもとに作成します。

vi dockerfile

dockerfileの内容は以下の通りです。

 FROM ubuntu:18.04
​
# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2
​
# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html
​
# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
 chmod 755 /root/run_apache.sh
​
EXPOSE 80
​
CMD /root/run_apache.sh

FROMにはDoker Hubで公開されているコンテナイメージとタグを指定します。
添付ドキュメントに記載された内容をそのまま使ったので古いタグですが、最新は以下から確認できます。
Doker Hub

その他実行しているコマンドの詳細についてはコチラのリファレンスを参照してください。
※簡単にいうとApacheをインストールしてからポート80で起動させている
リファレンス

②イメージのビルド(ローカルの環境でビルド)※やらなくてもOK

以下のコマンドでイメージのビルドを行います。

docker build -t hello-world .

-tでタグ名を指定します。ここではhello-worldというタグをつけました。
最後の「.」はdockerfileの場所を指定します。
カレントディレクトリにdockerfileを作成したので、.になっていますが、別の場所に作成した場合は作成した場所を指定します。

実行後、docker imagesコマンドを実行してイメージの一覧を表示します。
そうするとビルドしたイメージが表示されます。

[cloudshell-user@ip-10-130-44-44 ~]$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
hello-world   latest    17409d6c9676   37 seconds ago   205MB

③ECRでリポジトリの作成

ECRでプライベートリポジトリを作成します。

image.png
image.png

作成したリポジトリのURIはビルドに利用するのでコピーしておきます。

④リポジトリにイメージをプッシュ

ECRにプッシュする用のイメージをビルドいます。

# 参考
docker build -t アカウント番号.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:0.0.1 .

次にECRにログインします。

aws ecr get-login-password | docker login --username AWS --password-stdin アカウント番号.dkr.ecr.ap-northeast-1.amazonaws.com

以下のメッセージが出ればログイン完了です。

WARNING! Your password will be stored unencrypted in /home/cloudshell-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

ログインが完了したらイメージをリポジトリにプッシュします。

# 参考
docker push アカウント番号.dkr.ecr.ap-northeast-1.amazonaws.com/testrepo:0.0.1

ECRの画面を見るとリポジトリにイメージがプッシュされていることがわかります。
image.png

⑤VPCの作成

今回はインターネットゲートウェイやルートテーブルを一気に作成するので
「VPCなど」を選択します。
image.png
image.png

⑥セキュリティグループの設定

今回作成するコンテナイメージではApacheでWEB画面の表示をさせるので、
ECSで利用するセキュリティグループのインバウンドルールに0.0.0.0/0からのport80へのアクセスを許可します。

⑦ECSクラスターの作成

ECSでコンテナを実行する際はECSクラスターを作成します。
ECSクラスターはコンテナが実行される論理的なグループです。
リソースの管理やスケーリングの管理を行う単位になります。
image.png

⑧タスク定義の作成

タスク定義とは、どのようなイメージをどういう設定で起動させるかを定義します。
image.png
image.png

⑨サービスの作成

ECSのサービスとは、クラスター内で実行するタスクを管理する役割を持つ機能です。
指定した起動タイプでいくつのコンテナを実行させるか、LBを利用するかなどを指定できます。

ここでは、Fargateタイプで2つのタスクを起動させます。
タスクはマルチAZになるようにAvailability Zone rebalancingが有効になっていることを確認します。
また、ここでALBも作成します。
image.png
image.png
image.png
image.png
image.png

サービスを作成してしばらくするとタスクが実行されてイメージで定義した内容が確認できました。
image.png

おわりに

初めてDockerを使ってみましたが、非常に手軽に触ることができてもっと深く学習したいと思いました。
今回GUIで作成したVPCなどのリソースも今度はCLIで作成できるようにチャレンジしてみようと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?