環境
ホストOS: Ubuntu 24.04 LTS
LXDのバージョン: LXD 5.21 LTS
LXDコンテナーのセキュリティ設定
Nesting (Containers only)orsecurity.nesting: コンテナー内でのコンテナー(ネスト)の実行を許可するかどうか
Allowortrueに設定
Dockerを動かすために必要Idmap size (Containers only)orsecurity.idmap.size: 使用するIDマップのサイズ
コンテナー内のユーザ数によって設定する値が変動する
以降、標準のUbuntu 24.04イメージで説明する
デフォルトではubuntuという一般ユーザが作られているが、今回は新たな一般ユーザを作成することにする
詳しいことは省くが、Dockerに割り当てるUIDが65536個必要なため、設定変更しないとUIDが不足する
ユーザー名前空間の開始UIDは100000、そこから各ユーザに65536個割り当てるため、100000 + 65536 × ユーザ数個のUIDが必要になる
今回だと、ubuntuとrunnerユーザが存在するため、231072個の割り当てが必要になる
自分の環境では231072に設定Unique idmap (Containers only)orsecurity.idmap.isolated: 一意のIDマップを使用するかどうか
Yesortrueに設定
セキュリティが向上する
Dockerのインストール
公式ドキュメントの手順に従ってインストールしている前提で進める
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
Rootless Dockerのセットアップ
ここからの作業はLXDコンテナー内で行う
あらかじめDockerを実行したいユーザを作成しておく
1. 準備
uidmapのインストール、Rootful Dockerの無効化、systemdのユーザインスタンスを自動起動
sudo apt install uidmap
sudo systemctl disable --now containerd
sudo systemctl disable --now docker
sudo systemctl disable --now docker.socket
sudo loginctl enable-linger {ユーザID}
2. 環境変数の設定
Dockerを動かしたいユーザにログインする
ログイン後、~/.profileや~/.bashrcなどに下記内容を追記する
export XDG_RUNTIME_DIR=/run/user/{ユーザID}
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/{ユーザID}/docker.sock
3. Rootless Dockerのインストール
Dockerを動かしたいユーザにログインする
dockerd-rootless-setuptool.sh install
4. 実行テスト
docker run hello-world
ここでエラーが出なければ成功