<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker 組件基本介紹

          共 2996字,需瀏覽 6分鐘

           ·

          2021-01-06 15:41

          Docker Cli

          供用戶使用的命令行工具,負(fù)責(zé)請(qǐng)求 docker API 與 dockerd 交互,使得用戶可以便捷友好的操作 docker。

          Dockerd

          監(jiān)聽 Docker API 請(qǐng)求,通過(guò) containerd 管理 container 生命周期。

          dockerd 通過(guò) unix、tcp、fd 三種類型方式來(lái)接收 API 請(qǐng)求。默認(rèn)的 unix socket 創(chuàng)建在 /var/run/docker.sock,啟動(dòng) dockerd 需要 root 權(quán)限或者 docker group 權(quán)限。

          dockerd 在啟動(dòng)的時(shí)候會(huì)拉起 containerd,并與 containerd 保持通信。

          $?ps?aux?|?grep?dockerd

          /usr/bin/dockerd?-H?fd://?--containerd=/run/containerd/containerd.sock

          Containerd

          containerd 的主要職責(zé)是管理容器的生命周期,此外它還做:

          1. 鏡像的 pull & push
          2. 管理 storage
          3. 運(yùn)行容器的時(shí)候通過(guò) runc,并附帶上合適的參數(shù)
          4. 管理網(wǎng)絡(luò)

          containerd 包含一個(gè)暴露 gRPC API 的 daemon 服務(wù),這些 API 比較底層,為了被更好層調(diào)用,或者基于此做擴(kuò)展。Docker 有很好的分層機(jī)制,containerd 不會(huì)直接被用戶使用, 自己也是通過(guò) runc 去運(yùn)行容器。

          containerd-architecture

          containerd 擁有很強(qiáng)的適配性,其已是事實(shí)上的工業(yè)標(biāo)準(zhǔn)。containerd 通過(guò) UNIX socket 對(duì)外暴露 gRPC API 。通過(guò) containerd 的啟動(dòng)命令,可以很輕易的找到 sokcet 文件的具體位置。

          $?ps?aux?|?grep?containerd

          root?????19513??0.0??4.9?634988?93836??????????Ssl???2020???0:20?/usr/bin/dockerd?-H?fd://?--containerd=/run/containerd/containerd.sock

          RunC

          /usr/bin/docker-runc 可以視作 containerd 的一部分,它是一個(gè)運(yùn)行遵從 OCI 標(biāo)準(zhǔn)容器的二進(jìn)制工具。容器鏡像通過(guò) OCI 標(biāo)準(zhǔn)的格式打包,通常包括一個(gè) config.json 文件和系統(tǒng)根目錄。

          $?tree?-L?2?.

          .
          ├──?config.json
          └──?rootfs
          ????├──?bin
          ????├──?boot
          ????├──?dev
          ????├──?docker-entrypoint.d
          ????├──?docker-entrypoint.sh
          ????├──?etc
          ????├──?home
          ????├──?lib
          ????├──?lib64
          ????├──?media
          ????├──?mnt
          ????├──?opt
          ????├──?proc
          ????├──?root
          ????├──?run
          ????├──?sbin
          ????├──?srv
          ????├──?sys
          ????├──?tmp
          ????├──?usr
          ????└──?var

          21?directories,?2?files

          config.json 文件具體都記錄了點(diǎn)什么呢?主要字段包括:

          1. ociVersion 遵從的 OCI 版本
          2. mounts 掛載信息
          3. linux 需要做隔離的 namespace
          4. ...

          containerd-shim

          containerd-shim 的存在使得 container 可以脫離 containerd 獨(dú)立運(yùn)行。(默認(rèn)的,停掉 dockerd,container 也停止了,但可以通過(guò) daemon.json 配置實(shí)現(xiàn) dockerd 停掉后,container 照常運(yùn)行。)

          作為 container 的父進(jìn)程,container-shim 主要負(fù)責(zé)如下職責(zé):

          1. 使得 runc 運(yùn)行完 container 后可以退出,無(wú)需為了一個(gè) container 開啟一個(gè) runtime 常駐進(jìn)程
          2. 保持容器的 stdio 開啟狀態(tài),不至于容器寫 stdio 后收到 SIGPIPE 而退出
          3. 把容器的 exit status 報(bào)告給 containerd

          這些 docker 組件是如何協(xié)同工作的?

          當(dāng)我們啟動(dòng) docker 后,dockerd 會(huì)默認(rèn)拉起 containerd

          $?ps?fxa?|?grep?docker?-A?3

          52660??????????Ssl????0:01?/usr/bin/dockerd
          52666??????????Ssl????0:01??\_?docker-containerd?--config?/var/run/docker/containerd/containerd.toml

          假使我們運(yùn)行一個(gè) container ,這時(shí)就會(huì)看到 containerd-shim

          $?docker?run?-d?alpine?sleep?60
          643b5259637ced4c0c41a830034ebfe411aa1bdfac23b1c1f57926d3a9e552f0

          $?ps?fxa?|?grep?docker?-A?3

          52660??????????Ssl????0:01?/usr/bin/dockerd
          52666??????????Ssl????0:01??\_?docker-containerd?--config?/var/run/docker/containerd/containerd.toml
          54038??????????Sl?????0:00??????\_?docker-containerd-shim?-namespace?moby?-workdir?/var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/643b5259637ced4c0c41a830034ebfe411aa1bdfac23b1c1f57926d3a9e552f0?-address?/var/run/docker/containerd/docker-containerd.sock?-containerd-binary?/usr/bin/docker-containerd?-runtime-root?/var/run/docker/runtime-runc
          54052??????????Ss?????0:00??????????\_?sleep?60

          調(diào)用順序是 dockerd --> containerd --> container-shim --> "sleep 60"

          原文鏈接:https://github.com/Wang-Kai/cherish-today/issues/145


          ?點(diǎn)擊屏末?|??|?即刻學(xué)習(xí)

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  手机欧美在线 | 亚洲成人色色 | 97超碰精品 | 日本女人在线视频 | 欧美中文网 |