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

news2024/11/17 9:35:11

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

本章节的快速目录导航: 

一、配置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

致谢

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1664634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML【常用的标签】、CSS【选择器】

day45 HTML 继day44,w3cschool 常用的标签 k) 表格 表格由 table 标签来定义。每个表格均有若干行(由 tr 标签定义),每行被分割为若干单元格(由 标签定义)。字母 td指表格数据(table data&…

Qt | QSpinBox 类 QDoubleSpinBox 类(微调框)

01、QSpinBox 类 1、QSpinBox类是 QAbstractSpinBox 类的直接子类和具体实现, 2、QSpinBox 类被设计用于处理整数和离散值集合,对于浮点值使用 QDoubleSpinBox 类实现。 3、QSpinBox 默认只支持整数值,但可通过其内部的成员函数进行扩展,以支持使用不同的 字符串。 02…

ppt通过修改幻灯片母版修改页脚

修改幻灯片母版 幻灯片母版就可以了,就可以修改页脚

c++多态机制

多态 在 C 中,多态(Polymorphism)是一种面向对象编程的重要概念,它允许不同类的对象对同一消息做出不同的响应。具体来说,多态性允许基类的指针或引用在运行时指向派生类的对象,并且根据对象的实际类型来调…

汇昌联信科技:做拼多多网店要押金吗?

做拼多多网店要押金吗?”这个问题,其实与拼多多的平台规则有关。在开店之前,商家需要详细了解平台的各项规定和费用构成,这样才能做好充足的准备。 一、明确回答问题 做拼多多网店,不需要支付押金。拼多多的入驻门槛相对较低&…

烽火三十六技丨网络资产安全治理平台新版本发布,一文看懂四大核心优势

云计算、移动互联网、物联网等技术飞速发展,网络环境愈发开放互联,原有的资产管理方式已难以适应当下的变化。同时,网络资产需求的突发性和人为疏忽,也时常导致资产数量不明、类型模糊、安全漏洞检查不全面等问题。因此&#xff0…

增加表空间的数据文件

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 表空间创建完成后,后期还可以为表空间增加数据文件,以扩大数据的存储空间。增加表空间数据文件的基本语法结构如下所示。 ALTER TABLESPACE 表空间名…

SpringCloud:服务拆分和远程调用

程序员老茶 🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 P   S : 点赞是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈&#…

详解drop,delete,truncate区别

在SQL中,"DROP"、"DELETE"和"TRUNCATE"是用于删除数据的不同命令,它们之间有一些重要的区别: DROP: DROP用于删除数据库对象,例如删除表、视图、索引、触发器等。使用DROP删除的对象将…

如何撰写一份优秀的产品需求文档?看完真的不用加班了!

产品需求文档(PRD)是产品经理最主要的可视化交付物,刚入门的产品会疑惑产品需求文档应该如何撰写,产品老鸟们也会头痛产品文档如何高效更新和维护。本文会详细介绍2024年最新的极简产品文档撰写和管理方案,建议阅读并收…

数据库被攻击后出现1044 - access denied for user ‘root‘@‘% ‘ to database table

MySQL数据库被攻击后,数据库全部被删除,并且加一个一个勒索的数据,向我索要btc, 出现这个问题就是我的数据库密码太简单了,弱密码,被破解了,并且把我权限也给修改了 导致我操作数据库时&#…

【大数据·hadoop】在hdfs上运行shell基本常用命令

一、准备工作 1.1格式化并启动Hadoop服务 参见Hadoop在ubuntu虚拟机上的伪分布式部署|保姆级教程的4.7节 二、HDFS常用命令 接着,就愉快地在刚刚的命令行里敲命令啦 1.显示hdfs目录结构 hadoop fs -ls -R /hadoop fs: 这是Hadoop文件系统命令行的一部分&#x…

ICode国际青少年编程竞赛- Python-4级训练场-综合训练4

ICode国际青少年编程竞赛- Python-4级训练场-综合训练4 1、 Dev.turnLeft() Dev.step(3) Dev.turnRight() Dev.step(3) Dev.turnLeft() Dev.step(4)2、 for i in range(3):Dev.step(2)Dev.turnRight()while Flyer[i].disappear():wait()Dev.step(2 i)Dev.turnLeft()3、 …

【linux僵尸进程查看与删除】

linux僵尸进程查看与删除 linux僵尸进程查看linux僵尸进程停止方法僵尸进程产生原因僵尸进程的危害 linux僵尸进程查看 使用top 命令查看,发现有13 zombie,即13个僵尸进程。 linux僵尸进程停止方法 使用ps -ef | grep defunct 命令(或ps …

嵌入式C语言高级教程:实现基于STM32的无人机飞控系统

无人机飞控系统是无人机的大脑,负责处理来自各种传感器的数据并控制无人机的飞行。本教程将指导如何在STM32微控制器上实现一个基础的无人机飞控系统。 一、开发环境准备 硬件要求 微控制器:STM32F405RGT6,因其高性能和大量的输入输出接口…

(动画详解)LeetCode20.有效的括号

题目描述 20. 有效的括号 - 力扣(LeetCode) 解题思路 栈的方法 遍历整个字符串 当检测到左括号的时候,就让左括号入栈 当检测到右括号的时候,就让左括号出栈与右括号对比 如果相等则继续比较直到结束,如果不相等…

农业生产中,土壤墒情的监测方法有哪些?

农业是人类的生命之源,而土壤墒情则是农业生产的基础。我们应该倍加珍惜土地资源,合理利用水资源,努力创造出更加宜人的生长环境。让每一滴水都能为农作物带来生机,让每一寸土地都能孕育丰收。这样才能实现农业可持续发展的目标&a…

leetCode刷题记录4-面试经典150题-2

文章目录 不要摆,没事干就刷题,只有好处,没有坏处,实在不行,看看竞赛题面试经典 150 题 - 2210. 课程表 II909. 蛇梯棋 不要摆,没事干就刷题,只有好处,没有坏处,实在不行…

问题:幂等性 分布式session

web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成,举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页,现在在toTrade请求中使用异步任务编排Completab…

ROS2 安装与测试

文章目录 ROS2 安装与测试ROS2 安装1. 设置编码2. 添加源3. 安装 ROS24. 设置环境变量 ROS2 示例测试实例一:命令行实例实例二:小海龟仿真实例 参考链接 ROS2 安装与测试 ROS2 安装 基于 Ubuntu 22.04 LTS 操作系统。 1. 设置编码 sudo apt update &…