关于Docker Desktop for MacOS

如何安装

AI生成

1. 访问 [Docker官网](https://www.docker.com/products/docker-desktop) 下载适用于macOS的Docker Desktop安装包。

2. 双击下载的 `.dmg` 文件,将Docker图标拖到 `Applications` 文件夹中。

3. 打开 `Applications` 文件夹,双击 `Docker` 图标启动Docker Desktop。

4. 安装完成后,Docker Desktop会自动启动,并在菜单栏中显示Docker图标。

技术架构

https://www.jianshu.com/p/5cbbe932e0e2?v=1741598928938

如何访问宿主机

Docker Desktop 未提供直接远程访问容器虚拟主机的入口。我们可以使用nsenter方法连接访问,主要思路是我们在MacOS Terminal使用docker CLI起来一个容器,然后在容器内部运行nsenter进入容器主机命名空间。具体命令如下:

docker run --rm -it --privileged --pid=host alpine nsenter -t 1 -m -u -i -n sh

逐个参数解析

1.docker run

运行一个新的 Docker 容器。

2.--rm

容器退出后自动删除,避免占用资源。

3.-it

-i(interactive):保持容器的标准输入(stdin)打开,允许交互式操作。

-t(tty):分配一个伪终端,使 shell 交互体验更友好。

4.--privileged

让容器拥有更高的权限,包括访问宿主机的设备、内核功能等。

由于 Docker Desktop 运行在 macOS 上,它内部实际是一个 LinuxKit 虚拟机,而--privileged允许容器访问这个虚拟机的资源。

5.--pid=host

让容器共享宿主机的进程 ID (PID) 命名空间

这里的宿主机其实是Docker Desktop 内部的 LinuxKit 虚拟机,而不是 macOS 本身。

这样,容器就能访问到 LinuxKit 虚拟机的进程。

6.alpine

这是要运行的镜像,这里选择Alpine Linux,因为它体积小、启动快,适合做调试。

7.nsenter -t 1 -m -u -i -n sh

nsenter:进入另一个进程的命名空间(namespace)。

-t 1:指定要进入的目标进程PID 1(即 LinuxKit 虚拟机的 init 进程)。

-m(mount):进入它的挂载(mount)命名空间,可以访问它的文件系统。

-u(UTS):进入主机名和域名(UTS)命名空间,查看虚拟机的主机名。

-i(IPC):进入进程间通信(IPC)命名空间,可以访问共享内存、消息队列等。

-n(network):进入网络命名空间,可以查看和操作 LinuxKit 虚拟机的网络接口。

sh:在目标命名空间内启动一个 shell,让你可以交互式执行命令。

Docker CLI如何连接容器虚拟主机ContainerD?

使用UNIX socket: /var/run/Docker.sock连接,不使用TCP连接。

docker -H unix://var/run/docker.sock ps

curl --unix-socket /var/run/docker.sock http://localhost/containers/json

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容