AWS EC2にDockerでDocker Compose（1.29.2）を導入

#目的
AWS環境にEC2インスタンスを立て、Dockerを利用してRedmine, Gitlab, Jenkinsの環境セットを
繰り返し構築できるように、実際に試してみた内容を残しておきます。
（備忘録も込めて実行時のログも記載しているため、見にくい部分ありましたらご容赦ください）

#記載範囲
下記前提条件に沿って、EC2インスタンスを立てた後にDockerを導入してDocker Composeが利用できるところまでを記載します。

試すにあたり、以下サイトを参考にさせて頂きました。
[AWS EC2にDockerでRedmineを導入](https://qiita.com/tu-kun/items/a8aa0926b090b7cccc9d)

#前提条件
- EC2インスタンスは以下で作成
  - プラットフォーム：Amazon Linux
  - インスタンスタイプ：t2-medium　※後にGitlabを導入を見越しての選択（この記事の範囲であれば、特にt2.microでも問題なし）
  - docker-compose（執筆時点の最新1.29.2）
- EC2インスタンスはTeraTermからSSH接続してDockerコマンドを実行（SSH接続方法はここでは割愛）
- ec2-userにて実行

#最新パッケージの最新化
AWS EC2にインストールされている各モジュールを最新化しておきます。

```bash
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo yum update -y
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
No packages marked for update
```

#Dockerの導入
```bash
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo yum install -y docker
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 0:20.10.4-1.amzn2 will be installed
--> Processing Dependency: runc >= 1.0.0 for package: docker-20.10.4-1.amzn2.x86_64
--> Processing Dependency: libcgroup >= 0.40.rc1-5.15 for package: docker-20.10.4-1.amzn2.x86_64
--> Processing Dependency: containerd >= 1.3.2 for package: docker-20.10.4-1.amzn2.x86_64
--> Processing Dependency: pigz for package: docker-20.10.4-1.amzn2.x86_64
--> Running transaction check
---> Package containerd.x86_64 0:1.4.4-1.amzn2 will be installed
---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed
---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed
---> Package runc.x86_64 0:1.0.0-0.3.20210225.git12644e6.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package    Arch   Version                              Repository         Size
================================================================================
Installing:
 docker     x86_64 20.10.4-1.amzn2                      amzn2extra-docker  32 M
Installing for dependencies:
 containerd x86_64 1.4.4-1.amzn2                        amzn2extra-docker  24 M
 libcgroup  x86_64 0.41-21.amzn2                        amzn2-core         66 k
 pigz       x86_64 2.3.4-1.amzn2.0.1                    amzn2-core         81 k
 runc       x86_64 1.0.0-0.3.20210225.git12644e6.amzn2  amzn2extra-docker 3.2 M

Transaction Summary
================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 59 M
Installed size: 243 M
Downloading packages:
(1/5): pigz-2.3.4-1.amzn2.0.1.x86_64.rpm                   |  81 kB   00:00
(2/5): libcgroup-0.41-21.amzn2.x86_64.rpm                  |  66 kB   00:00
(3/5): containerd-1.4.4-1.amzn2.x86_64.rpm                 |  24 MB   00:01
(4/5): runc-1.0.0-0.3.20210225.git12644e6.amzn2.x86_64.rpm | 3.2 MB   00:00
(5/5): docker-20.10.4-1.amzn2.x86_64.rpm                   |  32 MB   00:01
--------------------------------------------------------------------------------
Total                                               33 MB/s |  59 MB  00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : runc-1.0.0-0.3.20210225.git12644e6.amzn2.x86_64              1/5
  Installing : containerd-1.4.4-1.amzn2.x86_64                              2/5
  Installing : libcgroup-0.41-21.amzn2.x86_64                               3/5
  Installing : pigz-2.3.4-1.amzn2.0.1.x86_64                                4/5
  Installing : docker-20.10.4-1.amzn2.x86_64                                5/5
  Verifying  : containerd-1.4.4-1.amzn2.x86_64                              1/5
  Verifying  : docker-20.10.4-1.amzn2.x86_64                                2/5
  Verifying  : pigz-2.3.4-1.amzn2.0.1.x86_64                                3/5
  Verifying  : runc-1.0.0-0.3.20210225.git12644e6.amzn2.x86_64              4/5
  Verifying  : libcgroup-0.41-21.amzn2.x86_64                               5/5

Installed:
  docker.x86_64 0:20.10.4-1.amzn2

Dependency Installed:
  containerd.x86_64 0:1.4.4-1.amzn2
  libcgroup.x86_64 0:0.41-21.amzn2
  pigz.x86_64 0:2.3.4-1.amzn2.0.1
  runc.x86_64 0:1.0.0-0.3.20210225.git12644e6.amzn2

Complete!
```
#Dockerサービスを起動
```bash
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
```
#Docker Compose（執筆時点の最新：1.29.2）の導入
sudoコマンドにて、スーパーユーザ（rootユーザ）の管理者権限で実行します。

```bash
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo su
[root@ip-xxx-xx-xx-xxx ec2-user]# curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0   2813      0 --:--:-- --:--:-- --:--:--  2813
100 12.1M  100 12.1M    0     0  4352k      0  0:00:02  0:00:02 --:--:-- 5178k
[root@ip-xxx-xx-xx-xxx ec2-user]# chmod +x /usr/local/bin/docker-compose
```

#docker groupにec2-userを紐づける
ec2-userでdockerコマンドやdocker-composeコマンド実行時に権限エラーとならないように必要のようです。

```bash
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo su
[root@ip-xxx-xx-xx-xxx ec2-user]# grep -i docker /etc/group
docker:x:992:
[root@ip-xxx-xx-xx-xxx ec2-user]# sudo gpasswd -a ec2-user docker
Adding user ec2-user to group docker
[root@ip-xxx-xx-xx-xxx ec2-user]# grep -i docker /etc/group
docker:x:992:ec2-user
```

#次回コンテナ作成用にディレクトリを作成
次回はDocker Composeを利用してRedmineを導入するため、docker-compose.ymlの作成から記載する予定です。

```bash
[ec2-user@ip-xxx-xx-xx-xxx container01]$ pwd
/home/docker/container01
```

#Dockerのバージョン確認
今回導入したDockerのバージョンを確認。

```bash
[ec2-user@ip-xxx-xx-xx-xxx container01]$ docker --version
Docker version 20.10.4, build d3cb89e
```
#Docker Composeのバージョン確認
今回導入したDocker Composeのバージョンを確認。

```bash
[ec2-user@ip-xxx-xx-xx-xxx container01]$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
```