初学者によるDocker理解まとめ④　〜EC2インスタンスを起動してdockerをインストールするまで〜

# はじめに
ようやくDockerを学び始めたので自分の理解をまとめておく。
とはいえ、今回はほぼdocker関係ないです。

前回 => https://qiita.com/theFirstPenguin/items/b6d3e414e829e68e23ae
次回 => https://qiita.com/theFirstPenguin/items/bdaf0035e7b44cd33822

# やったこと
* VPCにパブリックサブネットを設置
* 上記VPCにEC2インスタンスを設置
* EC2インスタンスにdockerとdocker-composeをインストール

これだけです。
図にして（無駄にめんどくさく）表すとこんな感じ。
![スクリーンショット 2020-10-23 14.01.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/00cf044f-685e-f31c-4fe5-3bfd76205366.png)


# VPCにパブリックサブネットを設置
#### まずはVPCコンソールにアクセス
自分は`us-east-2`リージョンをいつも選択しています。特に意味はないです。
![スクリーンショット 2020-10-23 14.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/19a26e13-3694-8f28-674e-a6101fcf9eda.png)

#### とりあえずVPCを作成
CIDRブロックは開発シーンではしっかりと考える必要があるが、ここでは適当に`10.0.0.0/24`を指定。キリがいい`/16`とか`/24`がおすすめ。
テナンシーは、リソースを占有するかどうかだが、個人開発で気にする必要はないと思われる。
![スクリーンショット 2020-10-23 14.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/26400761-911a-6ae6-dc32-53cb4f6ce4ca.png)

#### IGWを作成してVPCにアタッチ
作成。
![スクリーンショット 2020-10-23 14.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/98b316e9-f3fb-c6a7-626f-0af4c207f7bc.png)

そして先ほど作成したVPCにアタッチ。
![スクリーンショット 2020-10-23 14.27.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/81077189-4631-b28f-9b9c-49cc1dc138b6.png)

まだこれだけ。
![スクリーンショット 2020-10-23 14.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/32ab6971-be9d-6ac8-561a-e3a8b5da4eee.png)


#### サブネットを作成
先ほど作ったVPCの中にサブネットを作成。
CIDRブロックは`/28`に設定。これでサブネットの中に`2^(32-28)−5=11`個のIPアドレスを持つことができる。
また、AZは`us-east-2a`に設定。
![スクリーンショット 2020-10-23 14.44.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/0c5bce85-61f4-2998-1c82-4d2b59e34738.png)

また、サブネットのパブリックIPv4アドレスの自動割り当てを有効化しておく。
![スクリーンショット 2020-10-23 14.47.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/22b1e66d-fce1-1151-b66a-bdc537613044.png)

ここまで来た。
![スクリーンショット 2020-10-23 14.50.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/b0f99b9f-a7b8-8e62-c5bf-c307635d0954.png)


#### ルートテーブルを作成
先ほど作ったVPCの中にルートテーブルを作成。
![スクリーンショット 2020-10-23 14.55.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/c39fc07a-5e45-ae17-a5cb-1f634a4c539b.png)

作成したルートテーブルを先ほど作ったサブネットに関連づける。
![スクリーンショット 2020-10-23 14.57.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/45b3e944-6b8e-66ee-9a8a-820627f2cda0.png)

IGWへのルートを設定してインターネットに接続できるようにする。
![スクリーンショット 2020-10-23 14.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/51470577-edac-9e63-ce22-9032f328122e.png)

ちょっと進んだ。
![スクリーンショット 2020-10-23 15.04.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/558413ef-e72f-a7ea-f700-7c7a4d29b99c.png)



# 上記VPCにEC2インスタンスを設置

#### EC2コンソールにアクセス
![スクリーンショット 2020-10-23 15.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/db4c11a8-ab24-e1be-d99d-9ef48fc61b02.png)

#### インスタンスの設定
AMIは無料枠の`Amazon Linux2`を選択。
インスタンスタイプも無料枠の`t2.micro`を選択。

インスタンスの詳細設定では、先ほど作ったVPCとサブネットを選択する。
また、自動割り当てパブリックIPを有効化しておく。
その他のオプションは今回設定しない。
![スクリーンショット 2020-10-23 15.20.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/271cdc4d-d10f-f2c3-b974-c751921114c9.png)


ストレージはデフォルトのEBS設定でOK。
![スクリーンショット 2020-10-23 15.23.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/b7b5ed84-5669-c0c2-2ad8-153c6403f382.png)

タグは適当に設定
![スクリーンショット 2020-10-23 15.24.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/2793cf22-3a5c-8080-0c1a-86f0495e2bfa.png)


セキュリティグループを設定する。
SSHとHTTPのインバウンド通信を全て許可し、アウトバウンドは全ての通信を許可する。
![スクリーンショット 2020-10-23 15.32.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/2fee0d3c-688c-5b6f-f964-577c56a2eee6.png)

キーペアがなければ新しく作る。
![スクリーンショット 2020-10-23 15.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/45784b1a-56b2-0f4b-9acc-561c83b1bce2.png)

ようやくここまで来た。
![スクリーンショット 2020-10-23 15.37.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/8839435c-3cfd-92e6-e5e5-8484d63b8e8d.png)

# EC2インスタンスにdockerとdocker-composeをインストール
#### ローカルPCからEC2インスタンスに接続
EC2のコンソールで対象インスタンスを選んで「接続」ボタンを押すと下記画面になる。
基本的にはこれに従うだけ。
![スクリーンショット 2020-10-23 15.41.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/025a262d-b83c-416d-c151-3ecafae809c6.png)

キーペアが`~/Downloads`に保存してあるとすると、下記コマンドで接続できる。

```
cd ~
mv Downloads/ec2-key.pem .ssh/
cd .ssh/
chmod 400 ec2-key.pem
ssh -i "ec2-key.pem" ec2-user@<your-ec2-public-ip>
```
＊`chmod`の意味について[こちらの記事](https://qiita.com/gyu_outputs/items/fc4f6e54864943121f80)がとても参考になりました。ありがとうございました。

ほぼほぼゴールまで来た。（いや、スタートかも）
![スクリーンショット 2020-10-23 15.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/afdce4b2-9c9b-fed4-36bc-2d357a7cc82e.png)


#### dockerをEC2にインストール
```
sudo yum -y update
sudo yum install -y docker
sudo gpasswd -a $USER docker
sudo service docker start
```

再度ログインしなおすと、dockerが使えるようになっている。
＊[参考](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/docker-basics.html)

#### docker-composeをEC2にインストール
docker-composeもインストールする必要があるので、[公式ドキュメント](https://docs.docker.com/compose/install/)にしたがってインストールする。

```
sudo -i
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
exit
```
これでインストールできた。一応ゴール。
![スクリーンショット 2020-10-23 16.03.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/8f4d2a86-a533-738b-6f7a-e44c6c25a147.png)



#### せっかくなので、AMIを保存しておく
dockerをインストール済みの全ての設定を含むイメージをAMIとして保存することができる。
これを使えば、次回にEC2インスタンスを起動するとき、dockerをインストールする必要はない。
インスタンスの設定画面からアクションでAMIを作成できる。
![スクリーンショット 2020-10-23 16.02.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/572098/ef0c8dbc-c147-131a-a6bc-dee2ef3e284a.png)

# 最後に
やっぱりdocker関係なかったです。
ほぼEC2の基礎の記事となってしまいました。
ありがとうございました。