Amazon Linux 2023でDockerを導入・設定する手順

## 環境
- EC2
  - OS: Amazon Linux 2023
- EC2インスタンスは起動済みであること

## 手順1：Dockerのインストール
パッケージのアップデート
```bash
$ sudo dnf -y update
Last metadata expiration check: 9:57:17 ago on Sun May  4 00:30:59 2025.
Dependencies resolved.
Nothing to do.
Complete!
```

Dockerのインストール
```bash
sudo dnf install docker
```

Dockerのバージョン確認をすることで、Dockerがインストールされたかを確認します
```bash
$ docker -v
Docker version 25.0.8, build 0bab007
$ which docker
/usr/bin/docker
```

## 手順2：Dockerの起動
```bash
sudo systemctl start docker.service
```
Dockerが起動しているか確認
```bash
sudo systemctl status docker.service
```
`activate（running）`と表示されるのでDockerが起動していることが確認できます

### Dockerのステータス
| ステータス | 意味 |
|:-----------|:------------|
| `created` | コンテナは作成されたが、まだ実行されていない |
| `restarting` | コンテナが何らかの理由で停止し、自動的に再起動しようとしている |
| `running` | コンテナが現在稼働中 |
| `removing` | コンテナが削除されている最中 |
| `paused` | コンテナは一時停止状態 |
| `exited` | コンテナのプロセスが終了した（正常終了または異常終了） |
| `dead` | コンテナが完全に停止し、正しくクリーンアップされなかった状態 |

## 手順3：Dockerの自動起動設定
EC2を停止、再起動してもDockerが自動的に起動するようになります

自動起動設定になっているかどうか確認
```bash
$ sudo systemctl is-enabled docker.service
disabled
```
自動起動を有効化
```bash
sudo systemctl enable docker.service
```
再度、自動起動設定になっているかどうか確認
```bash
$ sudo systemctl is-enabled docker.service
enabled
```
以上で自動起動設定を有効にすることができました

## 手順4：Dockerグループにユーザー追加
`ec2-user`をDockerグループに追加してから、再起動を行うと、`sudo`なしで Dockerコマンドを使えるようになります
```bash
sudo usermod -aG docker ec2-user
```

## 手順5：Docker composeのインストール、設定
現時点での最新版を[Githubのreleasesページ](https://github.com/docker/compose/releases)で確認してからインストールしてください。(2025/05時点ではv2.35.1が最新)
```bash
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.35.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 70.2M  100 70.2M    0     0  34.5M      0  0:00:02  0:00:02 --:--:-- 66.1M
```
実行権限を追加
```bash
$ ls -l /usr/local/bin/docker-compose
-rw-r--r--. 1 root root 73699264 May  7 01:31 /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

$ ls -l /usr/local/bin/docker-compose
-rwxr-xr-x. 1 root root 73699264 May  7 01:31 /usr/local/bin/docker-compose
```

バージョン確認
```bash
docker-compose -v
Docker Compose version v2.35.1
```

## 手順6：Dockerの動作テスト
```bash
# 現在のDocker環境の詳細情報を表示するコマンド
$ docker info
Client:
 Version:    25.0.8
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  0.12.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 25.0.8
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05044ec0a9a75232cad458027ca83437aae3f4da
 runc version: 6c52b3fc541fb26fe8c374d5f58112a0a5dbda66
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.1.134-150.224.amzn2023.x86_64
 Operating System: Amazon Linux 2023.7.20250428
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 949.4MiB
 Name: ip-10-0-0-154.ap-northeast-1.compute.internal
 ID: a176f683-0026-492d-b80b-ead5c2ef4324
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
```
または
```bash
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:c41088499908a59aae84b0a49c70e86f4731e588a737f1637e73c8c09d995654
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```
無事にDockerが動くことを確認できました

## おまけ：Dockerのcontainer, image, volumeを削除する方法
### 実行中のすべてのコンテナを一括で停止
```bash
docker stop $(docker ps -q)
```

### container削除
```bash
docker container prune
```

### image削除
```bash
docker image prune -a
```

### volume削除
```bash
docker volume prune -a
```

## まとめ
Amazon Linux 2023のEC2インスタンスにDockerとDocker Composeをインストール・設定し、正常に動作することを確認しました。