こんばんは。3点あるうち、1、2についてコメントさせていただきます。
間違いもあるかと思いますが、ご容赦くださいませ。
Docker for Macは、実際はいろいろなツールが組み合わさって提供されています。
ちょっとわかりにくいかもしれませんが、公式サイトのこちらを読まれるといいと思います。
1. dockerコマンドの実行権限について
Docker for Macの場合は、dockerコマンドはMac上に直にインストールされています。
ls -lF
でコマンドの情報をチェックすると、シンボリックリンクで/Applications/Docker.app/Contents/Resources/bin/
以下に実際のコマンドが格納されているのがわかります。
また、実行権限は rwxr-xr-x 755で、本人は読み書き実行、グループは読み&実行、その他のユーザも読み&実行可能になっています。
source:bash
1% ls -lF /usr/local/bin/docker
2lrwxr-xr-x 1 ユーザ名 staff 54 9 6 2018 /usr/local/bin/docker@ -> /Applications/Docker.app/Contents/Resources/bin/docker
3% ls -la /Applications/Docker.app/Contents/Resources/bin/docker
4-rwxr-xr-x 1 ユーザ名 admin 60079680 5 8 00:31 /Applications/Docker.app/Contents/Resources/bin/docker
Docker for Macをインストールした時から,すでにsudoをつけずにdockerコマンドを使えました
とありますが、Docker for Macの場合はインストーラーがセットアップ時にこのように権限を設定しているので、結果的にrootにならずともコマンドが使えるようになっています。
これは、「Mac上で簡単にDocker環境を利用する」という利便性のためにそうなっているのだと思います。
一方で、CentOSやUbuntuといったLinuxマシンでは、yumやaptのようなパッケージでインストールしても、デフォルトではrootでしかdockerコマンドが実行できないようになっています。
sudoするか、dockerコマンドのパーミッションを確認し、グループに実行権限が付いていれば、そのグループにdockerコマンドを利用させたいユーザを所属させる...という作業を行います。
2. dockerdについて
少し理解が間違っている点あるかと思いますが、これも参照されているドキュメントが前提としている環境と、Docker for Macとでは少し違いますので、そのあたりについて書いてみます。
dockerdは、Dockerの機能を実現する一番大事な部分です。
イメージからコンテナを管理する、起動する、ボリュームを割り当てるといったコアの部分になります。
dockerdは、コマンドで指示があるまでは、待機状態になって起動しているプロセスです。(デーモンというものです)
dockerコマンドで司令を出す --> dockerd がコマンドを受け付けて処理を実施し結果を返す、という流れです。
さて、このdockerdですが、Docker for Macの場合は、Mac上に直に起動しているわけではありません。
Docker for Macでは、HyperKit
という軽量の仮装化ツールを使って、Docker用の仮想マシンを内部で起動させています。
この「仮想マシンの中」で、dockerdが起動しています。
結果的に、Macからのpsコマンドでは、直接dockerdを見つけることができません。
dockerコマンドでHyperKitの中のdockerdにAPI経由で司令を出す --> dockerdockerd がコマンドを受け付けて処理を実施し結果を返す
といった流れになります。
なお、Docker用の仮想マシンにアクセスする場合は、
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
とすると、中に入れます。
この仮想マシンの中では、dockerdがrootで起動されているのが分かります。
docker-desktop:~# ps -elf | grep dockerd
1677 root 0:18 /usr/local/bin/dockerd -H unix:///var/run/docker.sock --config-file /run/config/docker/daemon.json --swarm-default-advertise-addr=eth0 --userland-proxy-path /usr/bin/vpnkit-expose-port
2724 root 0:00 grep dockerd
docker-desktop:~# uname -a
Linux docker-desktop 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 Linux
docker-desktop:~#
抜ける時は、 Ctrl-A k で。
追記:userns-remap の件
"userns-remap":"default"
でユーザ名前空間というものを使えるようなのですが,Docker for Macでどう適用するか教えてもらえないでしょうか?
この機能、あまり詳しくないのですが、せっかくですので試してみました。
以下のようにDaemon -> Advanced からJSONでuserns-remapの設定を追加して、Apply & Restartしてみたところ、起動に失敗しました。
質問者様も失敗した、とのことですが、最終的には工場出荷状態に戻しましたでしょうか?
json
1{
2 "debug" : true,
3 "experimental" : true,
4 "userns-remap" : "default"
5}
失敗の理由
以下は、回答というより確認してみた結果です。求めている答えとは違うかもしれませんが、これもやはり「Docker for Macがそのような設定になっている」ということのようです。
userns-remapの設定について、日本語のドキュメントを見てみました。
"userns-remap":"default"
と設定すると、
Docker は dockermap というユーザ名とグループ名が存在しているかどうか確認し、無ければ作成します。
と書いてありますね。
上記に書いたとおり、実際の処理はMac上に直接ではなく仮想マシン内なので、screen ... で中に入って確認してみます。また、仮想マシン内で、ユーザの登録情報を見てみると、rootだけになっています。
bash
1docker-desktop:~# cat /etc/passwd
2root:x:0:0:root:/root:/bin/sh
dockermapというユーザやグループは存在しないので、では、「先に作っておこうかな」と考えて、adduserを実行してみると、こんなエラーになります。
bash
1docker-desktop:~# adduser dockermap
2adduser: /etc/passwd: Read-only file system
実のところ、このDocker for Mac (Docker Desktop for Mac)の利用する仮想マシンは、軽量Linuxマシンで、かつ、一部のファイルシステムはRead Onlyになって起動している状態です。
bash
1# mountコマンドを実行、Read Onlyのファイルシステムをgrepしてみる
2
3docker-desktop:~# mount | grep '(ro'
4/dev/sr0 on / type iso9660 (ro,relatime)
5/dev/sr2 on /containers/services/docker type iso9660 (ro,relatime)
/ (rootパーティション) がRead Onlyになっており、ユーザ情報やOSの設定情報が入った /etc 以下もRead Onlyなので、結局ユーザ追加のために/etc/passwdなどに書き込みしようとすると、エラーになってしまいます。
ちなみに、あまり意味はないかもしれませんが、"userns-remap":"default"
ではなく、"userns-remap":"root"
として、唯一存在しているuser: rootを指定してRestartすると、エラーにはなりません。
結局どうするのがいいの?使い分けは?
ここから先は個人の考えとか印象なので、参考までに。
Docker Desktop for Macは、GUIや便利ツールも含めて簡単にDocker環境を構築して検証するためのもの、と思ったほうがよさそうです。
また、Dockerホスト専用の軽量OSは、コンテナを格納する領域以外の大部分が読み込み専用となっているものが多いです。必要な機能はコンテナの起動で実現するため、ベースOS部分には変更を加える必要が無い、という前提でそうなっていると思います。
ある程度自由にパッケージを追加したり、ホストOS側でもDocker以外の何かを動かすことが前提の環境なら、複数ユーザがログインしたり複数サービスが起動したり、ファイルシステムへの書き込みが可能だったりということで、結果的に気をつけないといけない、ということは間違いないかと思っています。
もし、そういった点に注意して環境を作ってみたい、サーバを構築したいということであれば、Docker for Macではなく、実際のCentOSやUbuuntuなどのサーバを使うのがいいと思います。
また、Mac上にVMWareを入れて、そこでCentOSを立てて試す、というところまで実施すれば良いのかなと思います。
いろいろ分かっていない点もありますので、他の皆さんのコメントもあれば、ぜひ。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/13 11:29
2019/05/14 01:10
2019/05/14 11:49
退会済みユーザー
2019/05/14 13:52
2019/05/17 00:33