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. LGP3126题解

    这道题还有点意思. 路径要求是一个回文串,回文串立马枚举中点.中点只可能在对角线上. 枚举对角线上的一个点,然后两边的路径必须完全相同. 既然路径上的字符必须完全相同,那么每个前缀也必须完全相同. 考 ...

  2. MySQL 字符集相关

    为了支持各个国家的不同语言,MySQL 从4.0 版本开始支持了很多种字符集,且每种字符集支持了 N 多种排序规则.我们可以在建表的时候指定字符集的排序规则,不指定时会有一个默认规则. 字符集和排序规 ...

  3. C++设计模式 - 备忘录模式(Memento)

    状态变化模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?"状态变化"模式为这一问题提供了一种解决方案. 典型模式 Sta ...

  4. 部署YUM源仓库与NFS共享存储服务

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 一.YUM YUM (Yellow dog Updater Modified) ●基于RPM包构建的软件更新机制 ●可以自动解决依赖关系 ●所有 ...

  5. 5月28日 python学习总结 CSS学习(二)

    CSS属性相关 宽和高 width属性可以为元素设置宽度. height属性可以为元素设置高度. 块级标签才能设置宽度,内联标签的宽度由内容来决定. 字体属性 文字字体 font-family可以把多 ...

  6. python程序unix密码破解

    # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 #!/usr/bin/env python #指定这是一个python文件,使用这个 ...

  7. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

    可以有多个类,但只能有一个public的类,并且public的类名必须与文件的主文件名相同. 包含多个类的Java源文件编译之后会生成多个.class文件.

  8. elasticsearch 了解多少,说说你们公司 es 的集群架构,索 引数据大小,分片有多少,以及一些调优手段 ?

    面试官:想了解应聘者之前公司接触的 ES 使用场景.规模,有没有做过比较大 规模的索引设计.规划.调优. 解答: 如实结合自己的实践场景回答即可. 比如:ES 集群架构 13 个节点,索引根据通道不同 ...

  9. python 列表list-增删改查操作

    初始化: a.    data_list1 = [] b.    data_list2 = [a,b,c] c.     data_list = list() 新增: a. data_list1.ap ...

  10. 什么是 Spring 配置文件?

    Spring 配置文件是 XML 文件.该文件主要包含类信息.它描述了这些类是如何 配置以及相互引入的.但是,XML 配置文件冗长且更加干净.如果没有正确规划 和编写,那么在大项目中管理变得非常困难.