AmazonLinux2023へDockerインストール

al2023 docker

AmazonLinux2023へDockerをインストールする方法をEC2のUserDataに指定する方法で解説します。

前提としてEC2の操作はssm-userで行うこととします。

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 660でUnixソケットの権限を変更し、Dockerデーモンへの通信をできるようにします。

chmod 660で所有者、グループ、その他の全てのユーザの権限を変更しています。

所有者とグループのみに書き込み、読み取りの権限を付与しているのはここまでに設定している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 rundocker image buildなどのコマンドを実行すると、そのコマンドに応じてDocker Engine APIを呼び出し、Dockerデーモンは呼び出されたコマンドの内容に応じてコンテナの起動やビルドを実行します。

このCLIによってDocker Engine APIの呼び出しをUnixソケット(/var/run/docker.sock)を介して行われます。

参考

さわって理解するDocker入門 第6回 | オブジェクトの広場

第6回の本記事では、Docker Engine の仕組みについて、クライアント・サーバーモデルの観点から説明します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です