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

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习07(基于docker容器的防火墙及NAT企业实战)

7.1 网络准备

7.2 网络规划

1)虚拟网络编辑器

点击右下方“更改设置”,点击“添加网络”假如vmnet3和vmnet4,然后分别选择vmnet3和vmnet4,设置为“仅主机模式”,按③处处理,去掉“使用DHCP”,子网分别设置为192.168.126.0/24和202.202.202.0/24。

图7- 1

                   虚拟机设置,除了安装时的NAT网络外,还有一个wifi的vmnet0桥接,再添加vmnet3和vmnet4,如图7-2所示,vmnet3和vmnet都选择仅主机模式。

图7- 2

         将宿主物理主机的网络连接里vmnet3和vmnet4分别设置为192.168.126.99/24、202.202.202.99/24。

图7- 3

设置虚拟机新增网卡ens37ens38ip地址:

[root@localhost network-scripts]# ip a

1: ……

4: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:0c:29:d3:92:d6 brd ff:ff:ff:ff:ff:ff

    inet 192.168.126.33/24 brd 192.168.126.255 scope global noprefixroute ens37

       valid_lft forever preferred_lft forever

    inet6 fe80::7381:cf8f:5191:189b/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

5: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:0c:29:d3:92:e0 brd ff:ff:ff:ff:ff:ff

    inet 202.202.202.33/24 brd 202.202.202.255 scope global noprefixroute ens38

       valid_lft forever preferred_lft forever

    inet6 fe80::3d32:1ff6:af6a:1a47/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

……

测试一下和宿主机及外网的连通性:

[root@localhost network-scripts]# ping 202.202.202.99 -c 2

PING 202.202.202.99 (202.202.202.99) 56(84) bytes of data.

64 bytes from 202.202.202.99: icmp_seq=1 ttl=128 time=0.502 ms

64 bytes from 202.202.202.99: icmp_seq=2 ttl=128 time=0.532 ms

--- 202.202.202.99 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1009ms

rtt min/avg/max/mdev = 0.502/0.517/0.532/0.015 ms

[root@localhost network-scripts]# ping 192.168.126.99 -c 2

PING 192.168.126.99 (192.168.126.99) 56(84) bytes of data.

64 bytes from 192.168.126.99: icmp_seq=1 ttl=128 time=0.278 ms

64 bytes from 192.168.126.99: icmp_seq=2 ttl=128 time=0.559 ms

--- 192.168.126.99 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1008ms

rtt min/avg/max/mdev = 0.278/0.418/0.559/0.141 ms

[root@localhost network-scripts]# ping www.baidu.com -c 2

PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=128 time=31.9 ms

64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=128 time=31.1 ms

--- www.a.shifen.com ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1008ms

rtt min/avg/max/mdev = 31.183/31.555/31.927/0.372 ms

2)容器网络ip规划

7.1 IP规划

操作系统

IP地址

内网服务器intrasvr

Centos 8

192.168.100.221VMnet3

natsvr

Centos 8

IP1: 192.168.100.220VMnet3

IP2:202.202.202.1VMnet4

intersvr

Centos 8

202.202.202.113VMnet4

wifi               :       ens36       192.168.0.0/24

模拟内网nei:       ens37     192.168.100.0/24

模拟外网wai:      ens38     202.202.202.0/24

图7- 4

3)要求

1. 配置SNAT保证内网用户能够正常访问公网IP

2. 配置DNAT保证外网用户能够正常访问内网的SSH服务器。

3. 配置iptables防火墙

4)步骤:

   注意:请保证物理机连上互联网的情况下,在intrasvrnatsvr两台服务器上安装iptablesiptables-servies两个软件包,以便后续使用。intrasvr网关是natsvrnatsvr可以pingintersvr,但是intrasver无法pingintersvr

i准备工作

规划容器连接网络

192.168.100.0/24模拟内网,202.202.202.0/24模拟外网

7.2 对应的容器网络规划

网络/容器

Ip

连接特性

端口

安装包

neiw

192.168.100.0/24

macvlan/ens37

waiw

2i02.202.202.0/24

macvlan/ens38

intrasvr容器

192.168.100.221/24

Gateway:192.168.100.220

firewalldiptablesiptables-servies

natsvr容器

192.168.100.220/24

202.202.202.1/24

firewalldiptablesiptables-servies

intersvr容器

202.202.202.113/24

①创建与物理网wifi:192.168.0.0/24、neiw:192.168.126.0/24和waiw桥接的docker网络

docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=ens37 wifi

docker network create -d macvlan --subnet=192.168.126.0/24 --gateway=192.168.126.99 -o parent=ens39 neiw

docker network create -d macvlan --subnet=202.202.202.0/24 --gateway=202.202.202.99 -o parent=ens40 waiw

[root@localhost ~]# docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=ens36 wifi

ad56b3c0094aa88c08bca676dcd1980b6c92d7a9d4844f5ff44c7820edfd6790

[root@localhost ~]# docker network create -d macvlan --subnet=192.168.126.0/24 --gateway=192.168.126.99 -o parent=ens37 neiw

c26169d5782d3f3d9ea3a2c4ff09480ef3f958f51d13eeab6449d6a110d1f1a2

[root@localhost ~]# docker network create -d macvlan --subnet=202.202.202.0/24 --gateway=202.202.202.99 -o parent=ens38 waiw

9fcfb8b1d1f1ccf2c17c1381530e899297bf16ae36ffaebfe5f5f950574f2c40

[root@localhost ~]# docker network ls

NETWORK ID     NAME      DRIVER    SCOPE

e450e6350455   bridge    bridge    local

8cb34f3d18a1   host      host      local

c26169d5782d   neiw      macvlan   local

78b5e1889b1f   none      null      local

9fcfb8b1d1f1   waiw      macvlan   local

ad56b3c0094a   wifi      macvlan   local

②在/目录下创建/cts8etc/yum.repos.d,并将准备好存放在/wutool的CentOS-Base852111.repo的库文件拷进该文件夹,这是为centos8.5.2111容器准备库文件,然后创建表7.2所规划的三个容器intrasvr、natsvr、intersvr(暂时IP桥接到wifi上,初始化完成后,再按表7.2内容实施)

[root@localhost ~]# cp /wutool/CentOS-Base852111.repo   /cts8etc/CentOS-Base852111.repo

③先准备三个和wifi桥接的三台容器(CentOS:lastest):

docker run -itd -e “container=docker” --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup -v /wutool:/wutool -v /mnt:/mnt -v /cts8etc/yum.repos.d:/etc/yum.repos.d --net wifi --ip 192.168.0.21 --name intrasvr centos /usr/sbin/init

docker run -itd -e “container=docker” --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup -v /wutool:/wutool -v /mnt:/mnt -v /cts8etc/yum.repos.d:/etc/yum.repos.d --net wifi --ip 192.168.0.20 --name natsvr centos /usr/sbin/init

docker run -itd -e “container=docker” --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup -v /wutool:/wutool -v /mnt:/mnt -v /cts8etc/yum.repos.d:/etc/yum.repos.d --net wifi --ip 192.168.0.13 --name intersvr centos /usr/sbin/init

查看容器

图7- 5

④容器初始化

启动三个容器

[root@wuzz ~]# docker start intrasvr intersvr natsvr

intrasvr

intersvr

natsvr

复制3个ssh登录窗口,2、3、4,然后在三个窗口中分别登录容器

图7- 6

docker exec -it intrasvr /bin/bash

查看ip,更新yum源

图7- 7

失败了!看错误好像要到ali网站的docker中心去报到,而我们的容器都是虚拟网模拟的,无法连外网。

图7- 8

宿主机是可以连外网的,网络有个nat网络是连接外网的,我们在centos主机上给三个容器连外网:

[root@wuzz ~]# docker network connect nat intrasvr

图7- 9

更新

[root@8753cfda310e /]# yum clean all

Failed to set locale, defaulting to C.UTF-8

0 files removed

[root@8753cfda310e /]# yum makecache

Failed to set locale, defaulting to C.UTF-8

Docker CE Stable - x86_64                                                                            235 kB/s |  66 kB     00:00

LocalRepo_BaseOS                                                                                      60 MB/s | 2.6 MB     00:00

LocalRepository_AppStream                                                                             68 MB/s | 7.5 MB     00:00

Metadata cache created.

安装必要工具(最好所有的容器上都安)

[root@8753cfda310e /]# yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools NetworkManager firewalld iptables-services openssh-clients passwd openssl openssh-server initscripts dhcp-server dhcp-relay

⑤给容器安装ssh服务

由于docker安装的容器不支持SSH登录,需要做ssh服务器架设:

[root@8753cfda310e /]# yum install passwd openssl openssh-server initscripts -y

编辑/etc/ssh/sshd_config,注意红色部分,没有的就自行添加

……

Port 22

AddressFamily any

ListenAddress 0.0.0.0

#ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying

#RekeyLimit default none

# This system is following system-wide crypto policy. The changes to

# crypto properties (Ciphers, MACs, ...) will not have any effect here.

# They will be overridden by command-line options passed to the server

# on command line.

# Please, check manual pages for update-crypto-policies(8) and sshd_config(5).

# Logging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV

#LogLevel INFO

# Authentication:

#LoginGraceTime 2m

PermitRootLogin yes

PermitEmptyPasswords yes

#StrictModes yes

#MaxAuthTries 6

#MaxSessions 10

PubkeyAuthentication yes

#重启ssh

[root@8753cfda310e /]# service sshd restart

Redirecting to /bin/systemctl restart sshd.service

[root@8753cfda310e /]# systemctl start sshd.service

[root@8753cfda310e /]# systemctl enable sshd.service

[root@8753cfda310e /]# passwd root

Changing password for user root.

New password:

BAD PASSWORD: The password is shorter than 8 characters

Retype new password:

passwd: all authentication tokens updated successfully.

将容器中的/etc/ssh/sshd_config拷贝到宿主机的共享卷/wutool上,其他容器再从共享卷拷贝到/etc/ssh/目录,并按以上步骤重启sshd服务。

局域网中随便找个工具登陆容器,这里用MobaXterm登陆容器:

图7- 10

容器间相互登陆:

图7- 11

以表7.2规划的固定ipnatsvr连接neiwwaiwintrasvr连接neiwintersvr连接waiw

natsvr

docker network connect --ip=192.168.100.221 neiw natsvr

docker network connect --ip=202.202.202.1 waiw natsvr

intrasvr

docker network connect --ip=192.168.100.220 neiw intrasvr

intersvr

docker network connect --ip=202.202.202.113 waiw intersvr

给容器intrasvr增加网关192.168.100.221

route add default gw 192.168.100.221

在intrasvr上可以ping natsvr的两个ip但是无法ping通外网intersvr,即

[root@intrasvr~]# ping natsvr ()              //

[root@ intrasvr~]# ping natsvr ()              //

[root@ intrasvr~]# ping intersvr                //不通

[root@intrasvr /]# ping 192.168.100.221 -c 2

PING 192.168.100.221 (192.168.100.221) 56(84) bytes of data.

64 bytes from 192.168.100.221: icmp_seq=1 ttl=64 time=0.383 ms

64 bytes from 192.168.100.221: icmp_seq=2 ttl=64 time=0.120 ms

--- 192.168.100.221 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1058ms

rtt min/avg/max/mdev = 0.120/0.251/0.383/0.132 ms

[root@intrasvr /]# ping 202.202.202.1 -c 2

PING 202.202.202.1 (202.202.202.1) 56(84) bytes of data.

64 bytes from 202.202.202.1: icmp_seq=1 ttl=64 time=0.072 ms

64 bytes from 202.202.202.1: icmp_seq=2 ttl=64 time=0.119 ms

--- 202.202.202.1 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1009ms

rtt min/avg/max/mdev = 0.072/0.095/0.119/0.025 ms

[root@intrasvr /]# ping 202.202.202.113 -c 2

PING 202.202.202.113 (202.202.202.113) 56(84) bytes of data.

From 192.168.100.221 icmp_seq=1 Destination Host Prohibited

From 192.168.100.221 icmp_seq=2 Destination Host Prohibited

--- 202.202.202.113 ping statistics ---

2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1005ms

⑦配置SNAT

在intrasvr和natsvr上关闭firewalld,启动iptables

[root@ nat-server ~]# systemctl stop firewalld

[root@ nat-server ~]# systemctl start iptables

在natsvr上配置配置防火墙SNAT

[root@862b11cc5d84 /]# cat /proc/sys/net/ipv4/ip_forward

确认开启路由存储转发,其值为1。如果为0,则执行:

[root@862b11cc5d84 /]# echo 1 > /proc/sys/net/ipv4/ip_forward

清空filter表,查看filter表和nat 表:

[root@862b11cc5d84 /]# iptables -F

[root@862b11cc5d84 /]# iptables -L

[root@862b11cc5d84 /]# iptables -t nat -L

配置SNAT转换

[root@862b11cc5d84 /]#iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source  202.202.202.1

[root@natsvr /]# iptables -t nat -L

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination

SNAT       all  --  192.168.100.0/24     anywhere             to:202.202.202.1

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

在内网intrasvr上测试SNAT配置是否成功,intrasvrping外部intersvr

[root@intrasvr /]# ping 202.202.202.113 -c 2

PING 202.202.202.113 (202.202.202.113) 56(84) bytes of data.

64 bytes from 202.202.202.113: icmp_seq=2 ttl=63 time=0.537 ms

--- 202.202.202.113 ping statistics ---

2 packets transmitted, 1 received, 50% packet loss, time 1039ms

rtt min/avg/max/mdev = 0.537/0.537/0.537/0.000 ms

测试内网ping公网

[root@8753cfda310e /]# ping www.baidu.com -c 2

PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data.

64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=2 ttl=127 time=30.3 ms

--- www.a.shifen.com ping statistics ---

2 packets transmitted, 1 received, 50% packet loss, time 1062ms

rtt min/avg/max/mdev = 30.323/30.323/30.323/0.000 ms

转了几次后,时延有点大。

⑧配置DNAT

情景描述:如果外网要登录natsvr的话,自动转换目的地址202.202.202.1192.168.100.221SSH服务上。

开启iptables防火墙,并清空filter表,并查看filter

[root@8753cfda310e /]# systemctl start iptables

[root@8753cfda310e /]# iptables -F

[root@8753cfda310e /]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

filterINPUT链中添加规则

[root@8753cfda310e /]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

在防火墙nat-server上配置DNAT

iptables -t nat -A PREROUTING -d 202.202.202.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.100.221:22

[root@natsvr /]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@natsvr /]# iptables -t nat -A PREROUTING -d 202.202.202.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.100.221:22

[root@natsvr /]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

intersvr上远程登录docker容器查看配置是否生效:

[root@intersvr /]# ssh 202.202.202.1

The authenticity of host '202.202.202.1 (202.202.202.1)' can't be established.

ECDSA key fingerprint is SHA256:YM49UWmdsfNjsYC/jkskneFwWiK5eBodfPvRM2OOT60.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '202.202.202.1' (ECDSA) to the list of known hosts.

root@202.202.202.1's password:

Last login: Tue Oct  8 13:37:24 2024 from 202.202.202.1

至此,完成了防火墙的基本配置和NAT部署。

相关文章:

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习07(基于docker容器的防火墙及NAT企业实战)

7.1 网络准备 7.2 网络规划 1&#xff09;虚拟网络编辑器 点击右下方“更改设置”&#xff0c;点击“添加网络”假如vmnet3和vmnet4&#xff0c;然后分别选择vmnet3和vmnet4&#xff0c;设置为“仅主机模式”&#xff0c;按③处处理&#xff0c;去掉“使用DHCP”&#xff0c;…...

②EtherNet/IP转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 EtherNet/IP 转 Modbus TCP &#xff08;接上一章&#xff09; GW系列型号 配置使用 与 EtherNet/IP 主站进行组态说明 这里介…...

Java 集合(Collection)

1.什么是集合&#xff1f; 对象的容器&#xff0c;定义了对多个对象进行操作的常用方法&#xff0c;属于接口类型。 2.集合和数组的区别 &#xff08;1&#xff09;数组长度固定&#xff0c;集合长度不固定 &#xff08;2&#xff09;数组可以存储基本类型和引用类型&#…...

Windows系统编程(三)线程并发

进程与线程 进程&#xff1a;直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说&#xff0c;进程仅仅是一个数据结构&#xff0c;并不会真实的执行代码 线程&#xff1a;通常被称作但并不真的是轻量级进程或实际工作中的进程&#xff0c;它会真实的执行代码。每…...

【Qt】控件概述(2)—— 按钮类控件

控件概述&#xff08;2&#xff09; 1. PushButton2. RadioButton——单选按钮2.1 使用2.2 区分信号 clicked&#xff0c;clicked(bool)&#xff0c;pressed&#xff0c;released&#xff0c;toggled(bool)2.3 QButtonGroup分组 3. CheckBox——复选按钮 1. PushButton QPushB…...

Java访问器方法和更改器方法

一.访问器方法 1.访问器方法的定义和用途 访问器方法&#xff0c;通常也称为getter方法&#xff0c;是一种在面向对象编程中用于从类的外部访问私有字段值的特殊方法。这些方法的设计目的是为了提供对类内部状态的受限访问&#xff0c;同时保持类的封装性。通过使用访问器方法&…...

CAN协议帧结构

一、数据帧的整体结构 ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐ │ SOF │ ID[11]│ RTR │ IDE │ DLC │ Data …...

valgrind 单例模式的自动释放(多线程)

单例模式&#xff0c;其中对象是由_pInstance指针来保存的&#xff0c;而在使用单例设计模式的过程中&#xff0c;也难免会遇到内存泄漏的问题。那么是否有一个方法&#xff0c;可以让对象自动释放&#xff0c;而不需要程序员自己手动去释放呢&#xff1f; ——嵌套类 5.1、内…...

OpenFegin

文章目录 一、OpenFegin是什么&#xff1f;二、基本使用三、超时重试机制4.自定义超时重传机制五、底层实现 一、OpenFegin是什么&#xff1f; OpenFeign的全称为Spring Cloud OpenFeign(下文简称OpenFeign),是Spring Cloud团队开发的一款基于 Feign的框架&#xff0c;声明式W…...

LeetCode-2608. 图中的最短环【广度优先搜索 图,腾讯面试真题】

LeetCode-2608. 图中的最短环【广度优先搜索 图&#xff0c;腾讯面试真题】 题目描述&#xff1a;解题思路一&#xff1a;【一图秒懂】枚举起点跑 BFS解题思路二&#xff1a;背诵版解题思路三&#xff1a; 题目描述&#xff1a; 现有一个含 n 个顶点的 双向 图&#xff0c;每个…...

IDEA 编译报错 “java: 常量字符串过长” 的解决办法

目录 一、问题描述二、问题原因2.1 理论角度2.2 源码角度 三、解决方案解决方案①&#xff1a;StringBuilder 拼接解决方案②&#xff1a;读取文件内容 四、方案验证 在线文本换行工具&#xff1a; https://lzltool.cn/Toolkit/WrapWordsInText 一、问题描述 今天在开发过程中…...

RK3568平台开发系列讲解(I2C篇)I2C 总线实现 client 设备方法

🚀返回专栏总目录 文章目录 一、非设备树实现 i2c client1.1、i2c_new_device1.2、i2c client二、设备树实现 i2c2.1、i2c_client 结构体的生成2.2、i2c_driver 驱动2.2.1、module_i2c_driver2.2.2、fan53555_regulator_probe沉淀、分享、成长,让自己和他人都能有所收获!�…...

K8S安装和部署

环境部署说明 主机IPmaster172.25.254.100node10172.25.254.10node20172.25.254.20harbor172.25.254.233 所有节点禁用selinux和防火墙 所有节点同步时间和解析 所有节点安装docker-ce 所有节点禁用swap&#xff0c;注意注释掉/etc/fstab文件中的定义 解析配置&#xff08;…...

Singleton(单例模式)

1. 意图 在开发中&#xff0c;若某些模块或功能只需要一个类实例&#xff0c;所有调用地方通过着一个类对象访问功能&#xff0c;单例模式符合这种类实例创建模式&#xff0c;并且通过提供统一类实例接口访问类对象。 2. 适用性 《Gof 设计模式-可复用面向对象软件的基础》中对…...

【Linux报错】“-bash: cd: too many arguments“

问题描述 今天使用 cd 想要调整某个文件目录时&#xff0c;发现以下报错 原因分析&#xff1a; arguments 是参数的意思&#xff0c;该报错提示参数过多&#xff0c;意味着系统识别到了多余参数 本质原因&#xff1a;你的命令中输入了多余的 ”空格“ &#xff0c;检查一…...

C# WebService返回参数为DataTable报错“XML文档有错误”

该问题由于DataTable列存在自定义类型。 解决该报错需要以下几步&#xff1a; 1、自定义类型增加xml序列化 2、由于C#从 XML 反序列化 DataSet 或 DataTable 时的默认限制&#xff0c;所以需要先把调用方的项目开放限制&#xff0c;如果是.netframework项目&#xff0c;需要…...

[paddle]paddleseg快速开始

快速开始 为了让大家快速了解PaddleSeg&#xff0c;本文档使用一个简单示例进行演示。在实际业务中&#xff0c;建议大家根据实际情况进行调整适配。 在开始下面示例之前&#xff0c;请大家确保已经安装好PaddleSeg开发环境&#xff08;安装说明&#xff09;。 1 准备数据 …...

UNIAPP popper气泡弹层【unibest框架下】vue3+typescript

看了下市场的代码&#xff0c;要么写的不怎么好&#xff0c;要么过于复杂。于是把市场的代码下下来了自己改。200行代码撸了个弹出层组件。兼容H5和APP。 功能&#xff1a; 1)只支持上下左右4个方向的弹层不支持侧边靠齐 2)不对屏幕边界适配 3)支持弹层外边点击自动隐藏 4)支持…...

launcher.py: error: the following arguments are required: --output_dir

记录一个LLaMA-Factroy配置过程。 安装 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]"训练 CUDA_VISIBLE_DEVICES0 llamafactory-cli train example/train_lora/.yaml按理说配置好文件应…...

C语言基础之结构体

今天我们来讲讲C语言基础的最后一个知识点了 —— 结构体。不知道大家对前面的C语言基础的知识点掌握的怎么样了呢&#xff1f;下面我们就开始讲解结构体的相关知识点吧&#xff01; 什么是结构体呢&#xff1f;或者说结构体有什么作用呢&#xff1f;对于复杂对象来说&#xff…...

Redis入门第四步:Redis发布与订阅

欢迎继续跟随《Redis新手指南&#xff1a;从入门到精通》专栏的步伐&#xff01;在本文中&#xff0c;我们将深入探讨Redis的发布与订阅&#xff08;Pub/Sub&#xff09;模式。这是一种强大的消息传递机制&#xff0c;适用于各种实时通信场景&#xff0c;如聊天应用、实时通知和…...

MySQL 之权限与授权

MySQL 权限及授权系统用于控制数据库用户对数据库资源的访问和操作权限。它提供了一种细粒度的安全控制机制&#xff0c;确保只有被授权的用户才能执行特定的操作。MySQL 的权限控制体系非常灵活&#xff0c;支持多种权限类型及级别&#xff08;数据库、表、列、存储过程等&…...

解决方案:Pandas里面的loc跟iloc,有什么区别

文章目录 一、现象二、解决方案案例使用loc使用iloc 简单总结 一、现象 在用Pandas库处理数据的时候&#xff0c;久而久之不用loc跟iloc&#xff0c;难免会有些混乱记混 二、解决方案 在Pandas中&#xff0c;loc和iloc是两种常用的数据选择方法&#xff0c;它们的主要区别在…...

C# 和 C++ 混合编程

以下是一个关于 C# 和 C 混合编程 的教程详细目录&#xff0c;涵盖了混合编程中的各个重要方面&#xff1a; 目录 1. 引言 1.1 什么是混合编程&#xff1f; 1.2 为什么选择 C# 和 C 进行混合编程&#xff1f; 1.3 应用场景和优势 2. 基本概念 2.1 C# 和 C 的基础差异 2.…...

Vxe UI vue vxe-table 实现表格单元格选中功能

Vxe UI vue vxe-table 实现表格单元格选中功能 在表格中实现鼠标点击任意单元格&#xff0c;选取的功能&#xff0c;通过 mouse-config 配置就可以开启单选功能&#xff0c;多选单元格选取功能需安装插件支持。 代码 参数说明 mouse-config 鼠标配置项&#xff1a; selected&…...

组合模式详解

1、组合模式基本介绍 1) 组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;它创建了对象组的树形结构&#xff0c;将对象组合成树状结构以 表示“整体-部分”的层次关系。 2) 组合模式依据树形结构来组合对象&#xff0c;用来表示部…...

AltiumDesigner脚本开发-DIP封装制作

1.点击工具栏的运行工具(蓝色向右三角图标)可以执行脚本程序&#xff1b; 2.点击菜单栏Run->Run可以执行脚本程序&#xff1b; 3.在脚本编辑器中&#xff0c;按键盘的F9键可以执行脚本程序&#xff1b; 4.通过菜单栏执行脚本程序&#xff08;需要将程序添加到菜单栏中&am…...

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介&#xff1a;云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…...

【动态规划-最长递增子序列(LIS)】力扣673.最长递增子序列的个数

给定一个未排序的整数数组 nums &#xff0c; 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列&#xff0c;分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 示例 2: 输入: [2,2,2,2,2] 输出: 5 解释:…...

SQL优化 where谓词条件is null优化

1.创建测试表及谓词条件中包含is null模拟语句 create table t641 as select * from dba_objects; set autot trace select SUBOBJECT_NAME,OBJECT_NAME from t641 where OBJECT_NAMEWRI$_OPTSTAT_SYNOPSIS$ and SUBOBJECT_NAME is null; 2.全表扫描逻辑读1237 3.创建等值谓词条…...