Docker 客户端和守护进程

以上为Docker的C/S架构图,从中摘取出Docker 的客户端与守护进程的关系如下:

  • Docker Host 宿主机:

    进行docker操作的虚拟机

    • Docker daemon 守护进程:

      负责各种各样的docker操作的核心程序,比如下载或者运行一个docker容器

  • Client 客户端:

    我们通过Client与Docker daemon进行交互,将docker builddcoker pulldocker run交与Docker daemon去操作。主要的有以下两种接口:

    • 命令行接口 Console API,这个不多讲
    • 远程接口 Remote API 支持以下内容
      • RESTful 风格API
      • STDIN STDOUT STDERR,因此用户可以用自定义的程序与Docker进行交互
      • 版本信息可以使用命令docker version进行查看

客户端和守护进程的连接

主要以socket进行连接,有以下的三种方式:

  • unix:///var/run/docker.sock
  • tcp://host: port
  • fd://socketfd

使用以下的命令以第一种方式连接docker.sock

nc -U /var/run/docker.sock

发起 GET 请求docker的相关信息

GET /info HTTP1.1

将返回JSON格式的数据

守护进程的配置和操作

安装完Docker后需要确认Docker的守护进程是否运行。Docker以root权限运 行它的守护进程,来处理普通用户无法完成的操作(如挂载文件系统)。docker程序是 Docker守护进程的客户端程序,同样也需要以root身份运行。

当Docker软件包安装完毕后,默认会立即启动Docker守护进程。守护进程监听 /var/run/docker.sock这个Unix套接字文件,来获取来自客户端的Docker请求。如果系统中存在名为docker的用户组的话,Docker则会将该套接字文件的所有者设置为该用户组。docker用户组的所有用户都可以直接运行Docker,而无需再使用 sudo 命令了。

使用非root用户

  1. $ sudo groupadd docker
  2. $ sudo gpasswd -a ${USER} docker
  3. $ sudo service docker restart
  4. login again

前面已经提到,尽管docker用户组方便了 Docker的使用,但它毕竟是一个安全隐患。 因为docker用户组对Docker具有与root用户相同的权限,所以docker用户组中应 该只能添加那些确实需要使用Docker的用户和程序。

  • 查看守护进程的两种方式

    • $ ps -ef | grep docker
    • 在Ubuntu中,如果Docker是通过软件包安装的话,我们可以运行Upstart的status 命令来检查Docker守护进程是否正在运行

      $ sudo status docker

  • 在Docker服务的生命周期中使用以下的几种命令
    • sudo service docker start
    • sudo service docker stop
    • sudo service docker restart
  • Docker的启动选项
    • docker -d [OPTIONS] 常见的方式以守护进程的方式进行
    • 运行相关:
      -D,     --debug = false
      -e,      --exec-driverynative"
      -g,      -graph="/var/lib/docker" -icc=true
      -l,      --log-level="info"
               --label=[]
      -p,      -pidfile = "/var/mn/docker.pid"
    • Docker服务器连接相关:
      -G,     -group="docker"
      -H,     -host=[]
              --tls=false
              --tlscacert="~/.docker/ca.pem"
              --tlscert="~/.docker/cert.pem"
      -tlskey="~/.docker/key.perrT
      -tlsverify=false
    • RemotAPI 相关:
      --api-enable-cors=false
    • 存储相关:
      -s,     -storage-driver=""
              -selinux-enabled=false
              --storage-opt=[]
    • Registry 相关:
      --insecure-registry=[]
      --registry-mirror=[]
    • 网络设置相关:
      -b,-bridge=""
      -bip=""
      --fixed-cidr=""
      --fixed-cidr-v6=""
      --dns=[]
      --dns-search=[]
      -ip=0.0.0.0
      -ip-forward=true
      -ip-masq=true
      --iptables=true
  • 启动配置文件/etc/default/docker

    上述的各种参数在配置文件中进行设置

实例

修改守护进程网络
$ sudo /usr/bin/docker -d -H tcp://0.0.0.0:2375

这条命令会将Docker守护进程绑定到宿主机上的所有网络接口。Docker客户端不会自动监测到网络的变化,我们需要通过-H选项来指定服务器的地址。例如,如果把守护进程端口改成4200,那么运行客户端时就必须指定docker -H :4200。如果不想每次运行客户端时都加上-H标志,可以通过设置DOCKER HOST环境变量来省略此步骤,如

$ export DOCKER_HOST="tcp://0.0.0.0:2375"

默认情况下,Docker的客户端-服务器通信是不经认证的。这就意味着,如果把Docker 绑定到对外公开的网络接口上,那么任何人都可以连接到该Docker守护进程。Docker 0.9 及更高版本提供了TLS认证。

我们也能通过-H标志指定一个Unix套接字路径,例如,指定unix://home/docker/docker.socket,

$ sudo /usr/bin/docker -d -H unix://home/docker/docker.sock

当然,我们也可以同时指定多个绑定地址,

$ sudo /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix://home/ docker/docker.sock
调试相关

在启动守护进程时,我们还可以通过在命令前指定DEBUG=1参数来输出更详细的信 息。目前,Docker的日志输出还比较少。在使用了Upstart的Ubuntu系统下,Docker守护进程生成的日志输出都保存在/var/log/upstart/docker.log文件中

DEBUG=1 /usr/bin/docker -d

要想让这些改动永久生效,需要编辑启动配置项。在Ubuntu中,我们需要编辑 /etc/default/docker 文件,并修改 D0CKER_0PTS 变量。

在 Fedora 和 Red Hat 发布版本中,则需要编辑/usr/lib/systemd/system/docker.service文件,并修改其中的ExecStart配置项。

在其他平台中,可以通过适当的init系统来管理和更新Docker守护进程的启动配置。

守护进程配置文件不生效

问题描述:在配置文件/etc/default/docker 添加选项 DOCKER_OPTS=" --label name=docker_whoami "后并不会生效。

解决办法是:打开/lib/systemd/system/docker.service 文件
添加一行

EnvironmentFile=-/etc/default/docker
-代表ignore error

并修改

ExecStart=/usr/bin/docker daemon -H fd://

改成

ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS

这样才可以使用/etc/default/docker 里定义的DOCKER_OPTS参数

sudo systemctl daemon-reload 重载

重载完成再进行配置文件修改与服务重启后,生效如下:

Labels:
  name=docker_whoami

通过docker info或者ps -ef | grep docker可以查看得到上述选项。

原文地址:https://www.cnblogs.com/oneTOinf/p/8450184.html

时间: 2024-08-04 15:17:15

Docker 客户端和守护进程的相关文章

Docker客户端与守护进程

$ docker -d [ OPTIONS ] (已守护进程的方式运行容器)配置选项:1.运行相关-D,--debug=false-e,--exec-driver="native"-g,--graph="/var/lib/docker"--icc=true-l,--;og-level="info"--label=[]-p,--pidfile="/var/run/docker.pid"2.Docker 服务器连接相关:-G,--

Docker命令行与守护进程如何交互?

译者按: Docker是典型的C/S架构,其守护进程(daemon)与命令行(CLI)是通过REST API进行交互的. 原文: Understanding how the Docker Daemon and Docker CLI Work Together 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. Docker并非单体应用,它由多个组件构成.这篇博客将介绍Docker守护进程(daemon)与Docker命令行(CLI).事实

docker 学习笔记20:docker守护进程的配置与启动

安装好docker后,需要启动docker守护进程.有多种启动方式. 一.服务的方式 因为docker守护进程被安装成服务.所以,可以通过服务的方式启停docker守护进程,包括查看状态. sudo start docker  //启动 sudo stop docker  //停止 sudo status docker  //查看状态 二.利用docker daemon命令 sudo docker daemon 利用sudo ps -A 可以获取守护进程的进程号 三.让远程api可以访问dock

Docker学习笔记(5-2)Docker守护进程的配置和操作

学习目标:  查看Docker守护进程的运行状态 启动.停止.重启Docker守护进程 Docker守护进程的启动选项 修改和查看Docker守护进程的启动选项 1.# 查看docker运行状态  方法一:ps -ef | grep java 方法二:sudo status docker 返回:docker start/running, process 18479 返回当前已经启动,并且正在运行,同时返回了进程编号 2.# 启动.停止.重启docker守护进程 sudo service dock

使用golang和docker守护进程交互

开发语言 golang 使用 unix domain socket 和 docker 守护进程交互,查询 镜像列表 package main import ( "fmt" "net" "io/ioutil" "encoding/json" ) type Image struct { Created uint64 Id string ParentId string RepoTags []string Size uint64 Vi

Linux系统开发7 进程关系,守护进程

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> Linux系统开发7  进程关系守护进程 终端 网络终端 Linux PCB结构体信息 进程组 修改子进程.父进程的组ID 会话组 设置一个会话脱离控制终端 生成一个新的会话 守护进程 守护进程模板 获取当前系统时间  终端 在UNIX系统中用户通过终端登录系统后得到一个Shell进程这个终端成为Shell进 程的控制终端Controlling Terminal在讲进程时讲过控制终端是保存在PCB

laravel队列-让守护进程处理耗时任务

待解决的问题 最近在做一个服务器集群管理的web项目,需要处理一些极其耗时的操作,比如磁盘格式化分区.对于这个需求,最开始的想法是,为了让节点上的rpc(远程过程调用) service端尽可能简单(简单到只需要popen执行一条指令即可,有时间我再专门写一篇博客讲讲这个项目的rpc是如何实现的),我们选择了让web端直接等待处理结果,那么问题来了,如何保证用户不必等待,又能保证任务准确的执行呢? 简单的rpc结构如下图 以往在处理一些稍微耗时的操作,可以通过优化代码结构,优化数据库操作次数,起一

linux守护进程解读

Linux系统守护进程详解 不要关闭下面这几个服务: acpid, haldaemon, messagebus, klogd, network, syslogd 1. NetworkManager, NetworkManagerDispatcher NetworkManager 是一个自动切换网络连接的后台进程.很多笔记本用户都需要启用该功能,它让你能够在无线网络和有线网络之间切换.大多数台式机用户应该关闭该服务.一些 DHCP 用户可能需要开启它. 2. acpid 配置文件:/proc/ac

Rsync守护进程方式远程部署

2.Rsync守护进程方式远程部署 以守护进程(Socket)的方式传输数据 操作系统: [[email protected] ~]# cat /etc/redhat-release  CentOS Linux release 7.3.1611 (Core)  内核版本: [[email protected] ~]# uname -r 3.10.0-514.el7.x86_64 主机网络参数设置: Hostname 网卡eth0 默认网关 用途 node1 192.168.1.71 192.16