文章目录

  • Remote API
  • 连接方式
  • 实例演示
  • 守护进程的配置和操作

  Docker是以客户端、守护进程的方式来运行的,那Docker是如何以C/S模式运行的呢?

  在docker客户端(docker client)中运行docker的各种命令,而这些命令会传递给docker的宿主机上运行docker的守护进程。而docker的守护进程负责实现docker的各种功能。

  上图去掉一些没有用的信息专注docker的客户端与守护进程描述。如图所示,docker的守护进程运行在宿主机上,也就是cs架构的server端,守护进程会在启动后一直在后台运行。负责实现docker的各种功能。而docker使用者并不会直接与守护进程交互,而是要通过docker的客户端,也就是docker的命令行接口来与docker守护进程进行通信,也就是在shell中运行的docker的二进制程序。接收docker的守护进程的执行命令,然后将结果返回给客户端,显示在命令行中。

  docker的命令行接口是docker最主要的客户端接口,而docker也提供了另外的与守护进程通信的方式Remote API

Remote API

  Remote API和我们常见的网络平台提供的API非常相似,也是RESTful风格的API,我们可以通过Remote APIdocker的守护进程进行通信。也就是可以通过程序来与docker进行集成。

  dockerremote API在某些复杂的情况下也支持STDINSTDOUTSTDERR的方式来进行通信和交互。

  如上图所示,用户通过自定义的程序进行交互,而这个程序通过调用remote apidocker的守护进程进行协作。

  • Docker官方的Remote API Reference ,现在好像换名字变成Engine API了。

连接方式

  那docker的客户端与守护进程是如何通信的呢?docker的客户端与守护进程通过socket进行链接,docker提供了3种进行socket连接的方式

  1. unix端口。unix:///var/run/docker.sock
  2. tcp协议的host/post模式。tcp://host: port
  3. 第三种是fd的socket。fd://socketfd

  用户通过命令行接口或者自定义的应用来与客户端进行连接,这个客户端可以是docker提供的二进制程序,也就是在shell中运行的docker命令, 也可以是用户自定义的程序,而这个程序是通过remote api来调用的docker服务, docker的客户端与docker的服务端通过socket进行连接。

  这种链接就使得clientserver既可以在同一台机器上运行,也可以在不同的机器上运行。

实例演示

  docker的守护进程在启动后会一直运行,那么我们可以通过ps命令来查看当前进程中是否已经启动了docker服务,使用grep来过滤docker关键字

ps -ef | grep docker

  然后在命令行中使用docker命令进行操作时,实际上就是在使用docker的客户端程序,再与守护进程进行交互:

  这里的API version指的就是remote api版本。下面再来演示dockerremote api是什么样的,这里就要用到linuxnetcat命令来实现socket的链接。

nc -U /var/run/docker.sock

  -U指明使用的是socket。运行之后就已经连接到了socket。通过socket发出一个http的指令,用来查看remote api的一个接口info,这个接口用来返回docker的相关信息,指定协议HTTP/1.1

  所返回的结果就是通过dockerremote api返回的结果。这里都是通过本机来进行的访问,但是它本身是支持远程访问的。

守护进程的配置和操作

  上文我们使用了ps命令来查看docker守护进程的运行状态。

$ ps -ef | grep docker

  那如何启动、停止、重启docker的守护进程呢?

sudo service docker start
sudo service docker stop
sudo service docker restart

  docker针对不同的应用场景,为守护进程提供了非常丰富的启动的配置选项。这种配置选项通过如下格式运行:

docker -d [OPTIONS]

  -d表示以守护形式来运行docker的程序,后面[OPTIONS]是守护进程的配置选项,docker提供了非常丰富的配置选项。包含了docker的目录,日志的级别,进程ID、写入文件的地址、debug模式的开启以及docker运行时使用的驱动模式等等

  1. -D, --debug=false
  2. -e, --exec-driver=“native”
  3. -g, -graph="/var/ib/docker"
  4. –icc=true
  5. -l, -log-level=“info”
  6. –label=[]
  7. -p, -pidfile="/var/run/docker.pid"

  docker也提供了客户端与服务器端连接时使用的选项,包含了用户组对连接socket配置的选项-H,以及与安全性相关的一系列选项tls等等:

  1. -G, --group=“docker”
  2. -H, --host=[
  3. -tls=false
  4. –tlscacert="/home/sven/.docker/ca.pem"
  5. –tlscert="/home/sven/.docker/cert.pem”
  6. –tlskey="/home/sven/ .docker/key.pem’
  7. –tlsverify=false

  也包含了remote api相关的选项

  1. –api-enable-cors=false

  包含了与存储,驱动以及设置相关的选项

  1. -s, --storage-driver=""
  2. –selinux-enabled=false
  3. –storage-opt=[]

  包含了registry连接相关的选项

  1. –insecure-registry=[]
  2. –registry-mirror=[]

  网络设置相关的选项(包括网桥的配置,DNS服务器的配置):

  1. -b, -bridge=”“
  2. –bip=”“
  3. –fixed-cidr=”“
  4. – fixed-cidr-v6=”“
  5. –dns=[]
  6. –dns-search=[]

  以及和docker运行的容器的ip地址的相关配置:

  1. –ip=0.0.0.0
  2. –ip-forward=true
  3. –ip-masq=true
  4. –iptables=true
  5. –ipv6=false
  6. –mtu=0

  选项的具体含义可查看:https://docs.docker.com/reference/

  docker服务的启动并不是通过命令行来启动的,这些选项通过启动配置文件/etc/default/docker应用到docker守护进程的配置中。在这个配置文件中我们可以配置docker启动时配置的各种选项。超级权限查看其文件:

  DOCKERdocker的程序安装地址;DOCKE_OPTS就是我们刚刚介绍过的docker守护进程启动时的启动选项;还包含环境变量的设置。

  可以在这个文件里面设置自己的配置选项。

  如果有修改,重启之后可以看到修改过后的配置将会应用在docker的守护进程上。

  这时再使用info命令就可以看到刚才做出的修改:

Docker系列(八)Docker的CS模式、守护进程的配置和操作相关推荐

  1. 【Docker学习总结】12.Docker守护进程的配置和操作

    上一篇总结了Docker的CS模式的具体概念,本篇来学习Docker守护进程的配置和操作. 在上一篇的演示中,我们使用了Linux的ps命令查看了Docker守护进程的运行状态.那么,除了ps命令,我 ...

  2. Docker系列 八.Docker下 Mysql 启动慢查询日志

    先进入mysql容器: docker exec -it 480c8f2a1f21 /bin/bash 进入mysql,然后输入密码即可 mysql -u root -p 查看mysql系统参数 mys ...

  3. Docker系列一 ~docker的安装

    Docker系列一 docker安装 依照centos为例,Docker 官方建议要 CentOS7.0 及以上系统版本,在运行CentOS 6.5及以后版本时,需要内核版本>=2.6.32-4 ...

  4. Docker系列文-----Docker的网络类型(4)

    Docker系列文-----Docker的网络类型(4) Docker里的常见文件及作用 Docker 内部的网络类型 1.桥接模式(默认): 2.host模式: 3.container模式 4.no ...

  5. Docker系列 七. Docker 安装Jenkins

    Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...

  6. Docker系列 四.Docker部署SpringBoot

    四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...

  7. Docker系列五~docker安装php-fpm

    Docker系列五 docker安装php-fpm 访问PHP镜像库地址: https://hub.docker.com/_/php?tab=tags 选择合适的版本 php-fpm镜像主要是提供ph ...

  8. Docker系列四~docker安装mysql

    Docker系列四 docker安装mysql 搜索mysql版本 [root@localhost conf.d]# docker search mysql INDEX NAME DESCRIPTIO ...

  9. Docker系列三~docker安装nginx

    Docker系列三 docker安装nginx 搜索nginx版本 docker search nginx 拉取nginx最新版本镜像 docker pull nginx:latest 查看本地镜像 ...

  10. Docker系列3 - Docker文件系统及搭建Docker私服

    系列文章 Docker系列1 - CentOS7安装Docker Docker系列2 - Docker常用命令 UnionFS 联合文件系统 是一种分层.轻量级并且高性能的文件系统,它支持对文件系统的 ...

最新文章

  1. 清除Solution中的vss信息
  2. Open***异地机房互连以及负载均衡高可用解决方案
  3. 0.QObject的数据存储
  4. 鸿蒙os2.0通知栏,网友上手鸿蒙手机OS 2.0公测版:界面与EMUI已有明显不同
  5. solr学习之一 搜索基本知识
  6. NOIP2018普及组复赛解析
  7. 在win10系统中安装Visual C++ 6.0的具体方法
  8. 如何使用Xcode分析调试在真机运行的UE4 IOS版游戏
  9. 删除android电视软件下载,安卓智能电视必装工具没有之一,进程管理备份清理全靠它!...
  10. windows 设置 rocketmq环境变量_RocketMQ 开篇
  11. python垃圾回收机制与很多_你了解Python的 垃圾回收 机制吗?
  12. C语言EasyX详解(小球碰撞)
  13. linux安装软件无图标,linux安装的软件如何不固定在桌面图标 linux 桌面图标
  14. SQL Server 去除节假日天数,获取实际工作日天数
  15. 如何提高平面设计的思维转向
  16. 伪随机数的产生和流密码
  17. 雷电3菊链功能_雷电3接口是什么
  18. DataSec数据防泄密系统
  19. 官宣!成都链安在北京成立分部啦!
  20. 关于研发项目计划排期与项目需求延期的想法

热门文章

  1. Winform控件学习笔记【第四天】——WebBrowser
  2. 计算机网络网络层之层次路由
  3. Docker详解(三)——Docker安装与部署
  4. Linux安装Python3详解
  5. Ansible详解(十五)——Ansible Role实战
  6. TCP为什么避免测量重传报文段SampleRTT;TCP为什么等到三个重复的ack后才快速重传
  7. webstorm中代码添加单引号、双引号快捷键
  8. 【转】一致性hash算法与server列表维护
  9. 多种负载均衡算法及其Java代码实现
  10. vue2.0项目的环境配置以及有哪些的坑