如何安裝
AI生成
1. 訪問(wèn) [Docker官網(wǎng)](https://www.docker.com/products/docker-desktop) 下載適用于macOS的Docker Desktop安裝包。
2. 雙擊下載的 `.dmg` 文件,將Docker圖標(biāo)拖到 `Applications` 文件夾中。
3. 打開(kāi) `Applications` 文件夾,雙擊 `Docker` 圖標(biāo)啟動(dòng)Docker Desktop。
4. 安裝完成后,Docker Desktop會(huì)自動(dòng)啟動(dòng),并在菜單欄中顯示Docker圖標(biāo)。
技術(shù)架構(gòu)
http://www.itdecent.cn/p/5cbbe932e0e2?v=1741598928938
如何訪問(wèn)宿主機(jī)
Docker Desktop 未提供直接遠(yuǎn)程訪問(wèn)容器虛擬主機(jī)的入口。我們可以使用nsenter方法連接訪問(wèn),主要思路是我們?cè)贛acOS Terminal使用docker CLI起來(lái)一個(gè)容器,然后在容器內(nèi)部運(yùn)行nsenter進(jìn)入容器主機(jī)命名空間。具體命令如下:
docker run --rm -it --privileged --pid=host alpine nsenter -t 1 -m -u -i -n sh
逐個(gè)參數(shù)解析
1.docker run
運(yùn)行一個(gè)新的 Docker 容器。
2.--rm
容器退出后自動(dòng)刪除,避免占用資源。
3.-it
-i(interactive):保持容器的標(biāo)準(zhǔn)輸入(stdin)打開(kāi),允許交互式操作。
-t(tty):分配一個(gè)偽終端,使 shell 交互體驗(yàn)更友好。
4.--privileged
讓容器擁有更高的權(quán)限,包括訪問(wèn)宿主機(jī)的設(shè)備、內(nèi)核功能等。
由于 Docker Desktop 運(yùn)行在 macOS 上,它內(nèi)部實(shí)際是一個(gè) LinuxKit 虛擬機(jī),而--privileged允許容器訪問(wèn)這個(gè)虛擬機(jī)的資源。
5.--pid=host
讓容器共享宿主機(jī)的進(jìn)程 ID (PID) 命名空間。
這里的宿主機(jī)其實(shí)是Docker Desktop 內(nèi)部的 LinuxKit 虛擬機(jī),而不是 macOS 本身。
這樣,容器就能訪問(wèn)到 LinuxKit 虛擬機(jī)的進(jìn)程。
6.alpine
這是要運(yùn)行的鏡像,這里選擇Alpine Linux,因?yàn)樗w積小、啟動(dòng)快,適合做調(diào)試。
7.nsenter -t 1 -m -u -i -n sh
nsenter:進(jìn)入另一個(gè)進(jìn)程的命名空間(namespace)。
-t 1:指定要進(jìn)入的目標(biāo)進(jìn)程PID 1(即 LinuxKit 虛擬機(jī)的 init 進(jìn)程)。
-m(mount):進(jìn)入它的掛載(mount)命名空間,可以訪問(wèn)它的文件系統(tǒng)。
-u(UTS):進(jìn)入主機(jī)名和域名(UTS)命名空間,查看虛擬機(jī)的主機(jī)名。
-i(IPC):進(jìn)入進(jìn)程間通信(IPC)命名空間,可以訪問(wèn)共享內(nèi)存、消息隊(duì)列等。
-n(network):進(jìn)入網(wǎng)絡(luò)命名空間,可以查看和操作 LinuxKit 虛擬機(jī)的網(wǎng)絡(luò)接口。
sh:在目標(biāo)命名空間內(nèi)啟動(dòng)一個(gè) shell,讓你可以交互式執(zhí)行命令。
Docker CLI如何連接容器虛擬主機(jī)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