AWSにDockerコンテナをデプロイするには？

このチュートリアルでは、EC2インスタンスにDockerコンテナをデプロイする方法を説明します。

:::note warn
このチュートリアルは、単に作業方法を説明するために用意されています。AWSでDockerコンテナをデプロイしたい場合は、**[Amazon Elastic Container Service](https://aws.amazon.com/jp/ecs/)**（**[ECS](https://aws.amazon.com/jp/ecs/)**）またはさらに良い選択として **[Amazon Elastic Kubernetes Service](https://aws.amazon.com/jp/eks/)**（**[EKS](https://aws.amazon.com/jp/eks/)**）を使用することをお勧めします。これらの2つのサービスの使用方法については、別のチュートリアルで説明する予定です。
:::

このチュートリアルでは単純にNginxサーバーをデプロイしますが、この方法を使用して完全なウェブサイトをデプロイすることもできます。例えば、WordPressサイト、Laravelサイト、ECCubeショップなどがあります。

# EC2インスタンスを作成

EC2ダッシュボードにアクセスしてください。

![Screenshot 2023-12-12 at 11.23.46__01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/746624ec-361e-39bf-92e7-5e4d430f1343.png)

「**インスタンスを起動**」をクリックしてください。

![Screenshot 2023-12-12 at 11.23.46__02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/b63c3632-1f1f-22e7-ef9e-8d90942627d0.png)

EC2インスタンスを作成する画面に移動します：

![Screenshot 2023-12-12 at 11.27.11__03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/bcf5f45c-4d42-4c58-2d48-a7026f0d07f7.png)

「**東京**」リージョンにいるか確認してください。

![Screenshot 2023-12-12 at 11.27.11__04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/c278f322-b3dd-78de-20ef-9557257cb747.png)

「**名前とタグ**」セクションに移動してください。

![Screenshot 2023-12-12 at 11.27.11__05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/3df27c9f-22f9-cda6-db8e-f6a5d60680ea.png)

「**名前**」の欄に「**MyDocker**」と書いてください。

![Screenshot 2023-12-12 at 11.32.39__07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/0b9506f7-b126-779b-7aa1-26b69bba2e75.png)

**Amazon Linux**を使用していることを確認ください。

![Screenshot 2023-12-12 at 11.36.30__08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/37fc5b49-dbb6-cd27-3c80-bdd0c8fab2ac.png)

また、**t2.micro**を使用していることを確認してください。

![Screenshot 2023-12-12 at 11.40.02__09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/f8aec9b5-5c5b-cc93-d7bb-e2b71ae4e7d9.png)

このチュートリアルでは、キーペアが要らないので使用しません。

「**キーペアなしで続行 (推奨されません)**」を選択してください。

![Screenshot 2023-12-12 at 11.49.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/02ca5dc2-2156-cef3-e42f-b7fb50f924c5.png)

「**ネットワーク設定**」セクションに移動してください。

![Screenshot 2023-12-12 at 11.52.35__10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/74b2d02e-217c-5f8f-c621-5548610d60f8.png)

AWSは、セキュリティグループを作成すると書いています。

![Screenshot 2023-12-12 at 11.52.35__11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/12d671a4-0493-cf78-7732-fdd338edb389.png)

私の場合、セキュリティグループの名前は**launch-wizard-2**となります。ただし、注意してください。あなたの場合、異なる名前になる可能性があります。

次に、「**インターネットからの HTTP トラフィックを許可**」にチェックを入れて、インスタンスがインターネットにアクセスできるようにします。

![Screenshot 2023-12-12 at 11.58.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/2a46dcbd-1f91-678b-849f-6196f6f7dfdc.png)

:::note warn
このチュートリアルでは、EC2インスタンスを自動的に起動するために**ユーザーデータ**を使用しません。EC2インスタンスの展開に慣れてきたら、**ユーザーデータ**をご利用いただくことをお勧めします。
:::

その後、「**インスタンスを起動**」ボタンをクリックしてください。

![Screenshot 2023-12-12 at 12.05.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/9b2b715f-a554-d69b-e000-90078c397a8c.png)

EC2ダッシュボードの画面に戻ってください。

![Screenshot 2023-12-12 at 12.08.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/7994d137-36ec-4e9d-6541-81ac69fdf497.png)

インスタンスのステータスが「**実行中**」になるまで待ってください。

![Screenshot 2023-12-12 at 12.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/c5f8f028-2060-e8ec-e008-469387f43b10.png)

インスタンスを選択してください。

![Screenshot 2023-12-12 at 12.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/c5669827-c5fd-b506-cc6c-e6f7d3bbba94.png)

次に、「**接続**」メニューをクリックしてください。

![Screenshot 2023-12-12 at 12.14.30 copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/0660113b-0fef-19dc-ccf2-e5c7ea10d553.png)

その後、この画面に移動するはずです：

![Screenshot 2023-12-12 at 12.17.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/df049b1b-d8eb-5e72-7b78-8441deb311c3.png)

その後、「**接続**」ボタンをクリックしてください。

![Screenshot 2023-12-12 at 12.17.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/9258ec21-f1f8-07a6-697b-c73aa90344e8.png)

新しいウィンドウが開くはずです：

![Screenshot 2023-12-12 at 12.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/11f6e035-16a8-17ca-f12d-fa54476f7612.png)

以下のコマンドを入力してください：

```bash
sudo su
yum update -y
yum install -y docker
yum install -y libxcrypt-compat
usermod -a -G docker ec2-user
id ec2-user
newgrp docker
cd /home/ec2-user/
curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
systemctl enable docker.service
systemctl start docker.service
vim docker-compose.yaml
```

docker-compose.yamlファイルに次のコードを追加してください：

```yaml
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - "80:80"
```

docker-compose.yaml ファイルを保存し、次のコマンドを実行してください。

```bash
docker-compose up -d
```

EC2インスタンスのリストページに戻り、インスタンスだけを選択してください。

![Screenshot 2023-12-12 at 12.58.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/acb8ba01-9045-d03e-4f94-b1eb971a9d82.png)

その後、「**ネットワーキング**」タブを選択してください。

![Screenshot 2023-12-12 at 13.00.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/a36322ac-5bde-e299-a506-a4f7ff78fb0d.png)

その後、「**パブリック IPv4 アドレス**」を検索してください。

![Screenshot 2023-12-12 at 13.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/66d66bb8-2e42-202b-2f8c-e1d0d4d2747b.png)

私の場合、パブリックIPv4アドレスは54.250.208.183です。

次に、このIPをコピーしてブラウザに貼り付けてください。すべてがうまくいくと、このページが表示されるはずです：

![Screenshot 2023-12-12 at 13.04.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/ee141fd5-1632-a37b-7da9-0bb1df2b867c.png)

# 動画

必要なら、Youtubeで動画を作成しました。

<iframe width="1062" height="606" src="https://www.youtube.com/embed/r9GBQFO8tYM" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


# なぜウェブアプリケーションにDockerを使用するのですか？

Dockerは、コンテナと呼ばれる緩やかに隔離された環境でアプリケーションをパッケージ化して実行する機能を提供します。この隔離とセキュリティにより、特定のホスト上で多くのコンテナを同時に実行できます。

# DOCKERのWEBホスティングにおける利点

DockerはWEBホスティングにどのような利点をもたらすのでしょうか？以下は、WEBホスティングの文脈でDockerが提供するいくつかの主要な利点です：

### 開発プロセスの簡素化

従来、WEBホスティング環境をセットアップするには、必要なサービスやライブラリを手動でインストールおよび構成する必要がありました。Dockerはそのコンテナ技術を用いて、このプロセスを簡素化します。Dockerを使用すると、アプリケーションの実行に必要なすべてのサービスを含むコンテナを作成できます。このコンテナは簡単に起動、停止、および削除でき、開発全体が簡素化されます。

### スケーラビリティ

WEBホスティングの主要な課題の1つは、異なる量のトラフィックを処理することです。ウェブサイトが高いトラフィックを経験する場合や、比較的低い場合があります。Dockerのコンテナ技術を使用すると、需要に応じてアプリケーションを簡単にスケーリングできます。

同じアプリケーションの複数のDockerコンテナのインスタンスを実行することで、トラフィックの増減に効果的に対応できます。需要が低いときは、実行中のコンテナの数を減らすだけで済みます。この弾力性により、DockerはWEBホスティングにおいて強力なツールとなります。

### リソース効率

Dockerコンテナは軽量であり、ホストシステムのOSカーネルを共有しているため、従来の仮想マシンよりもリソース効率が向上しています。これは、複数のDockerコンテナを単一のマシンで実行でき、リソース枯渇の心配がないことを意味します。WEBホスティングの文脈では、これにより単一のサーバー上で複数のウェブサイトをホストし、リソースの利用を最大限に活用し、ホスティングコストを削減することができます。

### 分離とセキュリティ

DockerコンテナはホストシステムのOSカーネルを共有していますが、互いに分離して実行されます。これにより、1つのコンテナのプロセスが他のコンテナに干渉することはありません。ウェブホスティングでは、同じサーバー上で複数のアプリケーションやウェブサイトを実行している可能性があるため、この分離は大きな利点です。

さらに、Dockerはコンテナのリソース使用量を制限するなど、いくつかのセキュリティ機能を提供しています。また、seccompプロファイルやAppArmorなどのDockerの組み込みセキュリティ機能を使用して、コンテナをさらに保護することができます。