Docker--配置Docker对象与管理守护进程

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

本章节的快速目录导航: 

一、配置Docker对象

1.1、Docker对象的标记

1.2、格式化命令和日志的输出

二、示例:

2.1、管理Docker对象的标记

2.2、删除不用的 Docker 对象

三、配置和管理 Docker 守护进程

3.1、Docker 守护进程的启动

3.2、 Docker 守护进程的配置方式

3.3、解决 daemon.json 文件和启动脚本之间的冲突

3.4、Docker 守护进程目录

四、示例

4.1、检查Docker是否在运行

4.2、从 Docker 守护进程获取实时事件

4.3、查看 Docker 守护进程日志

4.4、开启 Docker 守护进程的调试模式

4.5、自定义 Docker 守护进程选项

4.6、为 Docker 守护进程配置 HTTP/HTTPS 代理

致谢


一、配置Docker对象

使用Docker的主要工作是创建和使用各类对象。如镜像、容器、网络、卷、插件等

1.1、Docker对象的标记

Docker标记是一种用于为Docker对象(如镜像、容器等)添加元数据的机制

  • 标记用途:组织镜像、记录许可信息、注释关系、执行业务或应用操作
  • 标记格式:键值对,以字符串形式存储,每个键在对象中唯一
  • 键规则:可含句点、连字符、字母和数字
  • 值规则:任何可序列化为字符串的数据类型,如 JSON、XML、CSV 或 YAML
  • 序列化:需将值转换为字符串,例如使用 JSON.stringify()
  • 查询限制:Docker 不反序列化标记值,查询时不能使用嵌套结构,可能需第三方工具

1.2、格式化命令和日志的输出

Docker使用Go模板和一系列函数来管理命令和日志的输出格式

(1)join: 连接字符串列表为单个字符串,用指定分隔符

 docker inspect --format='{{join .Args "" 1}}' container

(2) json: 将元素编码为 JSON 字符串

 docker inspect --format='{{json . Mounts }}' container

(3) lower: 将字符串转换为小写

 docker inspect --format='{{lower .Name}}' container

(4)split: 将字符串按分隔符切分为列表

 docker inspect --format='{{split (join .Names "/") "/"}}' container

(5)title: 将字符串的每个单词首字母转为大写

 docker inspect --format='{{title .Name}}' container

(6)upper: 将字符串转换为大写

 docker inspect --format='{{upper .Name}}' container

(7)println: 使每个输出值占一行

 docker inspect --format='{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}' container
 ​
 # 如果要知道可被输出的内容,可以以JSON格式显示全部内容
 docker container ls --format='{{json.}}'

二、示例:

2.1、管理Docker对象的标记

  • 标记机制:Docker 对象如镜像、容器等可以添加标记,这些标记在对象生命周期内通常是静态的,需要重新创建对象才能更改。

  • 动态更新:Swarm 集群节点和服务上的标记支持动态更新。

 # 为容器添加标记:
 [root@docker ~]# docker run -d --label test-redis --name redis redis
 d75e715b2...
 ​
 # 按标记过滤容器列表:
 root@docker ~]# docker ps --filter label=test-redis
 CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
 d75e715b27d8   redis     "docker-entrypoint.s…"   22 seconds ago   Up 20 seconds   6379/tcp   redis

2.2、删除不用的 Docker 对象

  • 垃圾回收:Docker使用保守方法清理未使用的对象,如镜像、容器、卷和网络
  • Prune命令:提供了prune命令来清理这些对象
  • 系统清理:使用docker system prune一次性清理多种类型的对象
 # 清理镜像、容器和网络:
 [root@docker ~]# docker system prune
 WARNING! This will remove:
   - all stopped containers          # 所有停止的容器
   - all networks not used by at least one container # 未被任何容器使用的网络
   - all dangling images             # 所有虚悬的镜像
   - unused build cache              # 所有构建缓存
 Are you sure you want to continue? [y/N]    # 输入y键确认执行
 ​
 # 在新版本中清理卷:
 docker system prune --volumes
 ​
 # 强制删除无提示
 docker system prune -f

三、配置和管理 Docker 守护进程

Docker 守护进程(dockerd)是 Docker 的后台应用程序,可以通过dockerd命令进行配置和管理

3.1、Docker 守护进程的启动

Docker 守护进程通常由系统工具自动启动,简化了系统重启时 Docker 的启动过程

 # 启动Docker:
 systemctl start docker
 ​
 # 重启Docker:
 systemctl restart docker
 ​
 # 停止Docker:
 systemctl stop docker
 ​
 # 设置开机启动:
 systemctl enable docker
 ​
 # 禁用开机启动:
 systemctl disable docker

如果需要手动启动或测试,可以使用 dockerd命令:

 dockerd

3.2、 Docker 守护进程的配置方式

Docker 守护进程可以使用以下两种方式进行配置:

3.2.1、使用 JSON 配置文件

  • Linux 系统配置文件位置/etc/docker/daemon.json

  • Windows 系统配置文件位置C:\ProgramData\docker\config\daemon.json

 {
   "debug": true,
   "tls": true,
   "tlscert": "/var/docker/server.pem",
   "tlskey": "/var/docker/serverkey.pem",
   "hosts": ["tcp://192.168.199.53:2376"]
 }

采用这个配置,Docker守护进程将以调试模式运行,其使用TLS安全机制,在2376监听路由到IP地址192.168.199.53的流量

3.2.2、使用选项手动启动 Docker 守护进程

 dockerd --debug \
   --tls=true \
   --tlscert=/var/docker/server.pem \
   --tlskey=/var/docker/serverkey.pem \
   --host tcp://192.168.199.53:2376

3.3、解决 daemon.json 文件和启动脚本之间的冲突

如果daemon.json配置文件启动脚本中定义了相同的选项,会导致 Docker 启动失败。解决冲突需要调整相关选项或配置文件。

3.4、Docker 守护进程目录

  • Linux 默认目录/var/lib/docker
  • Windows 默认目录C:\ProgramData\docker

四、示例

4.1、检查Docker是否在运行

可以通过多种方式检查 Docker 是否在运行:

  • 使用docker info命令,这是跨操作系统的方法。
  • 使用系统工具,如systemctl is-active dockersystemctl status dockerservice docker status
  • 使用pstop 等 Linux 命令在进程列表中检查 dockerd进程

4.2、从 Docker 守护进程获取实时事件

使用docker events命令查看 Docker服务器端的实时事件信息:

 docker events [选项]
  • -f 选项用于过滤事件
  • --since选项显示自某个时间戳开始的所有事件
  • --until选项显示截至指定时间的所有事件

演示:(1)在一个终端窗口执行以下命令监听事件:

 [root@docker ~]# docker events

(2)打开另一个终端,先启动容器然后停止该容器

 [root@docker ~]# docker create --name test alpine:latest top
 ...
 0b78a4e23fe021d0f2e32d534cd564a2d62ee23e5ce134919ce3d9faf31b9d9d
 [root@docker ~]# docker start test
 test
 [root@docker ~]# docker stop test
 test

(3)切换回前面的终端窗口,发现显示上述操作的详细事件:

 [root@docker ~]# docker events
 2024-05-11T22:37:58.519619364+08:00 image pull alpine:latest (name=alpine)
 2024-05-11T22:37:58.548749579+08:00 container create
 ...

(4)按下Ctrl+C组合退出docker events命令

4.3、查看 Docker 守护进程日志

Docker 守护进程日志有助于诊断问题:

  • 在使用 systemctl的 inux 系统上,使用journalctl -u docker.service查看日志。

     [root@docker ~]# journalctl -u docker.service
     -- Logs begin at Thu 2024-05-09 10:42:29 CST, end at Sat 2024-05-11 22:40:54 CST. --
     May 09 10:42:36 docker systemd[1]: Starting Docker Application Container Engine...
     May 09 10:42:39 docker dockerd[1126]: time="2024-05-09T10:42:39.326030877+08:00" level=info msg="Starting up"
     ...
  • 在其他操作系统上,查看相应的日志文件,例如/var/log/messages/var/log/upstart/docker.log

如果 Docker 守护进程没有响应,可以发送SIGUSR1信号来记录堆栈跟踪:

 kill -SIGUSR1 $(pidof dockerd)

4.4、开启 Docker 守护进程的调试模式

启用调试模式有两种方法:

  • daemon.json文件中设置 "debug": true
  • 发送SIGHUP信号到守护进程,使其重新加载配置:

 kill -SIGHUP $(pidof dockerd)

或者直接使用 -D选项手动重启Docker守护进程。

 [root@docker ~]# systemctl stop docker
 [root@docker ~]# dockerd -D

4.5、自定义 Docker 守护进程选项

使用daemon.json文件配置守护进程选项,例如:

 {
   "data-root": "/mnt/docker-data",
   "storage-driver": "overlay"
 }

data-root选项设置的是运行时目录,即Docker镜像、容器和卷所使用的磁盘空间

4.6、为 Docker 守护进程配置 HTTP/HTTPS 代理

配置 HTTP/HTTPS 代理:

(1)创建etc/systemd/system/docker.service.d/http-proxy.conf文件:

 mkdir -p /etc/systemd/system/docker.service.d

(2) 添加环境变量定义:

 [Service]
 Environment="HTTP_PROXY=http://proxy.example.com:80"

(3) 重新加载 systemd 配置并重启 Docker:

 systemctl daemon-reload
 systemctl restart docker

(4)验证配置:

 systemctl show --property=Environment docker

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。

学习永无止境,让我们共同进步!!

Docker守护进程Docker的核心组件,负责管理和控制Docker容器的运行。守护进程Docker中以root权限运行,并处理普通用户无法完成的操作,如挂载文件系统。守护进程的客户端程序是docker命令,也需要以root身份运行。 要控制Docker守护进程,可以使用命令"docker daemon"或"sudo service docker"来查看守护进程的状态、启动、关闭和重启。在Docker 1.8之前,守护进程是通过"-d"标志来控制的,而不是使用"docker daemon"子命令。 守护进程监听一个Unix套接字文件"/var/run/docker.sock",用于接收来自客户端的Docker请求。如果系统中存在名为docker的用户组,Docker会将该套接字文件的所有者设置为该用户组。这样,docker用户组的所有用户都可以直接运行Docker,而无需再使用sudo命令。 然而,需要注意的是,docker用户组具有root用户相同的权限,因此应该只向docker用户组中添加确实需要使用Docker的用户和程序,以避免潜在的安全隐患。 守护进程配置可以通过使用"-H"选项来调整。这个选项可以用来指定守护进程绑定监听接口的方式,可以是不同的网络接口和端口配置,也可以是指定的Unix套接字路径。例如,可以使用以下命令将Docker守护进程绑定到主机的所有网络接口上: sudo docker daemon -H tcp://0.0.0.0:2375 或者,可以将守护进程绑定到指定的套接字上: sudo docker daemon -H unix://home/docker/docker.sock 还可以同时绑定网络接口和套接字地址: sudo docker daemon -H tcp://0.0.0.0:2375 -H unix://home/docker/docker.sock 如果希望在每次运行客户端时不需要指定"-H"选项,可以修改DOCKER_HOST环境变量。例如,可以设置环境变量为: export DOCKER_HOST=:2375 这样,在运行docker命令时就不需要再指定"-H"标志了。 默认情况下,Docker的客户端-服务器通信是不经过认证的。这意味着,如果将Docker绑定到对外公开的网络接口上,任何人都可以连接到守护进程。然而,Docker 0.9及更高版本提供了TLS认证,可以在后面的文章中详细了解如何启用TLS认证。 此外,使用"-D"选项可以输出更详细的Docker守护进程信息。 对于配置的持久化保存,可以编写配置文件。在Ubuntu系统下,配置文件为"/etc/default/docker"文件。 综上所述,Docker守护进程Docker的核心组件,负责管理和控制Docker容器的运行。它以root权限运行,可以通过命令或服务来控制其状态、启动、关闭和重启。守护进程监听Unix套接字文件,可以通过配置选项来调整绑定方式。需要注意的是,为了安全起见,应仅向docker用户组中添加确实需要使用Docker的用户和程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恐龙让Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值