147
85

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerにRootlessモードが入ったぞ!という話

Last updated at Posted at 2019-02-27

概要

DockerのデーモンをLinux上で実行するためには、通常はroot権限を渡す必要がありましたが、Docker Meetup TokyoのオーガナイザーをやっているNTTの須田さんによるこちらのコミットによって、Dockerをroot権限なしに実行できるようになりました。

より詳しくは、Dockerのエンジニアリングブログを御覧ください。

試してみた

Rootless dockerのインストール

  • 試した環境
    • Ubuntu 18.04
$ curl -sSL https://get.docker.com/rootless | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 54.0M  100 54.0M    0     0  9624k      0  0:00:05  0:00:05 --:--:-- 11.9M
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13.3M  100 13.3M    0     0  5584k      0  0:00:02  0:00:02 --:--:-- 5582k
# systemd not detected, dockerd daemon needs to be started manually

/home/inductor/bin/dockerd-rootless.sh --experimental --storage-driver vfs

# Docker binaries are installed in /home/inductor/bin
# WARN: dockerd is not in your current PATH or pointing to /home/inductor/bin/dockerd
# Make sure the following environment variables are set (or add them to ~/.bashrc):

export XDG_RUNTIME_DIR=/tmp/docker-1000
export PATH=/home/inductor/bin:$PATH
export PATH=$PATH:/sbin
export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock

出てきた環境変数を .bashrc などに登録しておきます。

Docker daemonの起動

Mobyのドキュメントの通りに起動してみる。

$ dockerd-rootless.sh --experimental
+ [ -w /tmp/docker-1000 ]
+ [ -w /home/inductor ]
...
...中略
...
INFO[2019-03-02T09:43:30.951521529+09:00] Daemon has completed initialization
INFO[2019-03-02T09:43:30.980047655+09:00] API listen on /tmp/docker-1000/docker.sock

ダエモンさんのInitializeが終わって、APIがListenし始めたよ!と表示されました。
Docker daemonが起動してsocketのlistenが行われているのがわかりますね!

ここからDockerを実際に動かすためには、CLIを使って起動されたDaemonとおしゃべりする必要があります。
また、何らかのシステム管理用のDaemon(systemdとか)にちゃんと設定は入れておいたほうがよさそうです(デフォだと上手く入ってくれませんでした)。

Docker CLIで以下のようにSocketを明示的に指定してあげることで、nginxのイメージをPullしてRunすることができます。

$ docker -H unix://$XDG_RUNTIME_DIR/docker.sock run -d -p 8080:80 nginx

すごい。本当にユーザー領域で動いた!

どうやって動いてるのか

基本的には、RootlessKitというOSSがベースとなっています。
GitHubの概要には

made for mainly running Docker and Kubernetes as an unprivileged user

と書かれていて、要するに、KubernetesやDockerのDaemonを特権ユーザーでなくとも動かせるようにするためのツールです。
実はこのOSSが存在するrootless-containersのOrganizationの中にはusernetesというプロジェクトもあって、こちらは、DockerではなくKuberntesをユーザー領域で動かそうというプロジェクトです。こちらも、Docker rootless modeと同じくNTTの須田さんが主に動いて開発しています。

一通り動かせるのがわかったので僕は満足したので、誰かもうちょい詳しいエントリーをお願いします(他力本願)

147
85
3

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
147
85

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?