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. vue3-关于使用element-plus第三方组件库时出现的一些问题的解决方案(1)

    这只是在使用element-plus组件开发过程中遇到的第一个问题,后面遇到更多问题及解决方案时会再同步到博客上来 --------------我是分割线------------------ 今天用到 ...

  2. 造成panic_oom问题的测试代码

    写一个内核模块,来构造内核模块出现panic oom,主要采用vmalloc函数: #include <linux/module.h> #include <linux/mm.h> ...

  3. Git 工作流简介

    1.概述 工作流有各式各样的用法,但也正因此使得在实际工作中如何上手使用增加了难度.这篇指南通过总览公司团队中最常用的几种 Git 工作流让大家可以上手使用. 在阅读的过程中请记住,本文中的几种工作流 ...

  4. Water 2.5.6 发布,一站式服务治理平台

    Water(水孕育万物...) Water 为项目开发.服务治理,提供一站式解决方案(可以理解为微服务架构支持套件).基于 Solon 框架开发,并支持完整的 Solon Cloud 规范:已在生产环 ...

  5. 那么回到我们开始的问题,通常一棵B+树可以存放多少行数据?

    这里我们先假设B+树高为2,即存在一个根节点和若干个叶子节点,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数. 上文我们已经说明单个叶子节点(页)中的记录数=16K/1K=16.( ...

  6. 深入理解Java虚拟机-走进Java

    一.Java技术体系 从广义上讲, Clojure. JRuby. Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员. 如果仅从传统意义上来看, Sun官方所定义 ...

  7. JDBC 中如何进行事务处理?

    Connection 提供了事务处理的方法,通过调用 setAutoCommit(false)可以设置 手动提交事务:当事务完成后用 commit()显式提交事务:如果在事务处理过程中 发生异常则通过 ...

  8. 使用salt-cloud创建openstack虚拟机

    salt-cloud也是基于openstack来做的,它可以支持多种云的使用.比如:Aliyun.Azure.DigitalOcean.EC2.Google Compute Engine.HP Clo ...

  9. 『忘了再学』Shell基础 — 6、Bash基本功能(输入输出重定向)

    目录 1.Bash的标准输入输出 2.输出重定向 (1)标准输出重定向 (2)标准错误输出重定向 (3)正确输出和错误输出同时保存 3.输入重定向 1.Bash的标准输入输出 我们前边一直在说,在Li ...

  10. Python - 异常处理初步