【无标题】docker-compose一键部署项目,haproxy容器代理多个web或java容器

news2024/9/21 4:39:14
# 创建脚本,可以在java环境中运行任何的jar包或者war包
 #!/bin/bash
 /usr/local/jdk/bin/java -jar /java/src/*.?ar

一、思路分析:
(1)nginx
1、下载镜像,将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/

2、启动容器

3、该项目是一个前后端分离的项目,并非所有的请求都是来自同一个位置,设置请求的时候还是需要在hosts文件中挟持域名

4、域名是固定的,但是,域名可以绑定不同的ip

5、所以我们设置前端请求发送给一个bu.yuanyu.zhangmin的域名,然后在本机中将域名劫持给我们的docker服务器,当我们发送请求给该域名时,docker服务器将给我们作出回应

(2)mysql
1、各个版本都有官方的镜像,直接下载docker pull mysql:5.7.44

2、启动容器的时候,挂载data目录

 docker run -itd -p3306:3306 -v /root/pes/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.44
3、制作data的时候,顺⼿删除auto.cnf

(3)tomcat
1、被war包集成,所以我们直接启动war

2、springboot可以直接集成tomcat,build一个jar包或者是war包

3、我们没有安装tomcat

4、application.properties(将tomcat连接数据库)

1、可以配置端口

2、配置数据库的访问

5、使用/usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war启动,但是在启动这个任务时一定要跳转到application.properties文件所在目录,因为在启动的同时,还需要加载applicaiton.properties

二、制作docker-compose.yml文件,实现一键部署
1、基础准备(保证基础镜像无问题)
1)下载基础镜像
 [root@docker ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
 nginx        latest    5ef79149e0ec   2 weeks ago    188MB
 mysql        5.7.44    5107333e08a8   8 months ago   501MB
 centos       latest    5d0da3dc9764   2 years ago    231MB
2)创建nginx:v0镜像
 [root@docker project_exam_system]# tree web/
 web/
 ├── dist
 │?? ├── assets
 │?? │?? ├── AdminView-yX0Ltz_1.js
 │?? │?? ├── CategoryView-Ca4t3JNT.js
 │?? │?? ├── CityView-0ESlUfo8.css
 │?? │?? ├── CityView-BJTl06GN.js
 ......
 │   ├── TeacherView-Cogr4CCq.js
 │   │   ├── TopicView-DFXgxSyC.js
 │   │   └── TopicView-Is6fJS__.css
 │   ├── favicon.ico
 │   └── index.html
 └── Dockerfile
 [root@docker web]# docker build -t nginx:v0 .
 [+] Building 0.2s (7/7) FINISHED                                                docker:default
 [root@docker ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
 nginx        v0        13ccc573fe05   9 seconds ago   189MB
3)创建java:v0镜像
 [root@docker project_exam_system]# tree java
 java
 ├── application.properties
 ├── Dockerfile
 ├── java.sh
 ├── jdk
 │   ├── bin
 │   │   ├── jar
 │   │   ├── jarsigner
 │   │   ├── java
 │   │   ├── javac
 ......
 │   │       ├── rmiregistry.1
 │   │       └── serialver.1
 │   ├── README
 │   └── release
 ├── jdk-17_linux-x64_bin.tar.gz
 └── Project_ExamSystem-V1.0.0.war
 [root@docker java]# docker build -t java:v0 .
 [+] Building 7.2s (9/9) FINISHED                                                docker:default
 [root@docker java]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
 java         v0        7fae85c42cbe   36 seconds ago   591MB
4)创建mysql:v0镜像
 [root@docker project_exam_system]# tree mysql/
 mysql/
 ├── Dockerfile
 └── project_exam_system.sql
 0 directories, 2 files
 [root@docker mysql]# docker build -t mysql:v0 .
 [+] Building 0.3s (7/7) FINISHED                                                docker:default
 [root@docker mysql]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
 mysql        v0        258d8ed442ac   16 seconds ago   512MB
5)启动nginx容器
 [root@docker ~]# docker run -itd -p80:80 nginx:v0
6)启动java容器
 [root@docker ~]# docker run -itd --name java -p8080:8080 java:v0
7)启动mysql容器
 [root@docker ~]# docker run -itd --name mysql -p3306:3306 mysql:v0 
8)查看容器状态
 [root@docker ~]# docker ps
 CONTAINER ID   IMAGE            COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
 79cc8614e967   mysql:v0         "docker-entrypoint.s…"   9 seconds ago       Up 6 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
 29d3ce68ceca   java:v0          "/usr/local/jdk/bin/…"   36 seconds ago      Up 34 seconds      0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              java
 fed2633b259b   haproxy:latest   "docker-entrypoint.s…"   12 minutes ago      Up 11 minutes      0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              wizardly_edison
 # 之后这些容器可以全部直接删除
 [root@docker ~]# docker rm -f 79(容器编号) 29(容器编号) fe(容器编号)

2、配置高可用的项目(使用haproxy调用web和java容器)
1)先创建三个前端项目(nginx容器)
容器在不映射端口时,在远程是无法访问nginx服务,而且现在也不希望外部直接访问nginx,希望创建nginx服务的集群,这个集群被haproxy代理,创建3个nginx容器,创建一个haproxy服务器,而且nginx容器还需要指定名称,web0、web1、web2。因为如果没有名称,那么容器就无法被haproxy link到。

 # 端口不能映射80,并指定名称
 [root@docker ~]# docker run -itd --name web0 nginx:v0 
 45d83cda5bef619b937d25e581db31401841b955f9367dbffbc79a236e632612
 [root@docker ~]# docker run -itd --name web1 nginx:v0 
 b9c80deb9f08a4c2327c1784c8fdb3ab8044c48160ee29102f27e2b52495b9f4
 [root@docker ~]# docker run -itd --name web2 nginx:v0 
 5fbd082f529cdab21b3a2eb74ae6d9560c694fe2a5368e1ad63affe1ad1c93e8
 # 查看容器状态
 [root@docker ~]# docker ps 
 CONTAINER ID   IMAGE      COMMAND                   CREATED          STATUS          PORTS     NAMES
 5fbd082f529c   nginx:v0   "/docker-entrypoint.…"   4 seconds ago    Up 3 seconds    80/tcp    web2
 b9c80deb9f08   nginx:v0   "/docker-entrypoint.…"   8 seconds ago    Up 6 seconds    80/tcp    web1
 45d83cda5bef   nginx:v0   "/docker-entrypoint.…"   12 seconds ago   Up 11 seconds   80/tcp    web0
2)haproxy容器外部测试
在宿主机上安装了haproxy,编辑配置文件,代理三个nginx容器中的web服务,是直接添加容器的ip地址

 # 安装haproxy
 [root@docker ~]# yum -y install haproxy
 # 查看三个nginx容器的IP地址
 [root@docker ~]# docker inspect 45 | grep IPA
             "SecondaryIPAddresses": null,
             "IPAddress": "172.17.0.2",
                     "IPAMConfig": null,
                     "IPAddress": "172.17.0.2",
 [root@docker ~]# docker inspect b9 | grep IPA
             "SecondaryIPAddresses": null,
             "IPAddress": "172.17.0.3",
                     "IPAMConfig": null,
                     "IPAddress": "172.17.0.3",
 [root@docker ~]# docker inspect 5f | grep IPA
             "SecondaryIPAddresses": null,
             "IPAddress": "172.17.0.4",
                     "IPAMConfig": null,
                     "IPAddress": "172.17.0.4",
 # 修改配置文件
 [root@docker ~]# vim /etc/haproxy/haproxy.cfg
 # 注释静态资源
    # use_backend static          if url_static
 # 修改轮询模块
 backend app
     balance     roundrobin
     server  app1 172.17.0.2:80 check
     server  app2 172.17.0.3:80 check
     server  app3 172.17.0.4:80 check
 # 启动服务
 [root@docker ~]# haproxy -f /etc/haproxy/haproxy.cfg 
 [root@docker ~]# netstat -lntup | grep 5000
 tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      1985/haproxy 
 # 测试访问过后可以直接删除进程来停止服务
 [root@docker ~]# kill -9 1985(进程号)
 [root@docker ~]# netstat -lntup | grep 5000

3)创建haproxy容器
创建一个haproxy容器,将配置文件导入到容器,在容器中启动haproxy,也是可以的

 # 拉取haprxy镜像
 [root@docker ~]# docker pull haproxy
 [root@docker ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
 haproxy      latest    4e5bebb0fd91   7 weeks ago    103MB
 # 该haproxy.cfg文件是在官方网站里下载下来的
 [root@docker ~]# vim haproxy.cfg 
 # 只修改web的轮询模块即可,默认是5000端口,也可修改
 listen proxy-web
         bind 0.0.0.0:5000
 ......
         server web0 172.17.0.2:80 check weight 1 maxconn 2000
         server web1 172.17.0.3:80 check weight 1 maxconn 2000
         server web2 172.17.0.4:80 check weight 1 maxconn 2000
 [root@docker ~]# docker run -itd -p5000:5000 haproxy:latest /bin/bash
 fed2633b259b96d3c0ed5e9ca51c031c36b1e21361cb3cf9d57b9d49a9ea1710
 [root@docker ~]# docker cp haproxy.cfg fed:/usr/local/etc/haproxy
 Successfully copied 5.12kB to fed:/usr/local/etc/haproxy
 [root@docker ~]# docker attach fed
 haproxy@fed2633b259b:~$ ls /usr/local/etc/haproxy/haproxy.cfg 
 /usr/local/etc/haproxy/haproxy.cfg
 # 启动服务
 haproxy@fed2633b259b:~$ haproxy -f /usr/local/etc/haproxy/haproxy.cfg 

4)使用haproxy容器调用web容器
 # -itd 交互 终端  后台
 # link 锚定web容器
 # v 将配置文件挂载到容器中
 [root@docker ~]# docker run -itd --link web0 --link web1 --link web2 -p5000:5000 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest
 65466d3aef2566512b63690c02e4497ddb7594b8268a26136ec040e2cb858b3b
 [root@docker ~]# docker ps
 CONTAINER ID   IMAGE            COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
 65466d3aef25   haproxy:latest   "docker-entrypoint.s…"   6 seconds ago   Up 4 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              romantic_curie
 79cc8614e967   mysql:v0         "docker-entrypoint.s…"   2 hours ago     Up 2 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
 29d3ce68ceca   java:v0          "/usr/local/jdk/bin/…"   3 hours ago     Up 3 hours     0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              java
 5fbd082f529c   nginx:v0         "/docker-entrypoint.…"   4 hours ago     Up 4 hours     80/tcp                                                 web2
 b9c80deb9f08   nginx:v0         "/docker-entrypoint.…"   4 hours ago     Up 4 hours     80/tcp                                                 web1
 45d83cda5bef   nginx:v0         "/docker-entrypoint.…"   4 hours ago     Up 4 hours     80/tcp                                                 web0
 # 删除该haproxy容器(使用的是ip地址,要改为使用域名才可以进行link)
 [root@docker ~]# docker rm -f 65

5)调用haproxy的监控界面(并改ip轮询为域名轮询)
 # 只查看即可,创建haproxy服务器容器时将相应端口映射出去就行,记得初始的账户和密码
 [root@docker ~]# vim haproxy.cfg 
 ######## 监控界面配置 #################
 listen admin_status
         # 监控界面访问信息
         bind 0.0.0.0:8888
         mode http
         # URI相对地址
         stats uri /dbs
         # 统计报告格式
         stats realm Global\ statistics
         # 登录账户信息
         stats auth admin:123456
 [root@docker ~]# vim haproxy.cfg
         server web0 web0:80 check weight 1 maxconn 2000
         server web1 web1:80 check weight 1 maxconn 2000
         server web2 web2:80 check weight 1 maxconn 2000
 [root@docker ~]# docker run -itd --link web0 --link web1 --link web2 -p5000:5000 -p8888:8888 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest
 # 删除该haproxy容器
 [root@docker ~]# docker rm -f 8af

6)使用haproxy容器调用java容器
 [root@docker ~]# docker run -itd --name java0 java:v0
 283c87bcaea166b017160aa84ce5424dd9baf3ec8fd168a1406f7dc11be3e694
 [root@docker ~]# docker run -itd --name java1 java:v0
 e851f31c87f39c2d028e42b36bd77bcf818a8eb97c9a6cc002656fd1501c0ea6
 [root@docker ~]# docker run -itd --name java2 java:v0
 fb94c87c4fa87d08b0d621157aa33ed74ca459beb32a3c950a7703227ab2f031
 [root@docker ~]# vim haproxy.cfg 
 # 复制一份proxy-web的模块,修改为java模块
 listen proxy-java
 # 修改端口为8080
         bind 0.0.0.0:8080
         mode http
         # 负载均衡算法
         # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
         balance roundrobin
         # 日志格式
         option tcplog
         # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
         # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
         #option mysql-check user haproxy
          # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
 # 修改域名为java域名,端口为java端口
         server java0 java0:8080 check weight 1 maxconn 2000
         server java1 java1:8080 check weight 1 maxconn 2000
         server java2 java2:8080 check weight 1 maxconn 2000
         #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
         # 使用keepalive检测死链
         # option tcpka
 [root@docker ~]# docker run -itd --link web0 --link web1 --link web2 --link java0 --link java1 --link java2 -p8080:8080 -p5000:5000 -p8888:8888 -v /root/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest
 e5ea894c0f30988604cfd6fe5a48b9a69f14c2c3f2e373fe775c0554f37f19db

# 下载http-tools,使用ab测试承载量
 [root@docker ~]# yum -y install http-tools
 [root@docker ~]# ab -n 100 -c 10 http://10.0.0.7:5000/

3、编辑docker-compose.yml文件,一键部署完整项目
新机子:

1)docker-compose环境准备
 # 配置docker环境
 source docker.sh
 scp 10.0.0.7:/etc/docker/daemon.json /etc/docker/daemon.json
 vim /etc/docker/daemon.json 
 {       
         "registry-mirrors" : [
                 "https://do.nark.eu.org",
                 "https://dc.j8.work",
                 "https://docker.m.daocloud.io",
                 "https://dockerproxy.com",
                 "https://docker.mirrors.ustc.edu.cn",
                 "https://docker.nju.edu.cn"
         ]
 }  
 systemctl start docker
 # 安装pip(python包管理器)
 yum -y install python2-pip
 # 升级pip
 pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple
 # 安装docker-compose
 [root@compose ~]# pip install docker-compose --ignore-installed requests -i https://mirrors.aliyun.com/pypi/simple
2)使用compose构建自动化部署文件
 # 创建项目目录
 [root@compose ~]# mkdir -p pes/{java,mysql,web}
 [root@compose ~]# tree pes/
 pes/
 ├── java
 ├── mysql
 └── web
 3 directories, 0 files
 [root@compose ~]# cd pes
 # 在项目目录中创建docker-compoce.yml文件
 [root@compose pes]# vim docker-compose.yml
 version: "3"
 services:
         web:
                 container_name: web0
                 image: nginx:latest
                 ports:
                 - "80:80"
                 volumes:
                 - ./web/src/dist/:/usr/share/nginx/html/
                 expose:
                 - 80
                 restart: "always"
 #        mysql:
 #                container_name: mysql0
 #                image: mysql:5.7.44
 #        java:
 #                container_name: java0
 #                image: java:v0
 [root@compose pes]# mkdir -p web/src/
 [root@compose pes]# scp -r 10.0.0.7:/root/project_exam_system/web/dist web/src/
 [root@compose pes]# ls web/src/
 dist
 # 拉取nginx镜像
 [root@compose pes]# docker pull nginx
 Using default tag: latest
 # 执行docker compose命令创建指定容器
 [root@compose pes]# docker compose up -d
 WARN[0000] /root/pes/docker-compose.yml: `version` is obsolete 
 [+] Running 1/1
  ✔ Container web0  Started                                                                0.9s 
  # 查看容器是否正常创建启动
 [root@compose pes]# docker ps
 CONTAINER ID   IMAGE          COMMAND                   CREATED              STATUS              PORTS                               NAMES
 5a007ca2fdbe   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   web0

3)使用docker compose一次性创建多台完全一样的容器
# 查看docker-compose的帮助文档
[root@compose ~]# docker-compose --help
scale              Set number of containers for a service
# 查看docker-compose scale的帮助文档
[root@compose ~]# docker-compose scale --help
Usage: scale [options] [SERVICE=NUM...]
# 一次性创建多台相同容器时,不能为容器启相同的名称,映射相同的端口,所以需要在yml文件中将这两行注释掉
[root@compose pes]# vim docker-compose.yml 
version: "3"
services:
        web:
                #container_name: web0
                image: nginx:latest
                #ports:
                #- "80:80"
                volumes:
                - ./web/src/dist/:/usr/share/nginx/html/
                expose:
                - 80
                restart: "always"
# 使用scale选项创建3台相同的web容器
[root@compose pes]# docker compose up --scale web=3 -d
WARN[0000] /root/pes/docker-compose.yml: `version` is obsolete 
[+] Running 3/3
 ✔ Container pes-web-3  Started                                                           0.8s 
 ✔ Container pes-web-1  Started                                                           0.5s 
 ✔ Container pes-web-2  Started                                                           1.1s
# 查看容器列表
[root@compose ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS     NAMES
dd63d63e1ced   nginx:latest   "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   80/tcp    pes_web_2
12edb14dfae7   nginx:latest   "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   80/tcp    pes_web_1
89fa62180f85   nginx:latest   "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   80/tcp    pes_web_3
# docker-compose暂停集群
[root@compose ~]# cd pes/
[root@compose pes]# docker-compose stop
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends import default_backend
Stopping pes-web-1 ... done
Stopping pes-web-3 ... done
Stopping pes-web-2 ... done
[root@compose pes]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# docker-compose移除集群
[root@compose pes]# docker-compose down
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
  from cryptography.hazmat.backends import default_backend
Removing pes-web-1 ... done
Removing pes-web-3 ... done
Removing pes-web-2 ... done
Removing network pes_default
[root@compose pes]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

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

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

相关文章

LLM大模型教程:大模型技术名词和概念太多了,一手学习笔记

、、 构建AI化需要的知识体系 Semantic Kernel Semantic Kernel是Microsoft推出的一个开源框架,旨在帮助开发者构建和部署AI应用,特别是那些需要理解和生成自然语言的应用。它提供了一种结构化的方式来定义和管理技能(Skills)&…

【Canvas技法】五种函数化回文边纹纹饰荟萃

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五种函数化回文边纹纹饰荟萃</title><style type"text…

一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

前言 上期写了NL2SQL&#xff0c;相信看过的朋友应该都对现在大模型在数据交互办公层面的探索和发展都十分感兴趣&#xff0c;在此商业化的产品市场上也有很多&#xff0c;比如阿里云的析言GBI&#xff1a; 腾讯云的ChatBI&#xff1a; 像此类的产品可以说是最贴切业务的。 在…

C++笔记16•数据结构:关联式容器map和set•

map和set 1.关联式容器 前面介绍的的是序列式容器&#xff1a;vector、list、deque等容器。这次博客介绍STL新的容器成员&#xff0c;那就是关联式容器&#xff1b;顾名思义关联式容器就是容器存在中的数据之间存在联系&#xff08;关联&#xff09;。与序列式容器不同的是&am…

linux入门系列【1】常用命令

一、简介 linux 基本操作命令,便于我们去使用命令帮助我们去检索和排查问题 二、常用命令 1.磁盘空间排查 1.1 查看磁盘空间分布情况 du -ah .|sort -hr 在对应目录下执行则是查看对应目录的文件分布以及大小情况,一般用于查看某个文件夹目录数据情况 1.2 查看深度层级为…

Java中的Set(如果想知道Java中有关Set的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在Java编程中&#xff0c;集合框架&#xff08;Collections Framework&#xff09;是处理数据结构和算法的基础工具之一。它提供了一套强大且灵活的接口和类&#xff0c;用于存储和操作不同类型的数据集合。在这其中&#xff0c;Set接口扮演着一个重要角色。与…

vue-router基本流程及其案例分析

web发展历程 1.后端实现路由 在这个阶段&#xff0c;前端基本上只写界面&#xff0c;也就是html,css,js那些东西&#xff0c;然后在界面中挖槽用来接后端数据&#xff0c;包括路由也由后端负责&#xff0c;在这个阶段中&#xff0c;web开发非常依赖后端&#xff0c;常见的后端…

系列精选 |【梧桐数据库】产品架构层次解析-总述

梧桐数据库中秋特别活动免费领取大闸蟹 抽奖免费领取大闸蟹 以下是正文 在浩瀚的数据世界里&#xff0c;梧桐数据库犹如一颗璀璨的星辰&#xff0c;它的设计如同一首细腻的诗歌&#xff0c;每一个层次都是优美的韵律&#xff0c;为我们构建了一个强大而灵动的数据天地。 梧桐数…

西中区2024年度安全知识竞赛活动方案

为有效预防安全生产事故的发生&#xff0c;深化西中区全体员工对安全生产的认识&#xff0c;切实提升全体人员的安全意识和自我保护能力&#xff0c;夯实安全知识基础&#xff0c;丰富安全文化内涵&#xff0c;推动安全生产工作更加规范化、系统化&#xff0c;根据西中区安全生…

<数据集>遥感航拍飞机和船舶和识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;19973张 标注数量(xml文件个数)&#xff1a;19973 标注数量(txt文件个数)&#xff1a;19973 标注类别数&#xff1a;2 标注类别名称&#xff1a;[ship,plane] 序号类别名称图片数框数1ship17575416292plane239815…

简单好用的SD卡克隆软件:轻松克隆SD卡

想更换SD卡以提升性能&#xff0c;但不知道如何进行SD卡克隆&#xff1f;不用担心&#xff0c;本文推荐了一款好用SD卡克隆软件&#xff0c;轻松帮你解决问题&#xff01; 为什么要克隆SD卡&#xff1f; SD卡广泛应用于游戏机、手机及其他便携设备。用户常用SD卡存储个人数据…

2024/9/3黑马头条跟学笔记(一)

D1 视频链接 Day1-05-nacos环境搭建_哔哩哔哩_bilibili 内容介绍 搭建微服务开发环境&#xff0c;登录接口包含注册中心和nacos配置中心 服务端用户…微服务。网关负载均衡转发接口请求 实现微服务间互相通信 接口测试 前后端联调 前置知识 背景介绍 类似今日头条&#x…

权威解读:社交类APP都需要办理哪些资质?

今天小编给大家讲讲社交类APP都需要办理哪些资质&#xff1f; 我们先来看下微信小程序对社交类目是怎么分类以及需要哪些资质许可证&#xff1f; 微信小程序社交类目许可资质 微信小程序对社交类目做了一些细分&#xff0c;它把社交分为陌生人交友、熟人交友、社区/论坛、直播…

log4j 控制台和文件输出乱码问题解决

一个小问题&#xff0c;却让我感觉到&#xff0c;现在真正动脑的人很少。。我来说说吧。 今天遇到一个小问题&#xff0c; log4j输出到文件乱码&#xff0c;控制台正常。显然是编码问题导致。Google一搜&#xff0c;几乎一水的说&#xff1a; 项目中log4j在英文版linux下输出中…

气膜水产养殖:打造高效、可持续的水产养殖新模式—轻空间

随着全球对高质量水产品需求的不断增加&#xff0c;传统的水产养殖方式面临着诸多挑战&#xff0c;如环境污染、气候变化以及水源短缺等问题。在这种背景下&#xff0c;气膜水产养殖作为一种创新的养殖模式&#xff0c;逐渐引起了广泛关注。通过结合气膜结构建筑与现代化养殖技…

【测试】系统测试用例编写案例模板(Word原件)

1编写目的 2使用范围 3文档概述 4术语和缩略语 5编写规范 5.1编写目的 5.2编写范围 5.3编写规范 6参考文档 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需…

从UGC到PGC:3C品牌与TikTok达人合作的内容优化策略

在数字营销新时代&#xff0c;内容的创作和传播方式正在经历快速的变革。3C品牌与TikTok达人的合作正逐渐从用户生成内容&#xff08;UGC&#xff09;向专业生成内容&#xff08;PGC&#xff09;转变。这一转变不仅改变了内容的生产方式&#xff0c;也提升了品牌营销的效果。本…

三种权限模型该如何选择

在构建企业级平台或复杂应用系统时&#xff0c;权限管理是一个至关重要的环节。它决定了哪些用户可以访问哪些资源&#xff0c;以及可以进行哪些操作&#xff0c;一个健全的权限管理架构&#xff0c;在确保系统正常运行的同时&#xff0c;也能有效防止数据泄露和非法访问&#…

antd:手写走马灯vue组件

在使用ant-design-vue做走马灯的时候,封装的组件的自由度太低,难以实现想要的效果,于是本人自己写了一个走马灯组件,以方便代码复用。本文将介绍如何在vue框架中,使用ant-design-vue手动实现走马灯组件效果。 结果如下图所示, 一、使用说明 使用时,直接创建一个组件,…

.NET 最好用的验证组件 FluentValidation

目录 前言 项目介绍 项目使用 1、安装FluentValidation 2、Program.cs 3、Startup.cs 4、版本兼容 5、支持的验证器 6、可扩展 7、Swagger 模型和验证器 8、包含验证器 高级用法 1、异步验证 2、条件验证 3、自定义验证规则 4、自定义错误消息 项目地址 总结 …