当前位置: 首页 > news >正文

chaitin-Nginx+Docker

Nginx实战

任务一

1、源码包安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http(s)😕/[Server1]:8080并且回显Web页面

官网地址:http://nginx.org/en/download.html

步骤一:下载源码包

[root@node01 ~]# wget -c http://nginx.org/download/nginx-1.24.0.tar.gz

步骤二:解压到指定目录

[root@node01 ~]# tar xf nginx-1.24.0.tar.gz -C /usr/local/
[root@node01 ~]# cd /usr/local/
[root@node01 local]# ls
aegis  bin  etc  games  include  lib  lib64  libexec  nginx-1.24.0  rvm  sbin  share  src

步骤三:进入Nginx目录编译安装

[root@node01 local]# cd nginx-1.24.0/
[root@node01 nginx-1.24.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src# 也可以直接config,使用默认路径
[root@node01 nginx-1.24.0]# ./configure --user=nginx --group=nginx \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module

汇总信息

步骤四:make make install

[root@node01 nginx-1.24.0]# make && make install

步骤五:创建用户和用户组

[root@node01 nginx-1.24.0]# groupadd nginx
[root@node01 nginx-1.24.0]# useradd -s /sbin/nologin -g nginx -M nginx

步骤六:修改目录权限

[root@node01 nginx-1.24.0]# chown -R nginx.nginx /usr/local/nginx-1.24.0/

步骤七:创建服务脚本

cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF

步骤八:创建PID文件

[root@node01 nginx-1.24.0]# touch /usr/local/nginx/logs/nginx.pid

步骤九:脚本测试

[root@node01 nginx-1.24.0]# systemctl daemon-reload# 很好出现问题了,排错
[root@node01 nginx-1.24.0]# systemctl restart nginx.service
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

排错

还好,以前装了httpd,端口被占用了,根据这个提示信息找到的

测试结果:

访问web界面

任务二

2、保留Server1,但是不允许直接访问Server 1,再部署1套NGINX B,利用其实现反向代理功能,要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。(截图并详细说明NGINX上配置/参数)

步骤一:部署Nginx

编译安装的是报错:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.# 下载相应的依赖即可
[root@node02 nginx-1.24.0]# yum install pcre-devel  gc gcc gcc-c++ zlib-devel openssl-devel -y

自此,俩台nginx服务器配置完成

步骤二:配置反向代理-俩台服务器都做,配置虚拟主机

# node01主机的配置信息
[root@node01 conf]# cat nginx.conf# 添加部分
server{listen 80;server_name elite.chaitin.com;location / {root /usr/local/nginx/html;index index.html index.htm;}
}
[root@node01 conf]# echo "`hostname -I `server01-CHAN" > /usr/local/nginx/html/index.html[root@node01 conf]# scp nginx.conf node02:$PWD
[root@node02 conf]# echo "`hostname -I `server02-CHAN" > /usr/local/nginx/html/index.html

测试结果

配置访问node02主机对应的域名代理到node01上

# 没有DNS,做本地解析
root@node02 ~]# tail -1  /etc/hosts
47.100.207.155 elite.chaitin.comMAC本地解析
chan@192 ~ % sudo vim /etc/hosts
Password:
chan@192 ~ % tail -1 /etc/hosts
47.100.207.155 elite.chaitin.com

node02设置为仅可通过域名访问

#所有不匹配elite.chaitin.com的请求全都返回403
server{listen 80;server_name _;location / {return 403;}
}# 将匹配elite.chaitin.com的请求转发到server1server{listen 80;server_name elite.chaitin.com;location / {proxy_pass http://47.100.172.152:80;}

访问node02的IP看不到node01-server01界面

任务三,负载均衡

3、(加强提升题目)假设再加1套Web Server 2,其8080端口提供与Server 1相同服务,如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2?

配置好server02后,需要将server01配置为只接受来⾃server02的访问,编辑server01的nginx.conf,在监听80端⼝的server块中添加allow和deny

# node01 配置server{listen 80;server_name elite.chaitin.com;location / {root /usr/local/nginx/html;index index.html index.htm;allow 47.100.207.155;deny all;}
}

重启测试

访问主机node01的ip看不到server01界面,达到效果,访问域名,转发到node02对应的服务

配置简单的负载均衡算法:轮训

upstream www_server_pools {server 47.100.172.152:80 weight=1;server 47.100.207.155:80 weight=1;}server{listen 80;server_name _;location / {return 403;}}server{listen 80;server_name elite.chaitin.com;location / {proxy_pass http://www_server_pools;# proxy_pass http://47.100.172.152:80;}}
}

重启测试

[root@node02 conf]# systemctl daemon-reload
[root@node02 conf]# systemctl restart nginx.service
[root@node02 conf]# for ((i=1;i<=4;i++)); do curl http://elite.chaitin.com; done

任务四:负载均衡其他算法

4、(加强提升题目)在上文题目3基础之上,配置和验证NGINX支持哪些负载均衡算法及其效果?并结合NGINX配置参数详细说明不同负载均衡算法工作原理

常用调动算法

①. 定义轮询调度算法-rr-默认调度算法

②. 定义权重调度算法-wrr

③. 定义静态调度算法-ip_hash

该调度算法可以解决动态网页的session共享问题

④. 定义最小的连接数-least_conn

# 基本配置
upstream www_server_pools { # upstream是关键字必须有,后面的www_server_pools为一个Upstream集群组的名字,可以自己起名, 调用时就用这个名字 server 192.168.0.223:80 weight=5; server 192.168.0.224:80 weight=10; server 192.168.0.225:80 weight=15; #server关键字是固定的,后面可以接域名(门户会用)或IP。如果不指定端口,默认是80端口。weight代 表权重,数值越大被分配的请求越多,结尾有分号。 
}# 比较完整的配置
upstream www_server_pools { 
server 192.168.0.223; #这行标签和下行是等价的 
server 192.168.0.224:80 weight=1 max_fails=1 fail_timeout=10s; #这行标签和上 一行是等价的,此行多余的部分就是默认配置,不写也可以。 
server 192.168.0.225:80 weight=1 max_fails=2 fail_timeout=20s backup; # server最后面可以加很多参数,具体参数作用看下文的表格 }

算法:最小连接数

upstream elite.chaitin.com{least_conn;server 47.100.172.152:80;server 47.100.207.155:80;}

算法:权重

upstream elite.chaitin.com{server 47.100.172.152:80 weight=1;server 47.100.207.155:80 weight=5;}

任务五:高可用

5、在上文题目2基础之上,增加节点NGINX B,如何配置实现高可用?demo演示当NGINX A故障时,流量自动切换到NGINX B(客户端访问几乎无感知)。详细说明VRRP协议在本题所述场景下的应用

环境准备

搭建双主高可用服务,首先需要有两台阿里云服务器,然后在阿里云控制台-申请一个高可用虚拟IP,这个IP需要在keepalived中配置

nginx+keepalived

两台服务器上分别部署nginx和keepalived,部署方式略,其中一台keepalived配置如下 ,其中virtual_ipaddress就是自己申请的虚拟ip,unicast_src_ip是本机的ip,unicast_peer是另一台的ip,router_id需要不一致,smtp_server是网关ip,smtp_connect_timeout是超时时间,这个要自己学习一下keepalive的用法,这里不做多余解释。

script "/etc/keepalived/nginx_check.sh"这个需要自己编写脚本! Configuration File for keepalivedvrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 5weight -5fall 3rise 2
}global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 47.100.172.152smtp_connect_timeout 10router_id LVS_DEVELvrrp_skip_check_adv_addr# vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}unicast_src_ip 172.26.168.166unicast_peer {172.26.168.165}virtual_ipaddress {xxxx.xxxx.xxxx.xxxx}track_script {chk_nginx}
}

另一台

! Configuration File for keepalivedvrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 5weight -5fall 3rise 2
}global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 172.26.168.1smtp_connect_timeout 10router_id LVS_DEVEL2vrrp_skip_check_adv_addr# vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0script_user root
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}unicast_src_ip 172.26.168.165unicast_peer {172.26.168.166}virtual_ipaddress {172.26.168.168}track_script {chk_nginx}
}

脚本,其中某服务名代表自己需要高可用的服务名称,如果其中一台某个服务挂了,就让当前的keepalived一起挂掉,保证服务迁移。这里面的服务都是用docker部署的

#!/bin/bash
#检测nginx是否存活的脚本
A=`docker ps -q -f "name=某服务名" | grep -v grep | wc -l`
B=`docker ps -q -f "name=某服务名" | grep -v grep | wc -l`
C=`docker ps -q -f "name=某服务名" | grep -v grep | wc -l`
D=`docker ps -q -f "name=某服务名" | grep -v grep | wc -l`
if [ $B -eq 0 ];thensleep 2if [ $B -eq 0 ];thensystemctl stop keepalivedfielif [ $B -eq 0 ];thensleep 2if [ $B -eq 0 ];thensystemctl stop keepalivedfielif [ $C -eq 0 ];thensleep 2if [ $C -eq 0 ];thensystemctl stop keepalivedfielif [ $D -eq 0 ];thensleep 2if [ $D -eq 0 ];thensystemctl stop keepalivedfi
fi

任务六:健康检查

6、(加强提升题目)在上文题目3基础之上,配置和验证主动和被动两种健康检查方式及其效果?并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理

健康检查方式

keepalived具有很强大、灵活的后端检测方式,其具有

HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK 几种健康检测方式

TCP_CHECK:工作在第4层,keepalived向后端服务器发起一个tcp连接请求,如果后端服务器没有响应或 超时,那么这个后端将从服务器池中移除。 HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是 否匹配,不匹配则从服务器池中移除;此外还可以指定http返回码来判断检测是否成功。HTTP_GET可以指定 多个URL用于检测,这个一台服务器有多个虚拟主机的情况下比较好用。 SSL_GET:跟上面的HTTP_GET相似,不同的只是用SSL连接 MISC_CHECK:用脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内。脚本的返回值需为: 0) 检测成功 1) 检测失败,将从服务器池中移除 2-255)检测成功;如果有设置misc_dynamic,权重自动调整为 退出码-2,如退出码为200, 权重自动调整为198=200-2。 SMTP_CHECK:用来检测邮件服务的smtp的

相关配置

delay_loop 隔多长时间做一次健康检测,单位为秒 
connect_timeout 连接超时时间,单位为秒 
nb_get_retry 检测失败后的重试次数,如果达到重试次数仍然失败,将后端从服务器池中移除。 
delay_before_retry 失败重试的间隔时间,单位为秒

TCP检查方式

TCP_CHECK { 
connect_timeout 5 #连接超时时间 
nb_get_retry 3#重连次数 
delay_before_retry 3 #重连间隔时间 
connect_port 80 #健康检查的端口 
} # TCP_CHECK

HTTP_GET|SSL_GET

HTTP_GET | SSL_GET 
{url { path /# HTTP/SSL 检查的url 可以是多个 digest <STRING> # HTTP/SSL 检查后的摘要信息 用工具genhash生成 status_code 200# HTTP/SSL 检查返回的状态码 }connect_port 80 # 连接端口 bindto <IPADD> connect_timeout 3 # 连接超时时间 nb_get_retry 3 # 重连次数 delay_before_retry 2 #连接间隔时间 }# END OF HTTP_GET|SSL_GET
1)、两者都有两种检测方式,一种是简单的基于返回码确认;另一种是基于确认后端页面内容hash值,确认前 后是否发生变化(是不是感觉有点高端,还有简单的防止页面被篡改的作用,当然,动态页面显然不行); 
2)、两者都是处理简单的GET请求,基于post返回值确认是否正常,这种方法显然不适用 ,不过POST方式是 可以通过MISC_CHECK方式进行支持检测的; 
3)、两者配置语法上相同,只不过类型名不同而已 。同属于大的web请求范畴,只不过一个走的HTTP协议, 一个走的HTTPS协议;

Docker实战

1、docker、docker-compose安装

在Centos系统下,分别使用在线和离线两种方式安装docker和docker-compose

1.1 在线安装

步骤一:下载Docker源

[root@node01 ~]# yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo[root@node01 ~]# ll /etc/yum.repos.d/
total 12
-rw-r--r-- 1 root root  675 Jul 10 15:24 CentOS-Base.repo
-rw-r--r-- 1 root root 1919 Jul 31 22:46 docker-ce.repo
-rw-r--r-- 1 root root  230 Jul 10 15:24 epel.repo

步骤二:在线安装最新版本Docker

[root@node01 ~]# yum install docker-ce docker-ce-cli containerd.io

步骤三:启动并设置为开机自启动

[root@node01 ~]# systemctl enable --now docker.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.

步骤四:在线安装docker-compose

[root@node02 ~]# yum install docker-compose.noarch -y

1.2 离线安装

1.2.1 卸载docker docker-compose

# 用之前写的脚本docker-uninstall.sh卸载
cat > docker-uninstall.sh << EOF
#!/bin/bash
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce# 删除docker的目录rm -rf /etc/docker
rm -rf /run/docker
rm -rf /var/lib/dockershim#删除docker的镜像文件
rm -rf /var/lib/dockerps -ef|grep docker|grep -v grep|xargs kill -s 9#卸载docker相关包
yum remove -y docker-*yum remove -y docker-ce-cli-*
yum remove -y docker-scan-plugin*# 删除旧版docker-compose
rm -rf /usr/local/bin/docker-compose
rm -rf /usr/bin/docker-compose# 重启服务器
reboot
EOFcat > docker-uninstall-v2.sh << EOF
#!/bin/bash
echo "start uninstalling  docker"
echo "======================================="
# 停止docker服务
sudo systemctl stop docker# 杀死docker进程(为防止特殊情况下有残留的docker进程)
# ps -ef | grep docker | awk '{print $2}' | xargs sudo kill -s 9# 删除执行状态文件的根目录
sudo rm -rf /run/docker# 删除系统服务配置文件
sudo rm -rf /etc/systemd/system/docker.service# 删除docker配置文件
sudo rm -rf /etc/docker
sudo rm -rf /usr/bin/docker
sudo rm -rf /usr/bin/docker-containerd
sudo rm -rf /usr/bin/docker-containerd-ctr
sudo rm -rf /usr/bin/docker-containerd-shim
sudo rm -rf /usr/bin/docker-init
sudo rm -rf /usr/bin/docker-proxy
sudo rm -rf /usr/bin/docker-runc
sudo rm -rf /usr/bin/dockerd
#重新加载配置文件
systemctl daemon-reloadecho "docker uninstalled successfully"
EOF

添加执行权限并执行

[root@node01 ~]# chmod +x docker-uninstall.sh[root@node01 ~]# ./docker-uninstall.sh

验证:

[root@node01 ~]# docker -v[root@node01 ~]# docker-compose -v

1.2.2 离线安装docker

步骤一:源码包下载

[root@node01 ~]# wget -c https://download.docker.com/linux/static/stable/x86_64/docker-24.0.4.tgz

步骤二:解压到指定路径

[root@node01 ~]# tar xf  docker-24.0.4.tgz -C /usr/bin/
[root@node01 ~]# cd /usr/bin/
[root@node01 bin]# ll -d docker/
drwxrwxr-x 2 1000 rvm 4096 7月   7 22:53 docker/

步骤三:配置服务启动脚本

# vim /etc/systemd/system/docker.service
# 添加
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target

步骤四:添加执行权限并验证

[root@node01 ~]# chmod +x /etc/systemd/system/docker
docker_escape_detector.service  docker.service                  docker.socket
[root@node01 ~]# chmod +x /etc/systemd/system/docker.service
[root@node01 ~]# systemctl daemon-reload
[root@node01 ~]# systemctl restart docker
[root@node01 ~]# systemctl status docker

1.2.3 离线安装 docker-compose

GitHub地址:https://github.com/docker/compose/releases/

官网地址:https://docs.docker.com/compose/install/linux/#install-using-the-repository

步骤一:GitHub下载包到本地

[root@node01 ~]# wget -c https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64

步骤二:移动到服务启动脚本并加执行权限

[root@node01 ~]# chmod +x docker-compose-linux-x86_64[root@node01 ~]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
[root@node01 ~]# cd /usr/local/bin/
[root@node01 bin]# ls
cloud-id    cloud-init-per  containerd-shim          ctr     docker          jsondiff   jsonpointer  normalizer
cloud-init  containerd      containerd-shim-runc-v2  docker  docker-compose  jsonpatch  jsonschema   runc

步骤三:验证

[root@node01 bin]# docker-compose -v
Docker Compose version v2.20.2

2、应用

利用docker实现安装NGINX A,搭建Web Server,任意HTML页面,其8000端口提供Web访问服务,截图成功访问http(s)😕/[Server1]:8000并且回显Web页面

PS:本地映射的8000端口

[root@node02 ~]# docker ps -a | grep nginx
ac6df312c118   dsensor-nginx:latest         "nginx -g 'daemon of…"   2 weeks ago   Up 2 weeks                 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:1338->1338/tcp, :::1338->1338/tcp, 1935/tcp   dsensor_nginx
[root@node02 ~]# docker run -d --name nginx-web -p 8000:80 nginx
3cee024b85d682a69c439e6e81447e9444445218f1cce48f18ad06348d23f63f
[root@node02 ~]# docker port nginx-web
80/tcp -> 0.0.0.0:8000
80/tcp -> [::]:8000

3、Docker基础命令使用

  • 搭建docker容器提供服务

端口被占用,先停掉其他的服务

提供web服务,拉取镜像

[root@node01 ~]# docker pull httpd
[root@node01 ~]# docker images  | grep httpd
httpd                     latest                             96a2d0570deb   6 days ago      168MB

运行容器并映射端口

[root@node01 ~]# docker run -d --name web-02 -p 8081:80 httpd:latest
72e4b4f467e4e50cfb50c08c8c78fda15a7d4a7041f3e4ef78197101a9a4bb88
[root@node01 ~]# docker port web-02
80/tcp -> 0.0.0.0:8081
80/tcp -> [::]:8081

  • 操作docker容器(启动、停止、删除、进入容器内部等)
# 容器的启动和停止
[root@node01 ~]# docker stop  web-01
web-01
[root@node01 ~]# docker start web-01
web-01

# 进入容器内部和删除
[root@node01 ~]# docker exec -it web-01 bash
root@6b7dc46f3ab0:/usr/local/apache2#
root@6b7dc46f3ab0:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs	modulesroot@6b7dc46f3ab0:/usr/local/apache2# exit
exit
[root@node01 ~]# docker stop web-02
web-02
[root@node01 ~]# docker rm web-02
web-02# 也可以强制删除一个运行着的容器
[root@node01 ~]# docker rm `docker ps -qa`

  • 查看docker容器详细信息
[root@node01 ~]# docker inspect web-01
选项	说明
-f	指定返回值的模板文件。
-s	显示总的文件大小。
–type	为指定类型返回JSON。
[root@node01 ~]# docker inspect --helpUsage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]Return low-level information on Docker objectsOptions:-f, --format string   Format output using a custom template:'json':             Print in JSON format'TEMPLATE':         Print output using the given Go template.Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates-s, --size            Display total file sizes if the type is container--type string     Return JSON for specified type
  • 查看docker容器日志(包含实时查看)
[root@node01 ~]# docker logs web-01

实时追踪日志

[root@node01 ~]# docker logs -f  web-01

  • 查看docker network信息
[root@node01 ~]# docker network ls
NETWORK ID     NAME               DRIVER    SCOPE
b54bc86f5549   bridge             bridge    local
33e8595a6d6c   d-sensor_default   bridge    local
d2007b2d7a47   honey_orphanage    bridge    local
0948fed97cc7   host               host      local
9a93dcc91b8b   none               null      local
Docker网络模式配置说明
host模式–net=host容器和宿主机共享Network namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
container模式–net=container:NAME_or_ID容器和另外一个容器共享Network namespace。创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围
bridge模式–net=bridge(默认为该模式)此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
none模式–net=none该模式关闭了容器的网络功能。
  • 批量操作docker容器(批量停止、删除等)

批量停止容器

[root@node01 ~]# docker stop `docker ps -qa `

批量启动容器

[root@node01 ~]# docker start `docker ps -qa `

批量删除容器

[root@node01 ~]# docker rm -f  `docker ps -qa `
  • 操作docker images
# httpd自己拉的镜像
[root@node01 ~]# docker images | grep http
httpd                     latest                             96a2d0570deb   7 days ago      168MB
honeypot/http_proxy       8a96fb0e7a0fbf40e0269225f6478512   bcc6d9534cd5   5 weeks ago     795MB
honeypot/http_proxy       latest                             bcc6d9534cd5   5 weeks ago     795MB# 删除镜像(一个正在运行的容器删除不了,但是可以强制删除 -f)
[root@node01 ~]# docker rmi httpd:latest
Error response from daemon: conflict: unable to remove repository reference "httpd:latest" (must force) - container 6b7dc46f3ab0 is using its referenced image 96a2d0570deb[root@node01 ~]# docker rmi -f httpd:latest
Untagged: httpd:latest
Untagged: httpd@sha256:d7262c0f29a26349d6af45199b2770d499c74d45cee5c47995a1ebb336093088

  • docker 容器内与宿主机互相复制文件

重宿主机拷贝到容器中

[root@node01 ~]# docker cp dockercp.txt nginx-web01:/
Successfully copied 2.05kB to nginx-web01:/

重容器中拷贝到宿主机本地

[root@node01 ~]# docker cp nginx-web01:/dockercp-Tohost.txt .
Successfully copied 2.05kB to /root/.

  • Docker容器内抓包,nsenter 网络命名空间部分
[root@node01 ~]# docker images | grep nginx
nginx                     latest                             89da1fb6dcb9   7 days ago      187MB
dsensor-nginx-hw          f9c26108                           c5cc3fb357a3   6 weeks ago     1.13GB
dsensor-nginx-hw          latest                             c5cc3fb357a3   6 weeks ago     1.13GB
dsensor-nginx             f9c26108                           a0ab9278b2bc   6 weeks ago     1.13GB
dsensor-nginx             latest                             a0ab9278b2bc   6 weeks ago     1.13GB
[root@node01 ~]# docker inspect -f {{.State.Pid}} nginx-web01
12498# -n 表示切换网络命名空间,-t 指定的 pid 为步骤 
[root@node01 ~]# nsenter -n -t12498
[root@node01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
126: eth0@if127: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever[root@node01 ~]# tcpdump -i eth0 tcp and port 80 -vvv

下周学习计划:

  • 学习目标1:了解常见的安全产品和雷池功能特性;考核方法:会议发言
  • 学习目标2:硬件雷池的安装(包括设备上架、初始安装、minion shell切换、模式切换、软件系统升级、patch、引擎升级)考核方法:现场实操
  • 学习目标3:软件雷池安装(反代集群或者单机模式,雷池各功能学习)考核方法:软件安装关键步骤

在学习硬件前,需要明白雷池的集中部署模式:反向代理、透明代理、透明桥、镜像流量等

相关文章:

chaitin-Nginx+Docker

Nginx实战 任务一 1、源码包安装NGINX A&#xff0c;搭建Web Server&#xff0c;任意HTML页面&#xff0c;其8080端口提供Web访问服务&#xff0c;截图成功访问http(s)&#x1f615;/[Server1]:8080并且回显Web页面 官网地址&#xff1a;http://nginx.org/en/download.html 步骤…...

具体面试题

具体面试题 Java 基础 JDK 和 JRE 有什么区别&#xff1f; 和 equals 的区别是什么&#xff1f; 两个对象的 hashCode() 相同&#xff0c;则 equals() 也一定为 true&#xff0c;对吗&#xff1f; final 在 java 中有什么作用&#xff1f; java 中的 Math.round(-1.5) 等…...

Logback ThresholdFilter LevelFilter

当我们需要对日志的打印要做一些范围的控制的时候&#xff0c;通常都是通过为各个Appender设置不同的Filter配置来实现。在Logback中自带了两个过滤器实现&#xff1a; ch.qos.logback.classic.filter.LevelFilter和 ch.qos.logback.classic.filter.ThresholdFilter&#xff0c…...

python+django+mysql项目实践二(前端及数据库)

python项目实践 环境说明&#xff1a; Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 前端模板 添加模板 在templates下创建 views文件中添加 创建数据库 连接数据库 在setting文件中进行配置 创建表...

Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

拦截器对接口细粒度权限校验

文章目录 一、逻辑分析二、校验规则1.规则类型2.规则划分3.规则配置信息4.规则案例说明5.规则加载 三、拦截器定义1.自定义拦截器2.注册拦截器 四、获取请求参数1.获取get提交方式参数2.获取post提交方式参数&#xff08;1&#xff09;定义RequestWrapper类&#xff08;2&#…...

计算机科技历史纵横:8月6日的十大里程碑

计算机科技历史纵横&#xff1a;8月6日的十大里程碑 目录 引言1951年&#xff1a;EDSAC电脑完成第一个实际计算任务1964年&#xff1a;IBM发布System/360系列1973年&#xff1a;Xerox PARC开发出第一台个人电脑Xerox Alto1976年&#xff1a;Apple发布Apple I电脑1981年&#…...

知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例,Neo4j图算法是一套在Neo4j图数据库上运行的算法集合。这些算法专门针对图数据结构进行设计,用于分析、查询和处理图数据。图算法可以帮助我们发现图中的模…...

C++ 头文件函数大全

<cstdio>头文件&#xff1a; scanf("%d",&a); cin>>a; scanf("%d%d",&a,&b); cin>>a>>b; for(i1;i<n;i) scanf("&d,&alil); cin>>a[i]; printf("%d",a); cout&l…...

智慧物流园区整体架构方案【46页PPT】

导读&#xff1a;原文《智慧物流园区整体架构方案【46页PPT】》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取…...

llama2模型下载

介绍 LLaMA 2-CHAT与OpenAI ChatGPT效果一样好。LLaMA 2与LLaMA 1架构相同,LLaMA 2训练数据是2000000000000个tokens,还是用了1000000个人类新标注的数据。上下文长度由2048提升为4096。 本教程提供两种下载方式: 1官方下载脚本下载 2hugging face网站下载 官网资格申请 …...

C高级【day4】

思维导图&#xff1a; 写一个函数&#xff0c;获取用户的uid和gid并使用变量接收&#xff1a; #!/bin/bashfunction get_uid {my_uidid -umy_gidid -g }get_uid echo "当前用户的UID&#xff1a;$my_uid" echo "当前用户的GID&#xff1a;$my_gid"整理冒泡…...

【前端实习生备战秋招】—HTML 和 CSS面试题总结(一)

【前端实习生备战秋招】—HTML 和 CSS面试题总结&#xff08;一&#xff09; 1. 你做的页面在哪些流览器测试过&#xff1f;这些浏览器的内核分别是什么? IE:trident内核 Firefox&#xff1a;gecko内核 Safari:webkit内核 Opera:以前是presto内核&#xff0c;Opera现已改用Goo…...

【从零学习python 】02. 开发工具介绍

文章目录 编写Python代码一、常见的代码编辑工具二、运行Python程序三、Pycharm的下载和安装PyCharm的主要功能区域进阶案例 编写Python代码 根据我们之前介绍的知识&#xff0c;我们知道&#xff0c;所谓代码其实就是将一段普通文本按照一定的规范编写&#xff0c;然后交给电…...

Python:Spider爬虫工程化入门到进阶(2)使用Spider Admin Pro管理scrapy爬虫项目

Python&#xff1a;Spider爬虫工程化入门到进阶系列: Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;1&#xff09;创建Scrapy爬虫项目Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;2&#xff09;使用Spider Admin Pro管理scrapy爬虫项目 目录 1、使…...

CubeMap convert into Octahedral思路

看了一些介绍&#xff0c;大多都是如何采样Octahedral的&#xff0c;那么如何把cubemap转成为这个呢 首先&#xff0c;我们想想 Vec4 Sample(Vec3 direction) { // Some logicwait wait wait think about what weve got here UV UV UV! return SampleTexture(Image, UV); }这个…...

vue项目实战-脑图编辑管理系统kitymind百度脑图

前言 项目为前端vue项目&#xff0c;把kitymind百度脑图整合到前端vue项目中&#xff0c;显示了脑图的绘制&#xff0c;编辑&#xff0c;到处为json&#xff0c;png&#xff0c;text等格式的功能 文章末尾有相关的代码链接&#xff0c;代码只包含前端项目&#xff0c;在原始的…...

c++调用ffmpeg api录屏 并进行rtmp推流

代码及工程见https://download.csdn.net/download/daqinzl/88156528 开发工具&#xff1a;visual studio 2019 记得启动rtmp流媒体服务 nginx的rtmp服务见https://download.csdn.net/download/daqinzl/20478812 播放&#xff0c;采用ffmpeg工具集里的ffplay.exe, 执行命令 f…...

SQL分类及通用语法数据类型(超详细版)

一、SQL分类 SQL是结构化查询语言&#xff08;Structured Query Language&#xff09;的缩写。它是一种用于管理和操作关系型数据库系统的标准化语言。SQL分类如下&#xff1a; DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML:…...

配置Hive远程服务详细步骤

HiveServer2支持多客户端的并发和认证&#xff0c;为开放API客户端如JDBC、ODBC提供了更好的支持。 &#xff08;1&#xff09;修改hive-site.xml&#xff0c;在文件中添加以下内容&#xff1a; <property><name>hive.metastore.event.db.notification.api.auth&l…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...