zoukankan      html  css  js  c++  java
  • docker进程

    查看docker版本及进程树

    [root@web1 ~]# yum -y install psmisc

    查看docker版本信息

    [root@web1 ~]# docker version
    Client: Docker Engine - Community
     Version:           20.10.7
     API version:       1.41
     Go version:        go1.13.15
     Git commit:        f0df350
     Built:             Wed Jun  2 11:58:10 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true

    查看宿主机进程树

    [root@web1 ~]# pstree -p 1
    systemd(1)─┬─NetworkManager(525)─┬─{NetworkManager}(543)
               │                     └─{NetworkManager}(545)
               ├─agetty(540)
               ├─auditd(39733)───{auditd}(39734)
               ├─chronyd(515)
               ├─containerd(39773)─┬─{containerd}(39777)
               │                   ├─{containerd}(39778)
               │                   ├─{containerd}(39779)
               │                   ├─{containerd}(39780)
               │                   ├─{containerd}(39781)
               │                   ├─{containerd}(39782)
               │                   ├─{containerd}(39785)
               │                   └─{containerd}(39795)
               ├─crond(534)
               ├─dbus-daemon(511)───{dbus-daemon}(523)
               ├─dnsmasq(28219)───dnsmasq(28220)
               ├─dockerd(39784)─┬─{dockerd}(39786)
               │                ├─{dockerd}(39787)
               │                ├─{dockerd}(39788)
               │                ├─{dockerd}(39789)
               │                ├─{dockerd}(39790)
               │                ├─{dockerd}(39791)
               │                └─{dockerd}(39792)
               ├─lvmetad(24148)

    18.06版本之前

    [root@localhost ~]# pstree -p 1
    systemd(1)─┬─NetworkManager(527)─┬─{NetworkManager}(544)
               │                     └─{NetworkManager}(546)
               ├─agetty(543)
               ├─auditd(8213)───{auditd}(8214)
               ├─chronyd(518)
               ├─crond(535)
               ├─dbus-daemon(513)───{dbus-daemon}(525)
               ├─dockerd(8241)─┬─docker-containe(8247)─┬─{docker-containe}(8248)
               │               │                       ├─{docker-containe}(8249)
               │               │                       ├─{docker-containe}(8250)
               │               │                       ├─{docker-containe}(8252)
               │               │                       ├─{docker-containe}(8253)
               │               │                       ├─{docker-containe}(8254)
               │               │                       └─{docker-containe}(8255)
               │               ├─{dockerd}(8242)
               │               ├─{dockerd}(8243)
               │               ├─{dockerd}(8244)
               │               ├─{dockerd}(8245)
               │               ├─{dockerd}(8246)
               │               ├─{dockerd}(8256)
               │               ├─{dockerd}(8258)
               │               └─{dockerd}(8259)

     docker的进程关系

    [root@web1 ~]# ps -ef|egrep "docker|container"
    root      39773      1  0 04:31 ?        00:00:10 /usr/bin/containerd
    root      39784      1  0 04:31 ?        00:00:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    root      45191  39784  0 05:56 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 49153 -container-ip 172.17.0.2 -container-port 80
    root      45195  39784  0 05:56 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 49153 -container-ip 172.17.0.2 -container-port 80
    root      45206      1  0 05:56 ?        00:00:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 38c480501902a1491c2d734481737f0c2655f885854235390a6447a0d2f6b404 -address /run/containerd/containerd.sock

      主要有以下4个进程

    进程名 作用
    dockerd(即daemon)
    被client直接访问,其父进程为宿主机的systemd守护进程。 
    daemon 的主要功能包括镜像管理、镜像构建、 REST API、身份验证、安全、核心网络以及编排。
    docker-proxy
    实现容器通信,其父进程为dockerd 
    containerd
    被dockerd进程调用以实现与runc交互。由runc创建容器 
    containerd-shim
    真正运行容器的载体,其父进程为containerd。实现无daemon容器的工具

    (1)保持所有 STDIN 和 STDOUT 流是开启状态,从而当 daemon 重启的时候,容器不会因为管道(pipe)的关闭而终止。

    (2)将容器的退出状态反馈给 daemon

     


    通信流程

    • docker通过grpc和containerd模块通信(runc)交换,dockerd和containerd通信的socker文件:/run/containerd/containerd.sock
    • containerd在dockerd启动时被启动,然后containerd启动grpc请求监听,containerd处理grpc请求,根据请求做相应动作。
    • 若是创建容器,containerd拉起一个container-shim容器进程,并进行相应的创建操作。创建后的容器为runc的子进程,启动完毕后,runc退出。当runc退出后,containerd-shim进程就是容器的父进程
    • container-shim被拉起后,start/exec/create拉起runC进程,通过exit、control文件和containerd通信,通过父子进程关系和SIGCHLD(信号)监控容器中进程状态。

    在整个容器生命周期中,containerd通过epoll监控容器文件,监控容器事件。

    容器从创建到启动的过程如下图:

  • 相关阅读:
    Django框架介绍
    CSS基础
    BOM与DOM操作
    JavaScript
    PHP Socket编程 之 fsockopen链接https时OpenSSL错误
    PHP Socket编程 之 深入解析fsockopen与pfsockopen的区别
    PHP Socket编程 之 使用fsockopen伪造IP
    PHP Socket编程 之 利用 fsockopen() 函数开放端口扫描器的实例
    PHP Socket编程 之 fsockopen指定ip获取远程数据 及 301自动跳转
    PHP Socket编程 之 抓取数据遇到Transfer-Encoding chunked
  • 原文地址:https://www.cnblogs.com/zh-dream/p/14998967.html
Copyright © 2011-2022 走看看