🐳
DockerをRootlessモードで利用する
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 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