Docker : 一般ユーザーで利用する2022/07/29 |
一般ユーザーでも [Docker] コマンドは利用可能です。
Docker Engine v19.03 以降で Rootless モードが実装されています。 |
|
[1] | デフォルトで、ユーザー名前空間で使用される サブ UID/GID が一般ユーザーに割り当てられます。 |
# Rootless パッケージ インストール (通常は Docker との依存関係でインストールされている) [root@dlp ~]# dnf --enablerepo=docker-ce-stable -y install docker-ce-rootless-extras # サブ UID/GID マッピング ファイルは以下 # [100000:65536] ⇒ [cent] ユーザーは コンテナー内では # 100000~165535 (100000 + 65536 - 1) の間の UID がプロセスの実行に使用される [root@dlp ~]# cat /etc/subuid cent:100000:65536 [root@dlp ~]# cat /etc/subgid cent:100000:65536 # ユーザーを新規追加すると サブ UID/GID マッピング ファイルにも自動で登録される # コンテナー内でプロセスの実行に使用される UID が各ユーザー間で重複しないように # n=0, n++ とすると # [開始 UID/GID = 100000 + (65536 * n)] # [終了 UID/GID = (開始 UID/GID) + 65536 - 1] となる [root@dlp ~]# useradd centos [root@dlp ~]# useradd redhat [root@dlp ~]# cat /etc/subgid /etc/subgid cent:100000:65536 centos:165536:65536 redhat:231072:65536 cent:100000:65536 centos:165536:65536 redhat:231072:65536 |
[2] | 一般ユーザーで [Docker] 使用可能です。 |
# 各々のユーザーで rootless モード セットアップ [cent@dlp ~]$ dockerd-rootless-setuptool.sh install --skip-iptables [INFO] Creating /home/cent/.config/systemd/user/docker.service [INFO] starting systemd service docker.service + systemctl --user start docker.service ..... ..... [INFO] Creating CLI context "rootless" Successfully created context "rootless" [INFO] Make sure the following environment variables are set (or add them to ~/.bashrc): export PATH=/usr/bin:$PATH export DOCKER_HOST=unix:///run/user/1000/docker.sock # 表示された環境変数をロード [cent@dlp ~]$ export PATH=/usr/bin:$PATH [cent@dlp ~]$ export DOCKER_HOST=unix:///run/user/1000/docker.sock
docker pull quay.io/centos/centos:stream9 [cent@dlp ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/centos/centos stream9 61674c24ebbf 33 hours ago 152MB
[cent@dlp ~]$
docker run quay.io/centos/centos:stream9 echo "run rootless containers" run rootless containers # コンテナー関連ファイルは [$HOME/.local] 配下に保存される [cent@dlp ~]$ ll ~/.local/share/docker total 4 drwx--x--x. 4 cent cent 120 Jul 29 16:18 buildkit drwx--x--x. 3 cent cent 20 Jul 29 16:18 containerd drwx--x---. 3 cent cent 78 Jul 29 16:22 containers drwx--x---. 6 cent cent 4096 Jul 29 16:22 fuse-overlayfs drwx------. 3 cent cent 28 Jul 29 16:18 image drwxr-x---. 3 cent cent 19 Jul 29 16:18 network drwx------. 4 cent cent 32 Jul 29 16:18 plugins drwx------. 2 cent cent 6 Jul 29 16:18 runtimes drwx------. 2 cent cent 6 Jul 29 16:18 swarm drwx------. 2 cent cent 6 Jul 29 16:21 tmp drwx------. 2 cent cent 6 Jul 29 16:18 trust drwx-----x. 2 cent cent 25 Jul 29 16:18 volumes # ポートマッピングについては # 一般ユーザーでは ホスト側の [1024] 未満のポートは使用不可 # [1024] 以上は使用可 [cent@dlp ~]$ docker run -t -d -p 1023:80 srv.world/centos-nginx /usr/sbin/nginx -g "daemon off;" docker: Error response from daemon: driver failed programming external connectivity on endpoint thirsty_haibt (31bd9b8058f11434e0ffc33209359f35574699caf5bc27a7e9e1b90f53095351): Error starting userland proxy: error while calling PortManager.AddPort(): cannot expose privileged port 1023, you can add 'net.ipv4.ip_unprivileged_port_start=1023' to /etc/sysctl.conf (currently 1024), or set CAP_NET_BIND_SERVICE on rootlesskit binary, or choose a larger port number (>= 1024): listen tcp 0.0.0.0:1023: bind: permission denied.[cent@dlp ~]$ docker run -t -d -p 1024:80 srv.world/centos-nginx /usr/sbin/nginx -g "daemon off;" [cent@dlp ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 015c90358f47 srv.world/centos-nginx "/usr/sbin/nginx -g …" 5 seconds ago Up 4 seconds 0.0.0.0:1024->80/tcp ecstatic_margulis |
Sponsored Link |
|