Containerd 是一款支持 OCI 规范的容器运行时,注重容器部署和生命周期管理的简单性、健壮性与可移植性,常被嵌入到 Docker 和 Kubernetes 等系统中。本文将详细介绍在 Ubuntu 22.04 服务器上通过二进制包手动安装 Containerd 的完整步骤,包括相关组件的安装与配置。

一、安装 Containerd 组件

首先,你需要学习如何通过二进制包手动安装Containerd容器运行时。在此过程中,你还得为Containerd安装一些必要组件,像runc和CNI(容器网络接口)插件都包含在内。

Containerd及其所有组件均可在其GitHub仓库中找到,随时可供安装。

安装Containerd的步骤如下:先访问Containerd的GitHub发布页面,获取最新版本的相关信息;接着复制该版本的下载链接,用wget工具将Containerd的二进制包下载下来;最后把下载的文件解压到/usr/local目录。

1. 安装containerd核心

Containerd 及其组件可在其 GitHub 存储库中获取。首先需要查看 Containerd GitHub 发布页面 以获取最新版本,然后通过以下命令下载并解压:

在本文撰写时,Containerd的最新版本为v2.1.3。你可以在Ubuntu服务器上使用wget命令下载该版本,再通过tar命令将其解压到/usr/local目录。

# 本文以 v2.1.3 版本为例
root@k8s-master:~# wget https://github.com/containerd/containerd/releases/download/v2.1.3/containerd-2.1.3-linux-amd64.tar.gz
root@k8s-master:~# tar Cxzvf /usr/local containerd-2.1.3-linux-amd64.tar.gz 
bin/
bin/containerd
bin/containerd-shim-runc-v2
bin/ctr
bin/containerd-stress

 2. 安装 runc

runc 是一款根据 OCI 规范生成容器的命令行工具,从 runc GitHub 发布页面 获取最新版本安装:

# 本文以 v1.3.0 版本为例
root@k8s-master:~# wget https://github.com/opencontainers/runc/releases/download/v1.3.0/runc.amd64
root@k8s-master:~# install -m 755 runc.amd64 /usr/local/sbin/runc
root@k8s-master:~# which runc
/usr/local/sbin/runc

安装完成后,可通过 which runc 命令验证,若输出 /usr/local/sbin/runc 则表示安装成功。

3. 安装 CNI 插件

CNI(容器网络接口)插件为容器提供网络功能,需从 CNI 插件 GitHub 发布页面 获取最新版本:

# 本文以 v1.3.0 版本为例
root@k8s-master:~# wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
# 创建安装目录并解压
root@k8s-master:~# mkdir -p /opt/cni/bin
root@k8s-master:~# tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz 
./
./loopback
./bandwidth
./ptp
./vlan
./host-device
./tuning
./vrf
./sbr
./tap
./dhcp
./static
./firewall
./macvlan
./dummy
./bridge
./ipvlan
./portmap
./host-local

 二、配置 Containerd

安装完所有组件后,需进行如下配置以确保 Containerd 正常运行:

1. 生成默认配置文件

root@k8s-master:~# mkdir -p /etc/containerd/
root@k8s-master:~# containerd config default | sudo tee /etc/containerd/config.toml
version = 3
root = '/var/lib/containerd'
state = '/run/containerd'
temp = ''
disabled_plugins = []
required_plugins = []
oom_score = 0
imports = []
......

2. 启用 SystemdCgroup

该操作会将配置文件中的 SystemdCgroup = false 改为 SystemdCgroup = true,以支持 systemd 控制组:

root@k8s-master:~# sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

验证是否启动只需要grep配置即可

root@k8s-master:~# cat /etc/containerd/config.toml | grep -i systemdcgroupSystemdCgroup = trueroot@k8s-master:~# journalctl -u containerd | grep -i "systemdcgroup"
Jul 19 10:45:13 k8s-master containerd[16895]: time="2025-07-19T10:45:13.086716772+08:00" level=info msg="starting cri plugin" config="{\"containerd\":{\"defaultRuntimeName\":\"runc\",\"runtimes\":{\"runc\":{\"runtimeType\":\"io.containerd.runc.v2\",\"runtimePath\":\"\",\"PodAnnotations\":[],\"ContainerAnnotations\":[],\"options\":{\"BinaryName\":\"\",\"CriuImagePath\":\"\",\"CriuWorkPath\":\"\",\"IoGid\":0,\"IoUid\":0,\"NoNewKeyring\":false,\"Root\":\"\",\"ShimCgroup\":\"\",\"SystemdCgroup\":true},\"privileged_without_host_devices\":false,\"privileged_without_host_devices_all_devices_allowed\":false,\"cgroupWritable\":false,\"baseRuntimeSpec\":\"\",\"cniConfDir\":\"\",\"cniMaxConfNum\":0,\"snapshotter\":\"\",\"sandboxer\":\"podsandbox\",\"io_type\":\"\"}},\"ignoreBlockIONotE

 如果没有此配置,则手动添加即可。

找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 部分(如果没有则手动创建层级),添加 SystemdCgroup = true

root@k8s-master:~# cat /etc/containerd/config.toml | grep -ni -C 5 'systemdcgroup'
95-          snapshotter = ''
96-          sandboxer = 'podsandbox'
97-          io_type = ''
98-
99-          [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
100:            SystemdCgroup = true
101-            BinaryName = ''
102-            CriuImagePath = ''
103-            CriuWorkPath = ''
104-            IoGid = 0
105-            IoUid = 0

如果输出中包含 SystemdCgroup: true,则表示手动配置成功。此配置在 Kubernetes 环境中尤为重要,确保容器的 cgroup 驱动与 kubelet 保持一致(均为 systemd)。 

3. 设置 systemd 服务

直接复制即可

root@k8s-master:~# cat /etc/systemd/system/containerd.service
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target dbus.service[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerdType=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999[Install]
WantedBy=multi-user.target

4. 启动并启用服务 

root@k8s-master:~# systemctl daemon-reload
root@k8s-master:~# systemctl start containerd
root@k8s-master:~# systemctl enable containerd

5. 验证服务状态

执行 systemctl status containerd 命令,若输出中显示 active(running) 则表示服务启动成功。

root@k8s-master:~# systemctl status containerd.service 
● containerd.service - containerd container runtimeLoaded: loaded (/etc/systemd/system/containerd.service; enabled; vendor preset: enabled)Active: active (running) since Sat 2025-07-19 09:57:57 CST; 12s agoDocs: https://containerd.ioMain PID: 3744 (containerd)Tasks: 9Memory: 13.1MCPU: 178msCGroup: /system.slice/containerd.service└─3744 /usr/local/bin/containerdJul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.274448607+08:00" level=info msg="Start recovering state"
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.274750311+08:00" level=info msg="Start event monitor"
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.274911742+08:00" level=info msg="Start cni network conf syncer for default"
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.275083463+08:00" level=info msg="Start streaming server"
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.275362835+08:00" level=info msg="Registered namespace \"k8s.io\" with NRI"
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.275605709+08:00" level=info msg="runtime interface starting up..."
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.275738617+08:00" level=info msg="starting plugins..."
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.275879079+08:00" level=info msg="Synchronizing NRI (plugin) with current runtime stat>
Jul 19 09:57:57 k8s-master containerd[3744]: time="2025-07-19T09:57:57.276191212+08:00" level=info msg="containerd successfully booted in 0.084635s"
Jul 19 09:57:57 k8s-master systemd[1]: Started containerd container runtime.

三、containerd配置国内镜像源

1. 编辑配置文件

vi /etc/containerd/config.toml

2. 添加镜像加速配置

在 [plugins."io.containerd.grpc.v1.cri"] 部分下,补充 registry.mirrors 配置(若已有该节点,直接添加内容): 

[plugins."io.containerd.grpc.v1.cri"]# 已有的其他配置...[plugins."io.containerd.grpc.v1.cri".registry][plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://docker.1panel.live","https://docker.1ms.run","https://dytt.online","https://lispy.org","https://docker-0.unsee.tech","https://docker.xiaogenban1993.com","https://666860.xyz","https://hub.rat.dev","https://docker.m.daocloud.io","https://demo.52013120.xyz","https://proxy.vvvv.ee","https://registry.cyou"]

3. 重启 containerd 生效

systemctl daemon-reload
systemctl restart containerd
  • 上述 endpoint 列表包含多个国内可用的 DockerHub 加速镜像,若某个地址不可用,会自动尝试下一个。
  • 配置后,containerd 拉取 docker.io 镜像时会优先使用这些加速源,提升拉取速度。

四、Containerd常用命令汇总

1. 名称空间管理:资源隔离的核心

名称空间是 Containerd 实现资源隔离的关键机制,通过不同的命名空间,可以将容器、镜像等资源进行逻辑划分,避免相互干扰。

2. 基本操作示例

  • 查看所有名称空间
ctr ns ls

该命令会列出当前系统中所有的 Containerd 名称空间,方便了解资源隔离的范围。

  • 创建名称空间
ctr ns create myonly

新建一个名为 myonly 的名称空间,后续可在该空间内管理独立的容器和镜像。

  • 删除名称空间
ctr ns rm linux96

删除不再使用的 linux96 名称空间,注意删除前需确保该空间内无运行的容器或重要镜像。

  • 带标签创建名称空间
ctr ns c linux96 linux97=true

创建 linux96 名称空间时添加标签 linux97=true,便于对名称空间进行分类管理。

3. 镜像管理:从拉取到推送的全流程

镜像作为容器的基础,其管理包括拉取、标签、推送、导入导出等操作,Containerd 提供了简洁高效的命令支持。

3.1. 基础操作示例
  • 查看指定命名空间的镜像
ctr -n myonly image ls

通过 -n 参数指定名称空间 myonly,查看该空间下的所有镜像列表。

  • 拉取第三方镜像
ctr -n myonly image pull registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

从阿里云镜像仓库拉取指定镜像到 myonly 名称空间,适用于快速获取所需容器镜像。

  • 为镜像打标签
ctr -n myonly image tag registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 myapp:v1

将原镜像重新标记为 myapp:v1,方便后续识别和使用。

3.2. 高级操作示例
  • 推送镜像到 Harbor
ctr image push -u admin:123456 harbor250.myonly.com/library/stress:v0.2

使用 -u 参数指定 Harbor 仓库的用户名和密码,将镜像推送到私有仓库,实现镜像的集中管理。

  • 镜像导入导出

 # 导出镜像

ctr image export app_v1.tar.gz registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

 # 导入镜像

ctr image import app_v1.tar.gz

通过导出 / 导入操作,可在无网络环境下迁移镜像,灵活应对不同部署场景。

  • 删除指定镜像
ctr -n myonly image rm myonly:linux96

清理 myonly 名称空间中不再需要的镜像,释放存储空间。

3.3. 容器生命周期管理:从创建到销毁的全流程

容器的生命周期包括创建、启动、暂停、恢复、停止、删除等阶段,Containerd 通过 containers 和 task 命令组实现精细化管理。

4. 容器操作示例

  • 创建容器
ctr -n myonly containers create myapp:v1 app1

在 myonly 名称空间中,基于 myapp:v1 镜像创建名为 app1 的容器(此时容器处于未运行状态)。

  • 查看容器列表
ctr -n myonly containers ls

列出 myonly 名称空间中所有已创建的容器,包括运行和未运行的状态。

  • 删除容器
ctr -n myonly containers rm app1

删除指定容器,删除前需确保容器对应的任务已停止。

5. 任务管理示例

  • 启动容器任务
ctr -n myonly task start -d app1

以后台模式(-d)启动 app1 容器的任务,此时容器进入运行状态。

  • 查看运行中任务
ctr -n myonly task ls

查看 myonly 名称空间中所有正在运行的容器任务。

  • 进入容器内部
ctr -n myonly task exec -t --exec-id $RANDOM app1 sh

通过 exec 命令进入运行中的 app1 容器,-t 参数分配终端,--exec-id 指定随机 ID 避免冲突。

  • 任务控制(暂停 / 恢复 / 停止)
# 暂停任务ctr -n myonly task pause app1# 恢复任务ctr -n myonly task resume app1# 停止任务ctr -n myonly task kill app1

灵活控制容器任务的运行状态,适用于调试或资源调整场景。

6. 存储与网络管理:容器的资源配置

6.1. 存储卷挂载示例

Containerd 支持通过绑定挂载实现宿主机与容器的文件共享,可指定读写权限:

  • 只读挂载
ctr run -d --mount type=bind,src=/host/data,dst=/container/data,options=rbind:ro myapp:v1 app2

将宿主机 /host/data 目录以只读模式挂载到容器 /container/data 目录,防止容器内误修改宿主机文件。

  • 读写挂载
ctr run -d --mount type=bind,src=/host/logs,dst=/container/logs,options=rbind:rw myapp:v1 app3

以读写模式挂载目录,适用于容器需要向宿主机写入日志、数据等场景。

6.2. 网络配置示例
  • 共享宿主机网络
ctr -n myonly run -d --net-host myapp:v1 app4 /bin/sh -c "while true; do sleep 3600; done"

通过 --net-host 参数让容器共享宿主机的网络命名空间,容器可直接使用宿主机的 IP 和端口。

7. 监控与排错:保障容器稳定运行

7.1. 容器指标查看
ctr -n myonly task metrics app1

查看 app1 容器的资源使用指标,包括 CPU、内存、I/O 等,帮助分析容器性能。

7.2. 常见报错处理
  • HTTPS 证书错误

错误现象:x509: certificate signed by unknown authority

解决方案:

    1. 确保 CA 证书正确安装到 /etc/docker/certs.d/域名目录
    1. 使用 --plain-http 参数强制使用 HTTP 协议
  • 镜像推送认证失败

错误现象:401 Unauthorized

解决方案:

ctr image push --plain-http -u 用户名:密码 镜像名

8. 高级特性与实用命令

8.1. 跨命名空间操作
ctr -n 命名空间名

通过 -n 参数可直接操作指定命名空间的资源,无需切换上下文。

8.2. 快照管理

(需参考官方文档进行深度配置)

8.3. 镜像导出
ctr image export 导出文件.tar.gz 镜像名
8.4. 容器日志查看
ctr -n myonly task logs app1
8.5. 资源限制
ctr run --memory-limit 512M --cpus 1 镜像名 容器名
8.6. 容器元数据查看
ctr -n myonly containers info app1

9. 常用命令汇总表

操作类别

命令用途

示例命令

名称空间管理

查看命名空间

ctr ns ls

名称空间管理

创建命名空间

ctr ns create myonly

镜像管理

拉取镜像

ctr -n myonly image pull 镜像地址

镜像管理

推送镜像到仓库

ctr image push -u 用户名:密码 镜像名

容器管理

创建容器

ctr -n myonly containers create 镜像名 容器名

容器管理

启动容器任务

ctr -n myonly task start -d 容器名

存储管理

只读挂载目录

ctr run -d --mount type=bind,src=/host,dst=/container,options=rbind:ro 镜像名 容器名

网络配置

共享宿主机网络

ctr run -d --net-host 镜像名 容器名

监控排错

查看容器指标

ctr -n myonly task metrics 容器名

高级操作

限制容器资源

ctr run --memory-limit 512M --cpus 1 镜像名 容器名

通过上述命令,你可以轻松完成 Containerd 从基础到进阶的各项操作。无论是日常的容器管理,还是复杂的镜像分发与资源控制,这些命令都能满足你的需求。在实际使用中,可根据具体场景灵活组合,提升容器管理效率。

五、总结

通过以上步骤,完全可以在 Ubuntu 22.04 上手动完成了 Containerd 容器运行时的安装与配置,包括核心组件、runc 和 CNI 插件的安装,以及相关服务的设置。完成后,可以基于此环境进行容器开发,或作为 Kubernetes 集群的一部分使用。如果需要管理容器,可进一步安装 nerdctl 工具(与 Docker CLI 兼容),以便更便捷地操作容器。祝入门顺利!

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

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

相关文章

Hadoop与云原生集成:弹性扩缩容与OSS存储分离架构深度解析

Hadoop与云原生集成的必要性Hadoop在大数据领域的基石地位作为大数据处理领域的奠基性技术,Hadoop自2006年诞生以来已形成包含HDFS、YARN、MapReduce三大核心组件的完整生态体系。根据CSDN技术社区的分析报告,全球超过75%的《财富》500强企业仍在使用Had…

飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器

作为国家级高新技术企业,飞算科技专注于自主创新,在数字科技领域持续深耕,用前沿技术为各行业客户赋能,助力其实现数字化转型升级的飞跃。​飞算科技凭借深厚的技术积累,将互联网科技、大数据、人工智能等技术与实际应…

多线程Python爬虫:加速大规模学术文献采集

1. 引言 在学术研究过程中,高效获取大量文献数据是许多科研工作者和数据分析师的需求。然而,传统的单线程爬虫在面对大规模数据采集时,往往效率低下,难以满足快速获取数据的要求。因此,利用多线程技术优化Python爬虫&a…

NX717NX720美光固态闪存NX724NX728

美光NX系列固态闪存深度解析:技术、性能与市场洞察一、技术架构与核心创新美光NX系列固态闪存(包括NX717、NX720、NX724、NX728)的技术根基源于其先进的G9 NAND架构。该架构通过5纳米制程工艺和多层3D堆叠技术,实现了存储单元密度…

浅谈——C++和C#差异

虽然这个话题看着似乎有些关公战秦琼的味道,但是作为游戏开发者,C和C#一定是绕不开的两门语言。不过虽然说是比较二者差异,因为我学习的过程主要是先学C,所以我先基于C的认知,再来聊聊C#之中的不同。(为什么…

rocky9-zabbix简单部署

目录 一、准备 1、(rocky9) 2、配置数据库 二、配置文件 1、导入初始架构与数据 2、配置相关文件 三、启动服务 1、浏览器访问 2、解决乱码问题 ​编辑 四、监控 ① 添加主机 1、修改配置文件 2、启动服务 3、网页添加 ②添加监控模块 1…

tabBar设置底部菜单选项、iconfont图标(图片)库、模拟京东app的底部导航栏

欢迎来到我的UniApp技术专栏!🎉 在这里,我将与大家分享关于UniApp开发的实用技巧、最佳实践和项目经验。 专栏特色: 📱 跨平台开发一站式解决方案 🚀 从入门到精通的完整学习路径 💡 实战项目经…

7.22总结mstp,vrrp

一、MSTP技术MSTI和MSTI域根MSTP中的端口角色3. MSTP工作原理 MSTP 计算方法• CST/IST的计算和RSTP类似 • MSTI的计算仅限于区域内 • MSTI计算参数包含在IST BPDU中,和IST的计 算同步完成&#xfe…

【电脑】网卡的基础知识

网卡(Network Interface Card, NIC)是计算机中用于连接网络的关键组件之一,它负责管理和发送数据包到互联网或其他局域网设备。下面是一些关于网卡的详细知识:网卡的基本结构MAC地址:每个网卡都有一个唯一的物理地址&a…

IPv4枯竭时代:从NAT技术到IPv6的演进之路

🔍 开发者资源导航 🔍🏷️ 博客主页: 个人主页📚 专栏订阅: JavaEE全栈专栏 IPv4(Internet Protocol version 4)是互联网最核心的通信协议之一,自 1981 年正式标准化以来…

模式结构-微服务架构设计模式

需求(Forces)结果上下文(Resulting context)相关模式(Related patterns)需求:必须解决的问题需求部分描述了必须解决的问题和围绕这个问题的特定上下文环境。需求有时候是相互冲突的,所以不能指望把他们全部都解决(必须取舍&#…

30个常用的Linux命令汇总和实战场景示例

下面汇总常用的 30 个常用的 Linux 命令,每个都附有简要说明和典型示例,适合日常开发、服务器维护或系统学习使用。30 个常用的 Linux 命令汇总 一、文件与目录操作(基础)命令说明示例ls列出文件和目录ls -l 显示详细信息cd切换目…

Taro 网络 API 详解与实用案例

Taro 网络 API 详解与实用案例 在现代前端开发中,网络通信是不可或缺的一环。Taro 作为一款多端开发框架,提供了丰富且统一的网络 API,帮助开发者在小程序、H5、React Native 等多端环境下高效地进行数据交互。本文将详细介绍 Taro 的四大网…

Bitbucket平台的HTTP Access Tokens操作手册

在Bitbucket平台添加HTTP Access Tokens(用于替代密码进行认证)。 1. 登录Bitbucket并访问个人设置 打开 Bitbucket 并登录账号。点击右上角头像 → 选择 Manage account。 2. 生成Access Token 在左侧菜单中选择 Access tokens(位于 Sec…

低成本、高泛化能力的无人机自主飞行!VLM-Nav:基于单目视觉与视觉语言模型的无地图无人机导航

作者:Gobinda Chandra Sarker1^{1}1, AKM Azad2^{2}2, Sejuti Rahman1^{1}1, Md Mehedi Hasan1^{1}1单位:1^{1}1达卡大学,2^{2}2伊玛目穆罕默德伊本沙特伊斯兰大学论文标题:VLM-Nav: Mapless UAV-Navigation Using Monocular Visi…

Docker Desktop 安装到D盘(包括wsl)

默认WSL虚拟机位置&#xff1a; C:\Users\<用户名>\AppData\Local\Docker\wsl重装DockerDesktop下载安装包Docker Desktop Installer.exe在D盘创建文件夹D:\Program Files\DockerDesktopD:\Program Files\DockerDesktop\data 在cmd运行 start /w "" "Dock…

网络协议(三)网络层 IPv4、CIDR(使用子网掩码进行网络划分)、NAT在私网划分中的应用

利用子网掩码进行子网划分 这是一个模拟搭建的私网&#xff0c;有俩台主机ab。现在主机a要给云端服务器发送一条消息&#xff0c;这条消息怎么才能到达云端服务器呢&#xff1f;确定这条数据中的源端为本地ip的9000端口&#xff0c;目的端为24.24.24.8888端口&#xff0c;首先&…

8.4 Java 原生 TCP Socket 实现 HTTP 请求解析和请求分发

使用 Java 原生 TCP Socket 实现 HTTP 请求解析和请求分发&#xff0c;是一个理解 HTTP 协议底层原理的好方法。虽然 Java 提供了 HttpServer 类来简化 HTTP 服务器开发&#xff0c;但如果你想从 TCP 层 开始构建一个简单的 HTTP 服务器&#xff0c;可以使用 ServerSocket 和 S…

自研能管项目开发界面

自研能管软件实现一个界面开发 目的&#xff1a; ​ 通过接口方式实现展示哪些数据例如&#xff1a; ​ 已知制丝车间下的计量电表&#xff0c;在可视化界面通过点击制丝车间的方式&#xff0c;自动在MySQL存储制丝车间的电表数据(假设是每分钟存储一次)&#xff0c;前端即可以…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 基于wordcloud库实现词云图

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解基于wordcloud库实现词云图 视频在线地址&…