Docker Desktop for Mac 常见问题解答
什么是 HyperKit?
HyperKit 是一个构建在 macOS Hypervisor.framework 之上的虚拟机管理器(hypervisor)。它完全在用户空间中运行,没有其他依赖项。
Docker 使用 HyperKit 来消除对其他 VM 产品(如 Oracle VirtualBox 或 VMware Fusion)的需求。
HyperKit 有什么优势?
HyperKit 比 VirtualBox 和 VMware Fusion 更轻量级,并且包含的版本是针对 Mac 上的 Docker 工作负载定制的。
Docker Desktop 将 Linux 容器和镜像存储在哪里?
Docker Desktop 将 Linux 容器和镜像存储在 Mac 文件系统中的一个单独的大型“磁盘镜像”文件中。这与 Linux 上的 Docker 不同,后者通常将容器和镜像存储在 /var/lib/docker 目录中。
磁盘镜像文件在哪里?
要定位磁盘镜像文件,请从 Docker Desktop 仪表板中选择 Settings(设置),然后从 Resources(资源)选项卡中选择 Advanced(高级)。
Advanced(高级)选项卡会显示磁盘镜像的位置。它还显示磁盘镜像的最大大小以及磁盘镜像实际占用的空间。请注意,其他工具可能会显示文件的最大文件大小,而不是实际文件大小。
如果文件太大怎么办?
如果磁盘镜像文件太大,您可以:
- 将其移动到更大的驱动器
- 删除不必要的容器和镜像
- 减小文件的最大允许大小
如何将文件移动到更大的驱动器?
要将磁盘镜像文件移动到其他位置:
- 选择 Settings(设置),然后从 Resources(资源)选项卡中选择 Advanced(高级)。
- 在 Disk image location(磁盘镜像位置)部分,选择 Browse(浏览)并为磁盘镜像选择一个新位置。
- 选择 Apply(应用)以使更改生效。
Important不要直接在 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
在此示例中,磁盘的实际大小为 2333548 KB,而磁盘的最大大小为 64 GB。
如何减小文件的最大大小?
要减小磁盘镜像文件的最大大小:
- 选择 Settings(设置),然后从 Resources(资源)选项卡中选择 Advanced(高级)。
- Disk image size(磁盘镜像大小)部分包含一个滑块,允许您更改磁盘镜像的最大大小。调整滑块以设置较低的限制。
- 选择 Apply(应用)。
当您减小最大大小时,当前的磁盘镜像文件将被删除,因此,所有容器和镜像都会丢失。
如何添加 TLS 证书?
您可以将受信任的证书颁发机构 (CA)(用于验证注册表服务器证书)和客户端证书(用于向注册表进行身份验证)添加到您的 Docker 守护进程中。
添加自定义 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
另请参阅证书的目录结构。
Note您需要在对钥匙串或
~/.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 目录中。
Note
- 您需要在对钥匙串或
~/.docker/certs.d目录进行任何更改后重新启动 Docker Desktop,以使更改生效。- 注册表不能被列为 不安全注册表。Docker Desktop 会忽略不安全注册下列出的证书,并且不会发送客户端证书。尝试从注册表拉取的命令(如
docker run)会在命令行以及注册表上产生错误消息。
证书的目录结构
如果您有以下目录结构,则无需手动将 CA 证书添加到您的 Mac OS 系统登录中:
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
├── ca.crt
├── client.cert
└── client.key以下进一步说明并解释了包含自定义证书的配置:
/etc/docker/certs.d/ <-- 证书目录
└── localhost:5000 <-- 主机名:端口
├── client.cert <-- 客户端证书
├── client.key <-- 客户端密钥
└── ca.crt <-- 签署注册表证书的证书颁发机构您也可以拥有以下目录结构,只要 CA 证书也在您的钥匙串中即可。
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
├── client.cert
└── client.key要了解有关如何为注册表安装 CA 根证书以及如何设置客户端 TLS 证书以进行验证的更多信息,请参阅 Docker Engine 主题中的 使用证书验证仓库客户端。