配置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 redisd75e715b2...​# 按标记过滤容器列表:root@docker ~]# docker ps --filter label=test-redisCONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMESd75e715b27d8   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 pruneWARNING! 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 testtest[root@docker ~]# docker stop testtest

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

 [root@docker ~]# docker events2024-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-reloadsystemctl restart docker

(4)验证配置:

 systemctl show --property=Environment docker

致谢

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 13 系统自定义安全水印

效果 源码实现 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java public final void showSafeModeOverlay() {View v = LayoutInflater.from(mContext).inflate(com.android.internal.R.layout.safe_mode, null);WindowManager.LayoutP…

【GESP】2023年12月图形化二级 -- 小杨报数

小杨报数 【题目描述】 小杨需要从 1 1 1到 N N N报数。在报数过程中,小杨希望跳过 M M M的倍数。例如,如果 N 5 N5 N5, M 2 M2 M2,那么小杨就需要依次报出 1 1 1, 3 3 3, 5 5 5。 默认小猫角色和白色背…

土地档案管理关系参考论文(论文 + 源码)

【免费】javaEE土地档案管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296786 土地档案管理关系 摘 要 研究土地档案管理关系即为实现一个土地档案管理系统。土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理,建成标准化的…

LeetCode 106.从中序与后序遍历序列构造二叉树

LeetCode 106.从中序与后序遍历序列构造二叉树 1、题目 题目链接:106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并…

uniapp管理后台编写,基于uniadmin和vue3实现uniapp小程序的管理后台

一,创建uniAdmin项目 打开开发者工具Hbuilder,然后点击左上角的文件,点新建,点项目。如下图。 选择uniadmin,编写项目名,然后使用vue3 记得选用阿里云服务器,因为最便宜 点击创建,等待项目创…

【Rollup】用rollup从0到1开发一个js插件并发布到npm

Rollup 是一个 JavaScript 模块打包器,专注于打包 ES6 模块将其编译回多种模块化格式,尤其适合打包库和框架,因为它可以生成更小、更高效的代码,并且特别适合将代码打包成可在浏览器中使用的库。 从0到1开发js插件 1.创建文件夹…

【打工日常】云原生之搭建一款轻量级的开源Markdown笔记工具

一、flatnotes介绍 1.flatnotes简介 一个自托管的,无数据库的笔记网络应用程序,利用平面文件夹的markdown文件进行存储。 2.项目特点 A.干净简单的用户界面B.响应式移动端界面C.原生/所见即所得Markdown编辑模式D.高级搜索功能E.笔记“标签”功能F.…

Wix打包后安装包直接签名安装失败原因

生成的游戏启动器wix安装包直接打包后进行签名安装会失败,看安装日志显示的错误为 Failed to extract all files from container, erf: 1:2:0 网上搜到的解决方案 需要用insignia工具解包,解包后的文件签一次名,再打一次包,再…

数字孪生引擎国产信创环境适配靠谱么?

近期我们组织了一次国产化环境适配以及产品国产化产品替换的交流,虽然从属于不同的业务条线,但是在过去一段时间多多少少都承受不同程度的信创压力,尤其是自然资源业务方面,由于自然资源大多数的业务是属于强GIS的范畴&#xff0c…

459.重复的子字符串

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。 示例 2: 输入: "aba&q…

YOLOv5-7.0改进(四)添加EMA注意力机制

前言 关于网络中注意力机制的改进有很多种,本篇内容从EMA注意力机制开始! 往期回顾 YOLOv5-7.0改进(一)MobileNetv3替换主干网络 YOLOv5-7.0改进(二)BiFPN替换Neck网络 YOLOv5-7.0改进(三&…

Mac IDEA 自动补全mybatis sql语句

导航 Mac IDEA 自动补全mybatis sql语句一、点击IDEA 右侧Database选项二、选择添加对应数据库三、输入数据库信息和方案四、输入数据库信息和方案五、成功 Mac IDEA 自动补全mybatis sql语句 背景: 想在Mapper中,能够实现自动检索数据库表和对应的字段…