よくある質問と回答 Mac 版

Docker.app とは何ですか?

Docker.app は Mac 上の Docker Desktop です。Docker クライアントと Docker Engine が同梱されています。 Docker.app は macOS Hypervisor.framework でコンテナを実行します。

HyperKit とは何ですか?

HyperKit はmacOS の Hypervisor.framerowk 上に構築されたハイパーバイザです。これは他の依存関係なく、ユーザ空間全体を実行できます。

私たちが HyperKit を採用するのは、 Oracle VirtualBox や VMWare Fusion のような他の仮想マシンプロダクトの必要性を無くすためです。

HyperKit の利点は何ですか?

HyperKit は VirtualBox や VMware fusion よりも薄く、Mac 上で Docker ワークロード向けにカスタマイズしたバージョンだからです。

アプリを終了後も、どうして com.docker.vmnetd が動いているのですか?

特権ヘルパー・プロセス com.docker.vmnetdlaunched によって開始され、バックグラウンドで動作します。このプロセスは Docker.app が接続していなければリソースを消費しないため、無視しても構いません。

Docker Desktop は Linux コンテナとイメージをどこに保存しますか?

Docker Desktop は Linux コンテナとイメージを、 Mac ファイルシステム内で、1つの大きな「ディスクイメージ」ファイルに保存します。これは、通常 /var/lib/docker ディレクトリにコンテナとイメージを保存する Linux 上の Docker とは異なります。

ディスクイメージのファイルはどこですか?

ディスクイメージファイルを探すには、 Docker ダッシュボードから Preferences を選び、 Resources タブから Advanced を探します。

Advanced タブにはディスクイメージの場所を表示します。また、ディスクイメージの最大容量と、ディスクイメージが使用している実際の容量を表示します。他のツールでは、実際のファイル容量ではなく、最大ファイル容量としてディスク使用量が表示される場合があるので、ご注意ください。

ファイルが大きすぎる場合は、どうしたらいいでしょうか?

ディスクイメージが大きすぎる場合、次のことができます:

  • より大きなドライブにディスクイメージを移動する

  • 不要なコンテナとイメージを削除する

  • ファイルに割り当て可能な最大容量を減らす

大きなドライブにファイルを移動する方法は?

ディスクイメージファイルを別の場所に移動するには、次のように実行します:

  1. Preferences を選び、 Resources タブから Advanced を選ぶ

  2. Disk image location セクション内で、 Browse をクリックし、ディスクイメージの新しい場所を選ぶ

  3. 変更を反映するには、 Apply & Restart をクリック

Finder を使ってファイルを直接移動しないでください。移動してしまうと、 Docker Desktop がファイルを追跡できなくなります。

不要なコンテナとイメージをどうやって削除しますか?

不要なコンテナとイメージを持っているかどうかを調べます。クライアントとデーモン API がバージョン 1.25 以上で実行している場合( docker version コマンドを使い、クライアントとデーモン API のバージョンを確認できます)、次のように実行して詳細な容量の使用情報を表示できます:

$ docker system df -v

または、イメージ一覧を表示するには、次のように実行します:

$ docker image ls

それから、コンテナ一覧を表示するため、次のように実行します:

$ docker container ls -a

不要なオブジェクトがたくさんある場合、次のコマンドを実行します:

$ docker system prune

このコマンドは、停止中のコンテナ、使われていないネットワーク、宙吊りイメージと構築キャッシュを全て削除します。

ホストが依存しているディスクイメージのファイル形式によっては、容量の確保に数分ほど必要な場合があります。

  • ファイル名が Docker.raw の場合:ホスト上の空きは数秒以内に確保できる

  • ファイル名が Docker.qcow2 の場合:バックグラウンドのプロセスとして容量を確保するため、数分かかる

イメージが削除された時にのみ、容量が解放されます。実行しているコンテナ内でファイルを削除しても、自動的に空き容量として解放されません。容量確保をいつでも行いたい場合は、次のコマンドを実行します。

$ docker run --privileged --pid=host docker/desktop-reclaim-space

ツールでは、実際のファイル容量ではなく、最大ファイル容量としてディスク使用量が表示される場合があるので、ご注意ください。ホスト上での実際の容量を確認するには、ターミナルから次のように実行します。

$ cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
$ ls -klsh Docker.raw
2333548 -rw-r--r--@ 1 username  staff    64G Dec 13 17:42 Docker.raw

この例では、ディスクの最大容量は 64 GB ですが、ディスクの実際の容量は 2333548 KB です。

ファイルの最大容量を減らすには、どうしたらいいでしょうか?

ディスクイメージファイルの最大容量を減らすには、次のようにします。

  1. Preferences を選び、 Resources タブから Advanced を選ぶ

  2. Disk image location セクション内で、 ディスクイメージの最大容量を変更できます。スライダーを下限に調整します。

  3. 変更を反映するには、 Apply & Restart をクリック

最大容量を減らす場合は、現在のディスクイメージは削除されます。つまり、全てのコンテナとディレクトリは失われます。

TLS 証明書をどのようにして追加しますか?

Docker デーモンが、レジストリ・サーバ証明書と クライアント証明書 の検証用に、信頼できる 認証局(CA; Certificate Authorities) を追加してレジストリを認証できます。

カスタム CA 証明書の追加(サーバ側)

全ての信頼できうる(ルート及び中間)証明局(CA)をサポートしています。Docker Desktop は Mac キーチェーン上にある全ての信頼できうる証明局の情報に基づき、全てのユーザが信頼する CAの証明書バンドルを作成します。また、Moby の信頼できる証明書にも適用します。そのため、エンタープライズ SSL 証明書がホスト上のユーザによって信頼されている場合は、Docker Desktop からも信頼されます。

任意の、自己証明した証明書を主導で追加するには、macOS キーチェン上に証明書を追加し、Docker Desktop が扱えるようにします。以下は例です:

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt

あるいは、(全てのユーザに対してではなく)自身のローカルキーチェーンのみ追加したい場合は、代わりにこちらのコマンドを実行します。

$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt

また、 認証情報のディレクトリ構造 もご覧ください。

注釈

キーチェーンに対する何らかの変更をするか、 ~/.docker/certs.d ディレクトリ内の変更を有効にするには、 Docker Desktop の再起動が必要です。この設定方法に関する完全な説明は Adding Self-signed Registry Certs to Docker & Docker Desktop for Mac のブログ投稿をご覧ください。

クライアント証明書の追加

自分のクライアント証明書を ~/.docker/certs.d/<MyRegistry>:<Port>/client.cert~/.docker/certs.d/<MyRegistry>:<Port>/client.key に追加できます。

Docker Desktop ・アプリケーションの開始時に、 Mac システム上の ~/.docker/certs.d フォルダを Moby 上(Docker Desktop が稼働する xhyve 上の仮想マシン)の /etc/docker/certs.d ディレクトリにコピーします。

ヒント

  • キーチェーンに対する何らかの変更をするか、 ~/.docker/certs.d ディレクトリ内の変更を有効にするには、 Docker Desktop の再起動が必要です。

  • レジストリは insecure (安全ではない)レジストリとして表示されません( mac-docker-engine をご覧ください )。Docker Desktop は安全ではないレジストリにある証明書を無視します。そして、クライアント証明書も送信しません。 docker run のようなレジストリから取得するコマンドは、コマンドライン上でもレジストリでもエラーになるメッセージが出ます。

認証情報のディレクトリ構造

次のディレクトリ構造の場合、Mac OS システムログインのため、CA 証明書を手動で追加する必要はありません。

/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
   ├── ca.crt
   ├── client.cert
   └── client.key

以下は、カスタム証明書を設定例と説明を追加したものです:

/etc/docker/certs.d/        <-- Certificate directory
└── localhost:5000          <-- Hostname:port
   ├── client.cert          <-- Client certificate
   ├── client.key           <-- Client key
   └── ca.crt               <-- Certificate authority that signed
                                the registry certificate

あるいは、CA 証明書が自分のキーチェンにあれば、次のようなディレクトリ構造にもできます。

/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
    ├── client.cert
    └── client.key

認証用にクライアント TLS 証明書を設定する方法を学ぶには、Docker エンジンの記事 :doc:`証明書でリポジトリ・クライアントを確認する </engine/security/certificates>`_ を御覧ください。

どうやってシェル補完をインストールしますか?

Bash

Bash は 補完を内部でサポートしています 。Docker コマンドで補完できるようにするには、各ファイルを自分の bash_completion.d/ ディレクトリにコピーするかシンボリックリンクを作成します。たとえば、 Homebrew を経由して bash をインストールした場合は:

etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.bash-completion $(brew --prefix)/etc/bash_completion.d/docker
ln -s $etc/docker-compose.bash-completion $(brew --prefix)/etc/bash_completion.d/docker-compose

以下を自分の ~/.bash_profile に追加します:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

あるいは

if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi

Zsh

Zsh では、 補完システム の管理が必要です。Docker コマンドに対する補完を有効化するには、自分の Zsh site-functions/ ディレクトリに各ファイルをコピーするか symlink する必要があります。以下は Homebrew を経由して Zsh をインストールします:

etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose

Fish-Shell

Fish-shell もまた、タブ補完による 補完システム をサポートしています。Docker コマンドに対する補完を有効化するには、各ファイルを自分の Fish-shell の completions ディレクトリにコピーするか symlink する必要があります。

completions ディレクトリを作成します:

mkdir -p ~/.config/fish/completions

次に docker から fish completions を追加します。

ln -shi /Applications/Docker.app/Contents/Resources/etc/docker.fish-completion ~/.config/fish/completions/docker.fish
ln -shi /Applications/Docker.app/Contents/Resources/etc/docker-compose.fish-completion ~/.config/fish/completions/docker-compose.fish

参考

Frequently asked questions for Mac

https://docs.docker.com/desktop/faqs/macfaqs/