LoginSignup
2
6

自宅サーバーでRootless dockerを使えるようにした話

Last updated at Posted at 2023-10-21

目次

はじめに
なぜRootless?

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に追記します。

例↓

~/.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サーバーを立ててみようと思います。

参考資料

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6