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 docker
2.usermod -aG
とすることで、docker
グループにssm-user
を所属させることができます。
-a
で既存グループに追加、-G
で指定したグループ(今回であればdocker
)にssm-user
を追加する、という意味になります。
usermod -aG docker ssm-user
Dockerをインストールした時点で自動的に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 66
0でUnixソケットの権限を変更し、Dockerデーモンへの通信をできるようにします。
chmod 66
0で所有者、グループ、その他の全てのユーザの権限を変更しています。
所有者とグループのみに書き込み、読み取りの権限を付与しているのはここまでに設定しているdockerグループに所属しているssm-user
のみにUnixソケット(/var/run/docker.sock)対する操作権限を付与するためです。
chmod 660 /var/run/docker.sock
Unixソケット(/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
)を介して行われます。
