AmazonLinux2023へDockerをインストールする方法をEC2のUserDataに指定する方法で解説します。
前提としてEC2の操作はssm-userで行うこととします。
Table of Contents
UserDataでDockerインストールおよび設定
以下はCloudFormationでEC2インスタンスを作成する際のUserDataの一文となります。
UserData:
Fn::Base64: !Sub |
#!/bin/bash
dnf -y install docker
usermod -aG docker ssm-user
systemctl enable docker
systemctl start docker
chmod 660 /var/run/docker.sockそれぞれのコマンドの内容を以下で解説します。
Dockerのインストール
1.dnfでDockerをインストールします。
dnf -y install docker2.usermod -aGとすることで、dockerグループにssm-userを所属させることができます。
-aで既存グループに追加、-Gで指定したグループ(今回であればdocker)にssm-userを追加する、という意味になります。
usermod -aG docker ssm-userDockerをインストールした時点で自動的にdockerグループが作成されます。
dockerグループにssm-userを所属させる理由はroot権限なしでdockerコマンドを実行できるようにするためです。
セキュリティの観点からデフォルトではdockerグループには誰も所属しておらずrootのみがdockerコマンドを実行できますが、その他のユーザはdockerコマンドを実行することができないため、明示的にdockerグループにssm-userを所属させることで、ssm-userは管理者権限なしでdockerコマンドを実行できるというわけです。
root権限なしでdockerコマンドを実行できるメリットはsudoをつけずにコマンドを実行できるようになるため、コマンド操作を楽にすることができます。
3.systemctlでDockerデーモンの自動起動設定、および再起動を実行します。
systemctl enable docker
systemctl stop docker
systemctl start docker
4.chmod 660でUnixソケットの権限を変更し、Dockerデーモンへの通信をできるようにします。
chmod 660で所有者、グループ、その他の全てのユーザの権限を変更しています。
所有者とグループのみに書き込み、読み取りの権限を付与しているのはここまでに設定しているdockerグループに所属しているssm-userのみにUnixソケット(/var/run/docker.sock)対する操作権限を付与するためです。
chmod 660 /var/run/docker.sockUnixソケット(/var/run/docker.sock)とは
Unixソケット(/var/run/docker.sock)はプロセス間で通信する仕組みです。
docker container runやdocker image buildなどのコマンドを実行すると、そのコマンドに応じてDocker Engine APIを呼び出し、Dockerデーモンは呼び出されたコマンドの内容に応じてコンテナの起動やビルドを実行します。
このCLIによってDocker Engine APIの呼び出しをUnixソケット(/var/run/docker.sock)を介して行われます。


