目次
1 Dockerのインストール
2 必要なパッケージのインストール
3 ユーザーの作成
4 RootlessDockerのインストール
5 起動
はじめに
前回は自宅サーバーとcloudflare経由でSSH接続ができるようにしました。
今回はRootless dockerを使えるようにしていこうと思います。
なぜRootless?
このサーバーはwebサーバーの公開とかファイルサーバーとか色々な用途に使おうとしているため、「Aという目的のために動かしたコンテナがBという目的で動かしていた常駐プログラムに影響を与える」みたいなことは避けるべくRootlessモードを採用しました。
今回のケースには該当しませんが、複数人で使うPCでdockerを使いたい場合などもRootless dockerを使うのが良いです。
1 Dockerのインストール
すでにインストールを済ませている方は飛ばして問題ありません。
今回はDocker DesktopではなくDocker Engineのみをインストールします。
公式サイトの手順に従ってインストールします。
レポジトリを追加↓
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
インストール↓
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
以下のコマンドが問題なく実行されたらインストール成功です。
sudo docker run hello-world
2 必要なパッケージのインストール
まずは必要なパッケージをインストールします
sudo apt install uidmap
Dockerデーモンを停止します
sudo systemctl disable --now docker.service docker.socket
3 ユーザーの作成
Rootless Dockerを使う一般ユーザーを追加します。
sudo adduser {ユーザー名}
追加したユーザーにログインします。
sudo login {ユーザー名}
systemctlを有効化します。
loginctl enable-linger {ユーザー名}
補足(2023/11/11 追記)
新しく作成したユーザーは環境変数$XDG_RUNTIME_DIR
が設定されていません(少なくとも私の環境では)。
そのときは
$ id
で自身のUIDを確認し、~/.bashrc
に
export XDG_RUNTIME_DIR=/run/user/{確認したUID}
と記述した上で次のステップに進んでください。
source ~/.bashrc
で変更を適用するのを忘れずに!(自戒)
4 RootlessDockerのインストール
Rootless dockerを使用する一般ユーザーにログインして次のコマンドを実行します。
curl -fsSL https://get.docker.com/rootless | sh
表示された内容を~/.bashrc
に追記します。
例↓
export PATH=/home/{ユーザー名}/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock
5 起動
docker run hello-world
が一般ユーザー権限で実行できることを確認します。
docker run hello-world
おわりに
今回は非rootユーザーでもdockerが使えるよう、Rootless dockerをサーバーに導入しました。
次回はこのDockerを使ってwebサーバーを立ててみようと思います。
参考資料