云时代【6】—— 镜像 与 容器

news2024/9/22 13:33:48

云时代【6】—— 镜像 与 容器

  • 四、Docker
    • (三)镜像 与 容器
      • 1. 镜像
        • (1)定义
        • (2)相关指令
        • (3)实战演习
          • 镜像容器基本操作
          • 离线迁移镜像
          • 镜像的压缩与共享
      • 2. 容器
        • (1)定义
        • (2)容器的生命周期
        • (3)基本指令
          • 与容器交互
          • 容器的资源使用
          • 容器与宿主机
          • 容器与镜像
        • (4)实战演习
          • A. 实际操作案例
          • B. MySQL 与 Redis的容器化安装
          • C. Java 程序的容器制作
          • D. 容器资源更新

四、Docker

(三)镜像 与 容器

1. 镜像

(1)定义

镜像 的作用可以看成:纳戒 + 模板。 镜像”模板“很好理解它指的是:镜像可以被快速复制(拉取);而镜像”纳戒“的本质是: **Union FS** 联合文件系统
它可以将几层目录挂载到一起,形成一个虚拟文件系统。每一层文件系统我们叫做一层 layer。联合文件系统可以对每一层文件系统
设置三种权限:只读
**(readonly)**、读写**(readwrite)**和写出**(whiteout-able)**,但是** ****docker**镜像中每一层文件系统都是只读的。 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

理解了镜像”纳戒“的本质是联合文件系统之后,我们就能很好的理解镜像的优缺点了。

  • 优点:

    • 屏蔽了环境的差异
    • 分层的存储:可以充分利用共享层(减少存储空间的占用)
    • 快速分发(只添加缺失的层)
  • 缺点:

    • 镜像添加的依赖占用机器的空间
    • 寻找文件只能一层一层找,会带来一定的性能损失

(2)相关指令
docker rmi [镜像]:[版本]
docker rmi 'IMAGE ID'

# --no-prune 不移除该镜像的过程镜像

image.png

docker run -it --name mybusybox busybox:1.35.0 sh
docker rmi busybox:1.35.0 # error
docker rmi -f busybox:1.35.0 # 但是强制删除也没必要,可以先删除容器,再删除镜像

image.png
image.png


docker save -o xxx.tar [镜像]:[版本]

# 下图大小没有发生变化主要原因是:打了同一个镜像!(IMAGE ID相同)

image.png

docker load -i xxx.tar

image.png

docker load -i xxx.tar -q 
# -q 是安静模式(不显示进度条)

image.png


docker history [镜像]:[版本号]

# --no-trunc 不做截断(显示全部信息)

image.png


# 该层镜像不被任何一层镜像使用
docker image prune

# -a 删除全部不被容器使用的镜像

(3)实战演习

镜像容器基本操作
docker search busybox
docker pull busybox:1.36.0
docker images busybox

# 查看镜像的下载位置
cd /data/var/lib/docker # 在 /etc/docker/daemon.json
cd overlay2
cat repositories.json

# 查看镜像的详细信息
docker image inspect busybox:1.36.0
# 查看镜像的分层
docker history busybox:1.36.0

# 给镜像打标签
docker tag busybox:1.36.0 lllzxx/fortest:v1.36.0
docker push lllzxx/fortest:v1.36.0 -a

# 查看登录站点
cat /root/.docker/config.json

# 拉取镜像
docker pull lllzxx/fortest:v1.36.0

# 运行容器
docker run -it -d --name mybusybox -h myweb -e myenv=test lllzxx:v1.36.0 sh
ifconfig
exit

# 查看所有容器
docker ps -a

# 删除镜像
docker rmi lllzxx/fortest:v1.36.0
docker rm 'IAMGE ID' # 删除容器

image.png
image.png

离线迁移镜像
# A服务器
docker pull lllzxx/fortest:v1.36.0
cd /data/lllzxx
docker images
docker save -o mybusybox.tar lllzxx/fortest:v1.36.0

# B服务器
docker version # 检查是否安装Docker,没有则安装
mkdir -p /data/lllzxx
cd /data/lllzxx
ll

# A服务器
scp mybusybox.tar root@IP:/data/lllzxx # 需要输入密码

# B服务器
ll
docker load -i mybusybox.tar
docker images
docker run -it lllzxx/fortest:v1.36.0 sh
ifconfig
ping www.baidu.com
exit

镜像的压缩与共享
docker images nginx
docker pull [镜像]:[版本号] 
# 查看远端和本地的大小是否一样?
# 不一样。远端:①节省存储空间 ②减少网络带宽
# 如果远端的镜像是相同的,只是不同别名的话并不会真正上传,只会标示出不同镜像

2. 容器

(1)定义

容器是镜像的运行实体。镜像是静态的只读文件,而是容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。容器本质上是主机运行的一个进程,但是该进程被进行了各种各样的限制,无法看到主机的进程、环境变量、网络等信息。
注:不同角度理解会对容器做出不同定义,其他角度见”云时代【1】“。

(2)容器的生命周期

image.png

(3)基本指令
docker create --name mywebs1 -p 8080:80 nginx:1.23.4 # 创建容器(拧钥匙)
docker ps -a | grep mywebs1
docker start mywebs1 # 启动容器(踩油门)
docker ps -a | grep mywebs1

image.png

docker container inspect mywebs2

docker container inspect -s mywebs2 # -s 显示总的文件大小

image.png

docker stop mywebs2 # 停止-踩刹车
# 使用 stop 超时也会杀死容器

docker start mywebs2 # 开启-踩油门

image.png

docker ps -a | grep mywebs2

docker logs -f -n 5 mywebs2

docker restart mywebs2

docker restart -s 9 mywebs2

image.png
image.png

docker kill mywebs2

docker wait mywebs3

image.png

docker run -d --name mywebs3 nginx:1.23.4
docker ps -a
docker stop mywebs3
docker container prune
docker ps -a

image.png

docker rm -f [容器名] # -f 强制删除运行中的容器

# 重新 docker run 的话,名称和端口相同也不会冲突

image.png

docker logs mywebs2

# -f 跟踪日志输出
# -since="2099-01-01"
# -n x 多少条数据

image.png
image.png
image.png


与容器交互
docker attach mywebs2

# 使用 ctrl + c 之后会直接退出容器(熄火)

docker attach --sig-proxy=false mywebs2
# --sig-proxy 使用 ctrl + c 之后不会退出容器

image.png
image.png

docker exec -it mywebs2 bash

image.png

docker exec -it -d mywebs2 nginx -V # 在后台运行容器

docker exec -it -e mynginx=lllzxx mywebs2 bash # 设置容器的环境变量

docker exec -it mywebs2 cat /etc/passwd
docker exec -it -u nginx mywebs2 nginx -v # 指定用户

docker exec -it -w /etc mywebs2 bash # 指定工作目录

image.png
image.png
image.png
image.png


容器的资源使用
docker top mywebs2 

docker top mywebs2 aux # aux 能够查看资源使用情况

image.png

docker pause mywebs3
docker unpause mywebs3

image.png

docker stats -a --no-stream --no-trunc mywebs2

# -a 所有容器(停止的也打印)
# --format 打印模式,默认是表格,可以使用json
# --no-stream 不实时更新
# --no-trunc 不截断输出

image.png

docker stats --format json

image.png

docker rename [旧名字] [新名字]

image.png

free -m
docker stats mywebs2
docker update --memory 500m --memory-swap 500m mywebs2
docker stats mywebs2

# 一般来说都是会在创建容器的时候就规划好的

image.png


容器与宿主机
docker port mywebs2 

docker port mywebs2 80/tcp # 使用tcp协议的

image.png

docker cp mywebs2:/usr/share/nginx/html/index.html .
# .表示当前目录,即当前工作目录。
# ..表示父目录,即当前目录的上一级目录。

docker cp ./index.html mywebs2:/usr/share/nginx/html/index.html/

image.png
image.png

mkdir -p /data/lllzxx/textexport # -p 是递归地创建目录
cd /data/lllzxx/textexport
ls -l
docker export -o myweb3.tar mywebs3
docker import -m '将文件转回为镜像' mywebs3.tar mywebs3:v1.0 # 与 save 和 load 相比会丢失信息

image.png

# A服务器
docker pull lllzxx/fortest:v1.36.0
cd /data/lllzxx
docker images
docker save -o mybusybox.tar lllzxx/fortest:v1.36.0

# B服务器
docker version # 检查是否安装Docker,没有则安装
mkdir -p /data/lllzxx
cd /data/lllzxx
ll

# A服务器
scp mybusybox.tar root@IP:/data/lllzxx # 需要输入密码

# B服务器
ll
docker load -i mybusybox.tar
docker images
docker run -it lllzxx/fortest:v1.36.0 sh
ifconfig
ping www.baidu.com
exit
docker exec -it mywebs2 bash
echo "Hello World!" > /test.html
ls -l

docker diff mywebs2

image.png


容器与镜像
docker images
docker run -d --name mywebsforcommit nginx:1.23.4
docker ps | grep mywebsforcommit
docker images mywebsforcommit
docker commit mywebsforcommit mywebsforcommit:v1.0 # docker commit [容器] [镜像名]:[版本号]
docker images mywebsforcommit

image.png

docker exec -it mywebsforcommit bash
echo "Hello World!" > /testforcommit.txt
ls -l
exit
docker diff mywebsforcommit
docker commit mywebsforcommit mywebsforcommit:v2.0
docker run -it --rm mywebsforcommit:v2.0 bash
ls -l
cat testforcommit.txt
exit

image.png
image.png

docker commit -a 'lzxx' -m 'create by lzxx' -p mywebsforcommit mywebsforcommit:v3.0

# -a 指定创建者
# -m 描述信息
# -p 创建镜像时停止

image.png

docker commit -a 'lzxx' -m 'create by lzxx' -c 'CMD ["tail","-f","/etc/hosts"]' -p mywebsforcommit mywebsforcommit:v4.0
docker images mywebsforcommit
docker run -d --rm --name mywebsforcommit2 mywebsforcommit:v4.0
docker ps --no-trunc | grep mywebsforcommit

image.png


(4)实战演习

A. 实际操作案例
docker images nginx
docker run -d --name mynginx01 -p 8101:80 nginx:1.22.0
docker ps
docker container inspet mynginx01
docker logs -f -n 10 mynginx01
docker rm mynginx01
docker stop mynginx01
docker ps -a | grep mynginx01
docker create --name mynginx02 -p 8102:80 nginx:1.22.0
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02

docker kill mynginx02
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02

docker stop mynginx02
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02

docker ps -a | grep mynginx02
docker restart mynginx02
docker ps -a | grep mynginx02

docker pause mynginx02
docker ps -a | grep mynginx02
docker unpause mynginx02
docker ps -a | grep mynginx02
# 批量过滤
# ps : Process Status,即进程状态。
docker ps -a
docker stop mywebs1 mywebs2
docker ps
docker ps -f name=mywebs1
docker ps -f status=exited
docker ps -f ancestor=nginx:1.23.4
docker ps -q

# 批量操作
docker stop `docker ps -q`
docker ps -a

image.png

# A-1.attached模式--该模式是在前台运行,按 ctrl + c 就会退出容器,会简化开发的过程,但不能用于生产
docker run --name mynginx03 -p 8103:80 nginx:1.22.0 
docker ps | mynginx03

# A-2.detached模式--在后台运行
docker run -d --name myngine04 -p 8104:80 nginx:1.22.0
docker ps | mynginx04
exit # 断开连接
docker ps | mynginx04 # 依旧在运行
docker logs -f mynginx04


# B.attach 会把 attached模式 转为 detached模式
docker attach mynginx04
ctrl + c 
docker ps -a | mynginx04 


# C.interactive模式
# C-1.创建一个可交互的容器
docker run -it --name mynginx05 -p 8105:80 nginx:1.22.0 bash
ls /
cat /etc/*release*
nginx -v
nginx # 正式启动nginx
ctrl + c # 没有影响
exit # shell退出,也意味着:容器退出
# C-2.与后台运行的容器交互
docker run -it -d --name mynginx06 -p 8106:80 nginx:1.22.0
docker exec -it mynginx06 bash
curl 127.0.0.1
exit # shell退出,但容器依然正常运行
# 容器内部没有vim编辑器
docker run -it -d --name mynginx07 -p 8107:80 nginx:1.22.0
docker exec -it mynginx07 bash
cd /usr/share/nginx/html
ls -l
cat index.html
vi index.html # refuse
exit

mkdir -p /data/lllzxx/testcp
cd /data/lllzxx/testcp
ls -l
docker cp mynginx07:/usr/share/nginx/html/index.html .
vi index.html
docker cp ./index.html mynginx07:/usr/share/nginx/html/

docker exec -it mynginx07 bash
cd /usr/share/nginx/html
cat index.html

# 注意:cp 不支持容器与容器之间的拷贝
docker run -it --rm --name mynginx08 -p 8108:80 nginx:1.22.0 bash
nginx -v
exit
docker ps -a | grep mynginx08 # 查找不到

docker run -d --rm --name mynginx08 -p 8108:80 nginx:1.22.0 # 一停止就删除
docker ps | grep mynginx08
docker stop mynginx08
docker ps -a | grep mynginx08 # 同样查找不到
# restart: 
# no-不重启(默认);on-failure:3 指定重启次数;
# always-总是重启;unless-stopped-中途退出也重启
docker run -d --name mynginx09 -p 8109:80 --restart=always nginx:1.22.0
docker exec -it mynginx09 bash
nginx -s quit # 停止nginx服务
docker ps | mynginx09 # 发生重启

docker stop mynginx09 # 无法再次拉起
docker run -it --rm -e MYTEST1=1 -e MYTEST2=2 nginx:1.22.0 bash
env | grep MYTEST
exit

# 通过配置文件 设置环境变量
mkdir -p /data/lllzxx/mytestenv
cd /data/lllzxx/mytestenv
vi myenv.txt
docker run -it --rm --env-file=./myenv.txt nginx:1.22.0 bash
env | grep MYTEST
docker run --rm busybox ifconfig # 查看容器的
docker run --rm --net host busybox ifconfig # 使用宿主机的网络,查看宿主机的
# A服务器
docker run -d --name mynginx10 -p 8110:80 nginx:1.22.0
docker ps
docker exec -it mynginx10
cd /usr/share/nginx/html/
echo "Hello World" > index.html
cat index.html
exit
mkdir -p /data/lllzxx/testtar
cd /data/lllzxx/testtar
docker export -o mynginx10.tar mynginx10
ls -l

# B服务器
mkdir -p /data/lllzxx/testtar
cd /data/lllzxx/testtar

# A服务器
scp mynginx10.tar root@IP:/data/lllzxx/testtar # scp 在跨云的时候会有速度限制

# B服务器
docker import mynginx10.tar mynginx10:v10.0
docker images mynginex10
docker run -d --name mynginx10 -p 8010:80 mynginx10:v10.0 # refuse:CMD丢失。
docker inspect mynginx10:v10.0 # 还有很多其他源数据丢失
docker run -d --name mynginx10 -p 8010:80 nginx -g "daemon off" mynginx10:v10.0 

docker savedocker export 的区别可看下方文章:
docker save与docker export的区别_docker版本不同导致save-CSDN博客

docker run -d --name mynginx11 -p 8011:80 nginx:1.22.0 
docker logs -f mynginx11

# 流的重定向
docker logs mynginx11 > info.log 2>err.log # info.log 是标准信息流;err.log 是标准错误流

# 直接看Docker后台的目录
cd /data/var/lib/docker/containers
ls
docker ps
cd xxxxxxx
ls
cat xxxxx-json.log
docker run -d --name mynginx12 -p 8012:80 nginx:1.22.0 
docker stats mynginx12 # 整个容器总的资源占用
docker top mynginx12 aux # 容器中具体进程占用的资源

B. MySQL 与 Redis的容器化安装
docker run --name mysql -e MYSQL_ROOT_PASSWORD=lzxx@mysql -p 8201:3306 -d mysql:5.7
docker images
docker ps | grep mysql
docker exec -it mysql bash
mysql -u root -p # lzxx@mysql
exit # 退出 MySQL
exit # 退出 容器

image.png
image.png
image.png
image.png

docekr run --name redis -d -p 8300:6379 redis:7
docker ps | grep redis
docker exec -it redis bash
redis-cli
set sellcount 1
get sellcount
exit # 退出Redis
exit # 退出容器

C. Java 程序的容器制作
docker pull ubuntu:22.04
docker images | grep ubuntu
docker run -it --name myjava -p 8080:80 ubuntu:22.07 bash
# 使用中科大源拉取镜像,记得更新缓存
apt search jdk
apt-get install java-1.8.0-openjdk.x86_64 -y
java -version
exit

mkdir -p /data/lllzxx/myapp
cd /data/lllzxx/myapp
# 上传 .jar 包 :scp mynginx10.tar root@IP:/data/lllzxx/testtar
ls -l
docker cp ./myapp.jar myjava:/

docker exec -it myjava bash
ls /
java -jar myapp.jar
# 访问地址:IP:8080/hello/docker
exit # 现在是以前台方式运行,可以写 run 指令,也可以写 DockerFile

D. 容器资源更新
# A窗口
docker pull java:8
docker run -it --name myjava2 java:8 bash

# B窗口
cd /data/lllzxx/myapp
ls -l
docker cp myapp.java myjava2:/

# A窗口
ls -l
java -jar myapp.jar

# C窗口
docker stats myjava2

# D窗口
docker update -m 200m --memory-swap 200m myjava2 # 两者一样即只能使用物理内存而不能使用交换内存

# A窗口
ctrl + c

# D窗口
docker update -m 10m --memory-swap 10m myjava2

# A窗口
java -jar myapp.jar # OOM-Kill 因为申请的内存太多了,无法给这么多资源
# A窗口
docker run -it --name myjava3 java:8 bash

# B窗口
docker stats myjava3

# A窗口
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`
do
 dd if=/dev/zero of=/dev/null &
done
#说明:
#cat /proc/cpuinfo |grep “physical id” | wc -l 可以获得 CPU 的个数,我们将其表示为 N
#seq 1 N 用来生成1到N之间的数字
#for i in seq 1 N; 就是循环执行命令,从1到N
#dd if=/dev/zero of=/dev/null 执行 dd 命令, 输出到/dev/null, 实际上只占用 CPU, 没有 IO 操作
#由于连续执行N个(N是 CPU 个数)的 dd 命令, 且使用率为 100%, 这时调度器会调度每个 dd 命令在不同的 CPU 上处理,最终就实现所有CPU占用率 100%

# C窗口
docker update --cpu-quota 分子 --cpu-period 分母 myjava3

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

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

相关文章

MSCKF3讲:后端理论推导(上)

MSCKF3讲:后端理论推导(上) 文章目录 MSCKF3讲:后端理论推导(上)1 MSCKF中的状态变量① IMU状态:② cam0状态:③ IMU和cam0间状态关系 2 微分方程递推(数值解)3 IMU状态预…

洛谷C++简单题小练习day22—小鱼记忆小程序!一题五解,高效学习

day22--小鱼记忆--2.26 习题概述 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 ai​(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 0 就不要念出来了)。…

【高级数据结构】Trie树

原理 介绍 高效地存储和查询字符串的数据结构。所以其重点在于:存储、查询两个操作。 存储操作 示例和图片来自:https://blog.csdn.net/qq_42024195/article/details/88364485 假设有这么几个字符串:b,abc,abd&…

数字中国:构建智慧社会的未来蓝图

一、引言 随着信息技术的迅猛发展,数字中国已经成为推动社会进步、提升国家竞争力的重要引擎。数字中国不仅代表着信息技术的广泛应用,更代表着一种全新的社会形态和发展模式。在这个背景下,AI与大数据技术的融合与应用成为数字中国建设的核…

操作系统原理与实验——实验三优先级进程调度

实验指南 运行环境: Dev c 算法思想: 本实验是模拟进程调度中的优先级算法,在先来先服务算法的基础上,只需对就绪队列到达时间进行一次排序。第一个到达的进程首先进入CPU,将其从就绪队列中出队后。若此后队首的进程的…

PCIe(四)—— 物理层

在看完事务层和数据链路层之后,我们来继续我们的协议栈之旅吧!这一篇中,我们会来看看PCIe物理层(Physical Layer)是如何工作的,从而帮助我们更加深入的了解PCIe的数据传输。 1. 物理层(Physical Layer) 当数据链路层将上层数据封装好后,就会将其交给物理层进行传输。…

探讨苹果 Vision Pro 的 AI 数字人形象问题

Personas 的设计模糊性: 部分人认为这种模糊设计可能是出于安全考虑🛡️。安全角度:Personas 代表着你的 AI 数字形象,在创建时,它相当于你的 AVP(生物识别扫描器的存在增加了冒充的难度)。如果…

第19章-IPv6基础

1. IPv4的缺陷 2. IPv6的优势 3. 地址格式 3.1 格式 3.2 长度 4. 地址书写压缩 4.1 段内前导0压缩 4.2 全0段压缩 4.3 例子1 4.4 例子 5. 网段划分 5.1 前缀 5.2 接口标识符 5.3 前缀长度 5.4 地址规模分类 6. 地址分类 6.1 单播地址 6.2 组播地址 6.3 任播地址 6.4 例子 …

ICLR/NeurIPS论文分享:任务通用的时序基础模型

吴海旭 清华大学软件学院博士生 师从龙明盛副教授,研究方向为深度学习及其在复杂时空物理过程建模中的应用,目前在Nature Machine Intelligence、IEEE TPAMI、ICML、NeurIPS上发表多篇论文,研究成果在中国气象局、北京冬奥会落地应用。曾获清…

Linux信号【systemV】

目录 前言 正文: 1消息队列 1.1什么是消息队列? 1.2消息队列的数据结构 1.3消息队列的相关接口 1.3.1创建 1.3.2释放 1.3.3发送 1.3.4接收 1.4消息队列补充 2.信号量 2.1什么是信号量 2.2互斥相关概念 2.3信号量的数据结构 2.4…

【高阶数据结构】LRUCache

文章目录 1. 什么是LRU Cache2. LRU Cache的实现3. LinkedHashMap4. LRU Cache OJ题4.1 题目要求4.2 解题思路4.3 代码实现4.3.1 Java代码一4.3.2 Java代码二 1. 什么是LRU Cache LRUCache,全称为Least Recently Used Cache,即最近最少使用缓存&#xf…

基于springboot+vue的纺织品企业财务管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

mac 安装hbuilderx

下载 HBuilderX下载地址: 下载地址 选额mac版本点击下载 安装 如图,将HBuilderX拖到Applications,才是正确的安装姿势。 MacOSX,软件必须安装到/Applications目录,如未安装到此目录,可能会出现插件安装失败、项目创建…

揭秘Java性能调优的层次 | 综合多方向提升应用程序性能与系统高可用的关键(架构层次规划)

揭秘性能调优的层次 | 综合多方向提升应用程序性能与系统的高可用 前言介绍调优层次调优 — 设计案例说明 - 操作轮询控制事件驱动 调优 — 代码案例说明 - ArrayList和LinkedList性能对比案例说明 - 文件读写实现方式的性能对比 调优 — JVMJVM架构分布JVM调优方向**JVM垃圾回…

Linux搭建SFTP服务器

案例:搭建SFTP服务器 SFTP(SSH文件传输协议) SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的…

EchoServer回显服务器简单测试

目录 工具介绍 工具使用 测试结果 工具介绍 github的一个开源项目,是一个测压工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的…

动态住宅IP vs 静态住宅IP,如何选择适合你的海外住宅IP?

随着数字时代的发展,网络已经成为了我们日常生活中不可或缺的一部分。在海外留学、旅游、工作或者进行电子商务等活动时,一个合适的住宅IP可以帮助我们保护个人隐私、确保网络连接的稳定性、提高在线服务的可靠性等。因此,选择适合自己的住宅…

ChatGPT科研与AI绘图及论文高效写作教程

原文链接:ChatGPT科研与AI绘图及论文高效写作教程 2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电…

vos3000外呼系统如何修改话机注册端口

本文以vos3000为例,其他产品替换对应产品名称即可 修改配置文件地址 /home/kunshi/mbx3000/etc/softswitch.conf H323_RAS_PORT1719 H323 注册端口,可以用逗号(,)分隔多个端口 H323_RC4_RAS_PORT3719 H323 加密注册端口&#x…

redis03 八种数据类型

思维草图 String类型 字符串类型,是redis中最简单的存储类型,可以包含任何数据,例如jpg图片或者序列化的对象等,底层都是以字节数组形式存储,最大能存储512MB的数据。 常用命令 KEY命名规范 加前缀,分…