Docker Engine(Docker引擎)是Docker的核心部分,使用的是客户端-服务器(C/S)架构模式,其主要组成部分如下图所示。

从上图中可以看出,Docker Engine中包含了三个核心组件(docker CLI、REST API和docker daemon),这三个组件的具体说明如下。

● docker CLI(command line interface):表示Docker命令行接口,开发者可以在命令行中使用Docker相关指令与Docker守护进程进行交互,从而管理诸如image(镜像)、container(容器)、network(网络)和data volumes(数据卷)等实体。

● REST API:表示应用程序API接口,开发者通过该API接口可以与Docker的守护进程进行交互,从而指示后台进行相关操作。

● docker daemon:表示Docker的服务端组件,他是Docker架构中运行在后台的一个守护进程,可以接收并处理来自命令行接口及API接口的指令,然后进行相应的后台操作。

对于开发者而言,既可以使用编写好的脚本文件通过REST API来实现与Docker进程交互,又可以直接使用Docker相关指令通过命令行接口来与Docker进程交互,而其他一些Docker应用则是通过底层的API和CLI进行交互的

Docker CLI常用命令说明

docker attach 将本地标准输入,输出和错误流附加到正在运行的容器docker build 从Dockerfile构建映像docker checkpoint 管理检查点docker commit 从容器的更改中创建新图像docker config 管理Docker配置docker container 管理容器docker cp 在容器和本地文件系统之间复制文件/文件夹docker create 创建一个新容器docker deploy 部署新堆栈或更新现有堆栈docker diff 检查容器文件系统上文件或目录的更改docker events 从服务器获取实时事件docker exec 在正在运行的容器中运行命令docker export 将容器的文件系统导出为tar存档docker history 显示图像的历史记录docker image 管理图像docker images列出图像docker import 从tarball导入内容以创建文件系统映像docker info 显示系统范围的信息docker inspect 返回有关Docker对象的低级信息docker kill 杀死一个或多个正在运行的容器docker load 从tar存档或STDIN加载图像docker login 登录Docker注册表docker logout 从Docker注册表注销docker logs 获取容器的日志docker manifest 管理Docker镜像清单和清单列表docker network 管理网络docker node 管理Swarm节点docker pause 暂停一个或多个容器中的所有进程docker plugin 管理插件docker port 列出端口映射或容器的特定映射docker ps 列出容器docker pull 从注册表中提取图像或存储库docker push 将映像或存储库推送到注册表docker rename 重命名容器docker restart 重新启动一个或多个容器docker rm 删除一个或多个容器docker rmi 删除一个或多个图像docker run 在新容器中运行命令docker save 将一个或多个图像保存到tar存档(默认情况下流式传输到STDOUT)docker search 在Docker Hub中搜索图像docker secret 管理Docker的秘密docker service 管理服务docker stack 管理Docker堆栈docker start 启动一个或多个已停止的容器docker stats 显示容器资源使用情况统计信息的实时流docker stop 停止一个或多个正在运行的容器docker swarm 管理Swarmdocker system 管理Dockerdocker tag 创建引用SOURCE_IMAGE的标记TARGET_IMAGEdocker top 显示容器的运行进程docker trust 管理Docker镜像上的信任docker unpause 取消暂停一个或多个容器中的所有进程docker update 更新一个或多个容器的配置docker version 显示Docker版本信息docker volume 管理卷docker wait 阻止直到一个或多个容器停止,然后打印退出代码
cli下执行linux命令,举例:[root@fpvm-DBServer61 storage]# docker info[root@fpvm-DBServer61 storage]# docker stats  ##实时看到docker容器的运行状态。 

docker rest api接口组件

docker软件自带docker rest api,不用安装
 默认情况下,docker只允许通过unix socket通信操作Docker daemon,但有时我们想通过HTTP或浏览器调用其Rest API,需单独配置启动参数

环境采样:
[root@fpvm-DBServer61 storage]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
默认配置文件
[root@fpvm-DBServer61 storage]# cat /usr/lib/systemd/system/docker.service[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target
[Service]Type=notify# the default is not to use systemd for cgroups because the delegate issues still# exists and systemd currently does not support the cgroup feature set required# for containers run by dockerExecStart=/usr/bin/dockerd --data-root /mnt/docker/storage ##这里是我修改过的ExecReload=/bin/kill -s HUP $MAINPID# Having non-zero Limit*s causes performance problems due to accounting overhead# in the kernel. We recommend using cgroups to do container-local accounting.LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinity# Uncomment TasksMax if your systemd version supports it.# Only systemd 226 and above support this version.#TasksMax=infinityTimeoutStartSec=0# set delegate yes so that systemd does not reset the cgroups of docker containersDelegate=yes# kill only the docker process, not all processes in the cgroupKillMode=process# restart the docker process if it exits prematurelyRestart=on-failureStartLimitBurst=3StartLimitInterval=60s
[Install]WantedBy=multi-user.target
$vi /lib/systemd/system/docker.service
把ExecStart那行改成:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:888 -H unix:///var/run/docker.sock
888端口随便起的,保存,并重启服务(注意修改配置文件需要,重载下)
[root@fpvm-DBServer61 storage]# systemctl stop dockerWarning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units. ###提示重载
[root@fpvm-DBServer61 storage]# systemctl daemon-reload[root@fpvm-DBServer61 storage]# systemctl stop docker[root@fpvm-DBServer61 storage]# systemctl start docker

通过接口查看某个容器的具体信息

 $curl -XGET 'http://127.0.0.1:888/containers/df7b7568fa7a/json' | python -m json.tool

通过接口获取所有的镜像

 $curl 'http://127.0.0.1:888/images/json?all=0'| python -m json.tool

通过接口关闭某个容器,启动容器

$ curl -s -XPOST "http://127.0.0.1:888/containers/容器id/stop"
$ curl -s -XPOST "http://127.0.0.1:888/containers/容器id/start"容器id 通过docker ps 查看

Docker Daemon(docker server)是Docker的守护进程
大致可以分为Docker Server、Engine和Job三部分。Docker Daemon可以认为是通过Docker Server模块接受Docker Client的请求,并在Engine中处理请求,然后根据请求类型,创建出指定的Job并运行,运行过程的作用有以下几种可能:向Docker Registry获取镜像,通过graphdriver执行容器镜像的本地化操作,通过networkdriver执行容器网络环境的配置,通过execdriver执行容器内部运行的执行工作等,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作
Docker Daemon配置文件即/lib/systemd/system/docker.service

[root@fpvm-DBServer61 storage]# ps -ef | grep dockerdroot 62818 1 0 13:27 ? 00:00:01 /usr/bin/dockerd --data-root /mnt/docker/storage -H tcp://0.0.0.0:888 -H unix:///var/run/docker.sock

Docker引擎核心组件的更多相关文章

  1. Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  2. LCOW —— 单一Docker引擎下可同时运行Linux和Windows容器啦!

    https://blog.csdn.net/m2l0zgssvc7r69efdtj/article/details/79251059 就在上周,Docker官方的master分支上新增了LCOW(Li ...

  3. Docker 引擎(三)

    Docker 引擎是一个包含以下主要组件的客户端服务器应用程序. 一种服务器,它是一种称为守护进程并且长时间运行的程序. REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么. 一 ...

  4. docker swarm英文文档学习-5-在swarm模式中运行Docker引擎

    Run Docker Engine in swarm mode在swarm模式中运行Docker引擎 当你第一次安装并开始使用Docker引擎时,默认情况下禁用swarm模式.在启用集群模式时,需要处 ...

  5. 《Docker Deep Dive》Note - Docker 引擎

    <Docker Deep Dive>Note Docker 引擎 1. 概览 graph TB A(Docker client) --- B(daemon) subgraph Docker ...

  6. 深入剖析Windows专业版安装Docker引擎和Windows家庭版Docker引擎安装的区别

    原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94 公司使用的电脑是Windows专业版,所以配置本机的Docker时会方便许多,后续由于需 ...

  7. 12.第十一篇 安装docker引擎

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483838&idx=1&sn=5a13aed5 ...

  8. Docker概念学习系列之详谈Docker 的核心组件与概念(5)

    不多说,直接上干货!   见[博主]撰写的https://mp.weixin.qq.com/s/0omuSAjF5afJBZBxhbKTqQ 想要了解Docker,就必须了解Docker的五大核心概念 ...

  9. 你不得不了解的应用容器引擎---Docker

    最近突然想搭一个redis集群玩玩,因为公司的电脑同时开2个虚拟机就卡的不行,所以我就想到用Docker开启多个redis-server来搭建.然后在网上找着找着发现,使用Docker,哪需要搭建啊, ...

随机推荐

  1. python实现解析markdown文档中的图片,并且保存到本地~

    背景 前阵子简书好像说是凉了,搞得我有点小慌,毕竟我的大部分博客都是放在简书上面的,虽然简书提供了打包导出功能,但是只能导出文字,图片的话还是存在简书服务器上面,再加上我一直想要重新做一个个人博客,于 ...

  2. kali换源及安装docker

    kali换源及安装docker 以管理员身份运行. 换源,记得先备份, cp /etc/apt/sources.list /etc/apt/sources.list.bak 然后修改/etc/apt/ ...

  3. AQS 详解之共享锁模式

    概括 AQS框架数据结构是一个先进先出的双向队列,当多个线程进行竞争资源时,那些竞争失败的线程会加入到队列中.他向上层提供了很多接口,其中一个是acquireShared获取共享模式的接口.本文将会根 ...

  4. 发现Compound的第二个严重漏洞

    本文转自 发现Compound的第二个严重漏洞 | 登链社区 | 深入浅出区块链技术 (learnblockchain.cn) 这个漏洞原作者在2022年02月23日已经发布过,由于内容比较敏感,发布 ...

  5. 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...

  6. django处理跨域

    django处理Ajax跨域访问时使用javascript进行ajax访问的时候,出现如下错误 出错原因:javascript处于安全考虑,不允许跨域访问.下图是对跨域访问的解释: 概念: 这里说的j ...

  7. BGP的四类属性详解

    BGP的四类属性 公认必遵(Well-known mandatory) 要求所有运行BGP协议的设备都必须能识别,且在更新消息中必须包含. Origin(起源) 属性 用来标识路由信息的来源. 如果路 ...

  8. 常见的反爬措施:UA反爬和Cookie反爬

    摘要:为了屏蔽这些垃圾流量,或者为了降低自己服务器压力,避免被爬虫程序影响到正常人类的使用,开发者会研究各种各样的手段,去反爬虫. 本文分享自华为云社区<Python爬虫反爬,你应该从这篇博客开 ...

  9. 不重写hash不重写equals造成的问题

    不重写hash造成的问题 第一,就是不重写,调用object 的hashCode方法,用的是地址, 比如现在你map.put() 10000个对象,这时候对象都是不同的地址,计算出不同的对应的桶位置( ...

  10. 什么是内部类? Static Nested Class 和 Inner Class的不同?

    内部类就是在一个类的内部定义的类,内部类中不能定义静态成员. 内部类作为其外部类的一个成员,因此内部类可以直接访问外部类的成员.但有一点需要指出:静态成员不能访问非静态成员,因此静态内部类不能访问外部 ...