🐳

DockerをRootlessモードで利用する

2022/07/25に公開

LinuxのDockerはDocker DesktopやRancher Desktopと違い、デフォルトではrootユーザーとしてコンテナが実行されます。
このため、コンテナ内で作ったファイルをホスト側で編集する際に頻繁にコンテナ内で

chmod +w <コンテナ内で作ったファイル>

の実行が必要になるという問題があります。

今回はこれを解消するRootlessモードの導入手順を紹介します。
基本的には公式の手順で問題ないと思いますが、ユーザー名前空間の設定手順が公式ページでは割愛されているようなので、そちらの手順を加えています。

環境はManjaro Linuxを想定していますが、Ubuntuでも基本は同じだと思います。

1. 既存のDockerデーモンを停止する

sudo systemctl disable --now docker.service docker.socket

2. rootless用のパッケージをインストールする

sudo pacman -S docker-rootless-extras shadow fuse-overlayfs

3. ユーザー名前空間を定義する

Rootlessモードにおいて肝になるユーザー名前空間の設定です。

この機能により、コンテナ内では特権を持ちつつ、ホストOS上では特権を持たないユーザが作成でき、ホストOSとコンテナの間で権限の分離ができるようになり、セキュアにコンテナ環境を提供できるようになります。
https://gihyo.jp/admin/serial/01/linux_containers/0016#sec1

sudo usermod -v 231072-296607 -w 231072-296607 $(whoami)

※マルチユーザーで運用する場合、ユーザーごとに異なる範囲を指定してください

4. dockerサービスがユーザー権限で起動するようにする

systemctl --user enable docker --now

5. dockerの実行

ユーザーごとにdocker.sockが作られるので、下記のように環境変数DOCKER_HOSTをセットします。
.zshrc等に記述すると良いでしょう。

export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock

Dockerの各種コマンドやコンテナが実行できることを確認します

docker info
docker run -it --rm alpine echo Hello, Rootless!

Discussion