docker組件介紹

1、Docker Client and Daemon(docker egine docker 引擎)git

docker是一個客戶端工具,做用是發送 用戶的請求給 dockerdgithub

安裝路徑: /usr/bin/docker dockerd 也叫 docker daemondocker

安裝路徑: /usr/bin/dockerd架構

一句話歸納: docker和dockerd 組成了docker enginetcp

二 、Containerd(容器)工具

管理容器的生命週期(從建立容器到銷燬容器) 拉取/推送容器鏡像 存儲管理(管理鏡像及容器數據的存儲) 調用 runC 運行容器(與 runC 等容器運行時測試

一句話歸納:spa

docker對容器的管理和操做基本 都是經過 containerd 來完成的插件

2.一、 Containerd 的背景設計

      1. Docker項目日趨龐大,架構上須要 進行拆分(開源項目的思路)

      2. 能夠被Kubernetes CRI 等項目使用 (通用化)

      3. 爲普遍的行業合做打下基礎

一句話歸納:

containerd 提供核心容器服務的接口 標準,上層的容器化應用平臺將直接使 用 containerd 提供的接口。

2.二、 Containerd技術發展方向

    

      1. 簡潔的接口設計: 基於 gRPC 的 API 和 client library

      2. 完整的 OCI 支持: runtime 和 image spec

      3. 良好的容器核心功能: 健壯、穩定、高效、可移植

      4. 鬆耦合:使 image、filesystem、runtime 解耦,實現插件式的擴展和重用

      5. https://github.com/containerd/containerd

三 、Containerd-shim

它是 containerd 的組件,是容器的運 行時載體,咱們在 docker 宿主機上看 到的 shim 也正是表明着一個個經過調 用 containerd 啓動的 docker 容器。

安裝路徑: /usr/bin/docker-containerd-shim

4、 RunC

  1. RunC 是一個輕量級的工具,它是用來運行容器的,且只作這一件事。

  2. 經過runc,能夠不用經過 docker 引擎直接運行容器。

  3. runC 是標準化的產物,它根據 OCI 標準來建立和運行容器。而 OCI(Open Container Initiative)組織,旨在圍繞容器格式和運行時制定一個開放的工業化標準。

  4. RunC 做爲標準化容器運行時的一個實現,已被 docker 內置爲默認的容器運行時.

  5. https://github.com/opencontainers/runc mkdir ~/mycontainer cd ~/mycontainer mkdir rootfs docker export $(docker create busybox) | tar -C rootfs -xvf – runc spec

  docker-runc create mycontainerid

  docker-runc start mycontainerid

  docker-runc states mycontainerid

  docker-runc kill mycontainerid 9

  docker-runc delete mycontainerid

5、 容器運行過程分析

  1.Docker客戶端向 dockerd發起請求

  2.Dockerd從 Docker Hub上拉取鏡像

  3.Dockerd使用鏡像運行了一個容器併產 生了輸出

  4.docker-containerd …….

  5.Dockerd把輸出的內容返回給了 docker 客戶端

  # ps afx | grep docker -A 1

6、 爲何沒有 docker-runc

 仍是由於 docker-containerd-shim

  1. 容許容器運行時(即 runC)在啓動容器以後退出,簡單說就是沒必要爲每一個容器一直運行 一個容器運行時(runC)

   2. 即便在 containerd 和 dockerd 都掛掉的狀況下,容器的標準 IO 和其它的文件描述 符也都是可用的

  3. 向 containerd 報告容器的退出狀態

 

 

 

經過tcp方式訪問dockerd(不建議)

 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

測試: # docker -H tcp://127.0.0.1:2375 info

相關文章
相關標籤/搜索