【Docker】Docker学习⑨ - 单机编排之Docker Compose

【Docker】Docker学习⑨ - 单机编排之Docker Compose

  • 一、Docker简介
  • 二、Docker安装及基础命令介绍
  • 三、Docker镜像管理
  • 四、Docker镜像与制作
  • 五、Docker数据管理
  • 六、网络部分
  • 七、Docker仓库之单机Dokcer Registry
  • 八、Docker仓库之分布式Harbor
  • 九、单机编排之Docker Compose
    • 1 基础环境准备
    • 2 从docker compose启动单个容器
    • 3 从docker compose启动多个容器
    • 4 定义数据卷挂载
    • 5 实现单机版的HA+NGINX+TOMCAT
      • 5.1 制作haproxy镜像
      • 5.2 准备nginx镜像
      • 5.3 准备tomcat镜像
      • 5.4 编辑docker compose 文件及环境准备
      • 5.5 启动容器

一、Docker简介

  • 参考:【Docker】Dokcer学习① - 简介

二、Docker安装及基础命令介绍

  • 参考:【Docker】Docker学习② - Docker安装及基础命令介绍

三、Docker镜像管理

  • 参考:【Docker】Docker学习③ - Docker镜像管理

四、Docker镜像与制作

  • 参考:【Docker】Docker学习④ - Docker镜像与制作

五、Docker数据管理

  • 参考:【Docker】Docker学习⑤ - Docker数据管理

六、网络部分

  • 参考:【Docker】Docker学习⑥ - 网络部分

七、Docker仓库之单机Dokcer Registry

  • 参考:【Docker】Docker学习⑦ - Docker仓库之单机Dokcer Registry

八、Docker仓库之分布式Harbor

  • 参考:【Docker】Docker学习⑧ - Docker仓库之分布式Harbor

九、单机编排之Docker Compose

当在宿主机启动较多的容器的时候,如果都是手动操作会觉得比较麻烦而且容易出错,这个时候推荐使用docker单机编排工具docker compose,Dokcer Compose是docker容器的一种编排服务,docker compose是一个管理多个容器的工具,比如可以解决容器之间的依赖关系,就像启动一个web就必须得先把数据库服务先启动一样,docker compose完全可以替代docker run启动容器。

  • github地址:https://github.com/docker/compose

1 基础环境准备

  • 1.1 安装python环境及pip命令
	yum install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm -yyum install python-pip -ypip install --upgrade pip 
  • 1.2 安装docker compose
	pip install docker-compose
  • 1.3 验证版本
	docker-compose version

日志:

	[root@gbase8c_private ~]# docker-compose version/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_backenddocker-compose version 1.26.2, build unknowndocker-py version: 4.4.4CPython version: 2.7.5OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017
  • 1.4 查看帮助
	docker-compose --help[root@gbase8c_private ~]# docker-compose --help/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_backendDefine and run multi-container applications with Docker.Usage:docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]docker-compose -h|--helpOptions:-f, --file FILE             Specify an alternate compose file(default: docker-compose.yml)-p, --project-name NAME     Specify an alternate project name(default: directory name)-c, --context NAME          Specify a context name--verbose                   Show more output--log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)--no-ansi                   Do not print ANSI control characters-v, --version               Print version and exit-H, --host HOST             Daemon socket to connect to--tls                       Use TLS; implied by --tlsverify--tlscacert CA_PATH         Trust certs signed only by this CA--tlscert CLIENT_CERT_PATH  Path to TLS certificate file--tlskey TLS_KEY_PATH       Path to TLS key file--tlsverify                 Use TLS and verify the remote--skip-hostname-check       Don't check the daemon's hostname against thename specified in the client certificate--project-directory PATH    Specify an alternate working directory(default: the path of the Compose file)--compatibility             If set, Compose will attempt to convert keysin v3 files to their non-Swarm equivalent--env-file PATH             Specify an alternate environment fileCommands:build              Build or rebuild servicesconfig             Validate and view the Compose filecreate             Create servicesdown               Stop and remove containers, networks, images, and volumesevents             Receive real time events from containersexec               Execute a command in a running containerhelp               Get help on a commandimages             List imageskill               Kill containerslogs               View output from containerspause              Pause servicesport               Print the public port for a port bindingps                 List containerspull               Pull service imagespush               Push service imagesrestart            Restart servicesrm                 Remove stopped containersrun                Run a one-off commandscale              Set number of containers for a servicestart              Start servicesstop               Stop servicestop                Display the running processesunpause            Unpause servicesup                 Create and start containersversion            Show the Docker-Compose version information

2 从docker compose启动单个容器

目录可以在任意目录,推荐放在有意义的位置(/usr/local/docker-compos)

  • 2.1 一个容器的docker compose文件
    设置一个yml格式的配置文件,因此要注意前后缩进
	vim /usr/local/docker-compos/docker-compose.yml[root@gbase8c_private docker-compose]# cat docker-compose.yml web1:image: 192.168.56.199/nginx/nginx:v1expose:- 80- 443ports:- "80:80"- "443:443"
  • 2.2 启动容器
    必须要在docker compose文件所在的目录执行:
	docker-compose up #前台启动[root@gbase8c_private docker-compose]# docker-compose up/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_backendCreating docker-compose_web1_1 ... doneAttaching to docker-compose_web1_1web1_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configurationweb1_1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/web1_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.shweb1_1  | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.confweb1_1  | 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.confweb1_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.shweb1_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.shweb1_1  | /docker-entrypoint.sh: Configuration complete; ready for start upweb1_1  | 2023/12/17 14:41:21 [notice] 1#1: using the "epoll" event methodweb1_1  | 2023/12/17 14:41:21 [notice] 1#1: nginx/1.21.5web1_1  | 2023/12/17 14:41:21 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) web1_1  | 2023/12/17 14:41:21 [notice] 1#1: OS: Linux 3.10.0-1160.71.1.el7.x86_64web1_1  | 2023/12/17 14:41:21 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576web1_1  | 2023/12/17 14:41:21 [notice] 1#1: start worker processesweb1_1  | 2023/12/17 14:41:21 [notice] 1#1: start worker process 29web1_1  | 2023/12/17 14:41:21 [notice] 1#1: start worker process 30^CGracefully stopping... (press Ctrl+C again to force)Stopping docker-compose_web1_1 ... done
  • 2.3 web访问测试
  • 2.4 后台启动服务
    容器在启动的时候,会给容器自定义一个名称
	docker-compose up -d

日志:

	[root@gbase8c_private docker-compose]# docker-compose up -dStarting docker-compose_web1_1 ... done  #容器名称
  • 2.5 自定义容器名称
	[root@gbase8c_private docker-compose]# cat docker-compose.yml 
web1:image: 192.168.56.199/nginx/nginx:v1expose:- 80- 443container_name: nginx-web1   #自定义容器名称ports:- "80:80"- "443:443"

日志:

	[root@gbase8c_private docker-compose]# docker-compose stopStopping docker-compose_web1_1 ... done[root@gbase8c_private docker-compose]# docker ps -aCONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                      PORTS               NAMES72aed697d033        192.168.56.199/nginx/nginx:v1              "/docker-entrypoint.…"   9 minutes ago       Exited (0) 13 seconds ago                       docker-compose_web1_1[root@gbase8c_private docker-compose]# docker-compose up -dRecreating docker-compose_web1_1 ... done[root@gbase8c_private docker-compose]# docker ps -aCONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                    PORTS                                      NAMESf1033c073624        192.168.56.199/nginx/nginx:v1              "/docker-entrypoint.…"   2 seconds ago       Up 2 seconds              0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-web1[root@gbase8c_private docker-compose]# 

3 从docker compose启动多个容器

  • 3.1 编辑docker-compose文件
	cat docker-compose.yml
web1:image: 192.168.56.199/nginx/nginx:v1expose:- 80- 443container_name: nginx-web1 ports:- "80:80"- "443:443"
web2:  #每个容器一个IDimage: 192.168.56.199/nginx/nginx:v1expose:- 80- 443container_name: nginx-web2 ports:- "81:80"- "444:443"

日志:

	[root@gbase8c_private docker-compose]# docker-compose stopStopping nginx-web1 ... done[root@gbase8c_private docker-compose]# docker ps -aCONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                     PORTS               NAMESf1033c073624        192.168.56.199/nginx/nginx:v1              "/docker-entrypoint.…"   5 minutes ago       Exited (0) 6 seconds ago                       nginx-web1[root@gbase8c_private docker-compose]# docker-compose up -dStarting nginx-web1 ... doneCreating nginx-web2 ... done[root@gbase8c_private docker-compose]# docker psCONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                      NAMES341ed2cbd17d        192.168.56.199/nginx/nginx:v1   "/docker-entrypoint.…"   51 seconds ago      Up 50 seconds       0.0.0.0:81->80/tcp, 0.0.0.0:444->443/tcp   nginx-web2f1033c073624        192.168.56.199/nginx/nginx:v1   "/docker-entrypoint.…"   6 minutes ago       Up 50 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-web1
  • 3.2 web访问测试

4 定义数据卷挂载

  • 4.1 创建数据目录和文件
mkdir -p /data/nginx
echo "Test Nginx Volume" > /data/nginx/index.html
  • 4.2 编辑compose配置文件
cat docker-compose.yml
web1:image: jack/nginx-1.22.1:v1expose:- 80- 443container_name: nginx-web1 volumes:- /data/nginx:/usr/local/nginx/htmlports:- "80:80"- "443:443"
web2:  #每个容器一个IDimage: jack/nginx-1.22.1:v1expose:- 80- 443container_name: nginx-web2 ports:- "81:80"- "444:443"
  • 4.3 重启容器
docker-compose stop
docker-compose up -d
  • 4.4 登录验证Web访问

  • 4.5 其他常用命令

##重启单个指定容器
docker-compose restart web1
##重启所有容器
docker-compose restart
##停止和启动单个容器
docker-compose stop web1
docker-compose start web1
##停止和启动所有容器
docker-compose stop
docker-compose start

5 实现单机版的HA+NGINX+TOMCAT

5.1 制作haproxy镜像

  • 5.1.1 编辑Dockerfile文件
cd /opt/dockerfile/web/haproxy
cat Dockerfile
#My Dockerfile
From docker.io/centos:latest
MAINTAINER chengk "123@123.com"#Yum Setting
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
#以下为centos8需要
RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*RUN yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel make vim wget tree lrzsz  automake  zlib zlib-devel  iproute net-tools iotop -y
ADD haproxy-1.8.31.tar.gz /usr/local/src/
RUN cd /usr/local/src/haproxy-1.8.31 && make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
RUN cp /usr/local/src/haproxy-1.8.31/examples/haproxy.init  /etc/init.d/haproxy
RUN cp /usr/local/src/haproxy-1.8.31/haproxy /usr/sbin/haproxy
ADD haproxy.service /usr/lib/systemd/system/haproxy.service
ADD haproxy /etc/sysconfig/haproxy
ADD run_haproxy.sh /root/script/run_haproxy.sh
ADD haproxy.cfg /etc/haproxy/haproxy.cfg
RUN chmod a+x /root/script/run_haproxy.shCMD ["/root/script/run_haproxy.sh"]
EXPOSE 80 9999
  • 5.1.2 准备服务启动脚本
cat haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
SourcePath=/etc/init.d/haproxy
[Service]
EnvironmentFile=/etc/sysconfig/haproxy
ExecStart=/etc/init.d/haproxy start
ExecStop=/etc/init.d/haproxy stop
ExecReload=/etc/init.d/haproxy reload[Install]
WantedBy=multi-user.target
  • 5.1.3 前台启动脚本
cat run_haproxy.sh
#!/bin/bash
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
tail -f /etc/hosts
  • 5.1.4 haproxy参数文件
cat haproxy
OPTIONS=""
  • 5.1.5 准备压缩包及其他文件
-rw-r--r-- 1 root root     858 1月  19 20:04 Dockerfile
-rw-r--r-- 1 root root     301 1月  19 20:05 haproxy.service
-rw-r--r-- 1 root root      94 1月  19 20:05 run_haproxy.sh
-rw-r--r-- 1 root root      11 1月  19 20:05 haproxy
-rw-r--r-- 1 root root    2523 1月  19 20:06 CentOS-Base.repo
-rw-r--r-- 1 root root     951 1月  19 20:06 epel.repo
-rw-r--r-- 1 root root 2219503 1月  19 20:07 haproxy-1.8.31.tar.gz
  • 5.1.6 执行构建镜像
docker build -t 192.168.56.199/centos/centos_haproxy_1.8.31 /opt/dockerfile/web/haproxy/
docker rm -f `docker ps -a -q`
docker rmi 192.168.56.199/centos/centos_haproxy_1.8.31:v1
docker tag 192.168.56.199/centos/centos_haproxy_1.8.31:latest 192.168.56.199/centos/centos_haproxy_1.8.31:v1

5.2 准备nginx镜像

5.3 准备tomcat镜像

5.4 编辑docker compose 文件及环境准备

  • 5.4.1 编辑docker compose文件
cat docker-compose.yml
nginx-web1:image: jack/nginx-1.22.1:v1expose:- 80- 443container_name: nginx-web1 volumes:- /data/nginx:/usr/local/nginx/html- /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conflinks:- tomcat-web1- tomcat-web2
nginx-web2:  image: jack/nginx-1.22.1:v1expose:- 80- 443container_name: nginx-web2 volumes:- /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conflinks:- tomcat-web1- tomcat-web2
tomcat-web1:container_name: tomcat-web1image: tomcat-web:app1user: rootcommand: /apps/tomcat/bin/run_tomcat.shvolumes: - /apps/tomcat/webapps/SalesManager:/apps/tomcat/webapps/SalesManagerexpose:- 8080- 8443
tomcat-web2:container_name: tomcat-web2image: tomcat-web:app1user: rootcommand: /apps/tomcat/bin/run_tomcat.shvolumes: - /apps/tomcat/webapps/SalesManager:/apps/tomcat/webapps/SalesManagerexpose:- 8080- 8443
haproxy-web1:container_name: haproxy-web1image: 192.168.56.199/centos/centos_haproxy_1.8.31:v1command: /root/script/run_haproxy.shvolumes:- /etc/haproxy/haproxy.cfg:/etc/haproxy/haproxy.cfgports:- "9999:9999"- "80:80"links:- nginx-web1- nginx-web2
  • 5.4.2 准备nginx静态页面
cat /data/nginx/index.html
Test Nginx Volme
  • 5.4.3 准备nginx 配置文件
#本地路径和nginx路径都是/usr/local/nginx/conf/nginx.conf
grep -v "#" /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes auto;
daemon off;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream tomcat_webserver{server tomcat-web1:8080;server tomcat-web2:8080;}server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}location /SalesManager {proxy_pass http://tomcat_webserver;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;	}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}
  • 5.4.4 准备tomcat页面文件
ll /apps/tomcat/webapps/SalesManager
cat /apps/tomcat/webapps/SalesManager/showhost.jsp
<%@page import="java.util.Enumeration"%>
<br />
host:<%try{out.println(""+java.net.InetAddress.getLocalHost().getHostName());}catch(Exception e){}%>
<br />
<%request.getSession().setAttribute("t1","t2");%>
<%Enumeration en = request.getHeaderNames();while(en.hasMoreElements()){String hd = en.nextElement().toString();out.println(hd+":"+request.getHeader(hd));out.println("<br />");}%>

5.5 启动容器

日志:

	[root@gbase8c_private docker-compose]# docker-compose up -d/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_backendCreating tomcat-web1 ... doneCreating tomcat-web2 ... doneCreating nginx-web2  ... doneCreating nginx-web1  ... doneCreating haproxy-web1 ... done[root@gbase8c_private docker-compose]# docker ps -aCONTAINER ID        IMAGE                                            COMMAND                  CREATED             STATUS              PORTS                                        NAMES679cadcf5244        192.168.56.199/centos/centos_haproxy_1.8.31:v1   "/root/script/run_ha…"   5 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:9999->9999/tcp   haproxy-web1d7bd6746c7ee        jack/nginx-1.22.1:v1                             "nginx"                  6 seconds ago       Up 4 seconds        80/tcp, 443/tcp                              nginx-web1fb3df1f58075        jack/nginx-1.22.1:v1                             "nginx"                  6 seconds ago       Up 4 seconds        80/tcp, 443/tcp                              nginx-web2f0d87107431b        tomcat-web:app1                                  "/apps/tomcat/bin/ru…"   7 seconds ago       Up 5 seconds        8009/tcp, 8080/tcp, 8443/tcp                 tomcat-web26424d08ff212        tomcat-web:app1                                  "/apps/tomcat/bin/ru…"   7 seconds ago       Up 5 seconds        8009/tcp, 8080/tcp, 8443/tcp                 tomcat-web1[root@gbase8c_private docker-compose]# docker-compose logs -f/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_backendAttaching to haproxy-web1, nginx-web1, nginx-web2, tomcat-web2, tomcat-web1tomcat-web1     | Tomcat started.tomcat-web1     | 127.0.0.1	localhosttomcat-web1     | ::1	localhost ip6-localhost ip6-loopbacktomcat-web1     | fe00::0	ip6-localnettomcat-web1     | ff00::0	ip6-mcastprefixtomcat-web1     | ff02::1	ip6-allnodestomcat-web1     | ff02::2	ip6-allrouterstomcat-web1     | 10.10.0.2	6424d08ff212tomcat-web1     | 1.1.1.1 abc.test.comhaproxy-web1    | 127.0.0.1	localhosthaproxy-web1    | ::1	localhost ip6-localhost ip6-loopbackhaproxy-web1    | fe00::0	ip6-localnethaproxy-web1    | ff00::0	ip6-mcastprefixtomcat-web2     | Tomcat started.haproxy-web1    | ff02::1	ip6-allnodeshaproxy-web1    | ff02::2	ip6-allrouterstomcat-web2     | 127.0.0.1	localhosthaproxy-web1    | 10.10.0.5	nginx-web1 d7bd6746c7eehaproxy-web1    | 10.10.0.4	nginx-web2 fb3df1f58075haproxy-web1    | 10.10.0.6	679cadcf5244tomcat-web2     | ::1	localhost ip6-localhost ip6-loopbacktomcat-web2     | fe00::0	ip6-localnettomcat-web2     | ff00::0	ip6-mcastprefixtomcat-web2     | ff02::1	ip6-allnodestomcat-web2     | ff02::2	ip6-allrouterstomcat-web2     | 10.10.0.3	f0d87107431btomcat-web2     | 1.1.1.1 abc.test.com

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

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

相关文章

前端Vue select 下拉框详解以及监听事件

目录 简介 使用详解 演示示例 :key"option.value" :value"option.value" 区别 监听事件 简介 在 Vue 中&#xff0c;下拉框通常通过 <select> 元素与一系列的 <option> 元素来创建。Vue 的数据绑定和指令&#xff08;如 v-model 和 v-for…

ArcGIS雨涝风险模拟

所谓雨涝模拟分析&#xff0c; 就是模拟降雨量达到一定强度&#xff0c; 城市的哪些区域容易被淹没形成内涝。 雨涝模拟更重要的是提前预测&#xff0c; 可在预测结果的基础上进行实地勘察&#xff0c; 为项目规划、风险防控等工作提供指导作用。 雨涝模拟的原理和思想多种…

IT行业含金量较高的证书

在IT行业中&#xff0c;一些含金量较高的证书包括&#xff1a; 1. Cisco认证&#xff1a;如CCNA&#xff08;思科认证网络工程师&#xff09;、CCNP&#xff08;思科认证专业级网络工程师&#xff09;和CCIE&#xff08;思科认证专家级网络工程师&#xff09;等。这些认证证书…

基于springboot+vue的医院管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

Vue框架相对传统前端开发的核心改进(AI问答)

Vue框架相对传统前端开发的核心改进 Vue框架&#xff0c;相较于传统的前端开发&#xff0c;它实现了什么核心的改变&#xff0c;让开发人员都来选择它&#xff1f;&#xff08;AI问答&#xff09; Vue.js 框架相较于传统的前端开发&#xff08;如基于jQuery或原生JavaScript&am…

Nginx负载均衡下的webshell连接

一、上传AntSword-Labs-master搭建负载均衡实验环境 搭建好docker环境&#xff0c;并且配置好docker-compose 我的Redhat的docker版本&#xff1a; 查看当前环境下的文件是否正确&#xff1a; 接着执行docker compose up -d 拉取环境 访问成功页面&#xff1a; 进入docker容器…

【RT-DETR有效改进】反向残差块网络EMO | 一种轻量级的CNN架构(轻量化网络,参数量下降约700W)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是反向残差块网络EMO,其的构成块iRMB在之前我已经发过了,同时进行了二次创新,本文的网络就是由iRMB组成的网络EMO,所以我们二次创新之后的iEMA也可以用于这个网络中,再次形成二次…

【UEFI实战】Redfish的BIOS实现——生成EDK数据

生成Redfish文件 Redfish数据的表示形式&#xff0c;最常用的是JSON。将JSON表示的数据转换成C语言可以操作的结构体&#xff0c;是必不可少的步骤。当然如果手动转换的话&#xff0c;需要浪费大量的时间&#xff0c;因此DMTF组织开发了一个工具&#xff0c;用于将JSON数据快速…

MySQL的SQL MODE

目录 举例&#xff1a; --常见SQL mode --mysql8 sql_mode 官方文档 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html --查看全局的SQL MODE select global.sql_mode; --查看当前会话的SQL MODE select session.sql_mode; --运行时修改全局的SQL mode set gl…

python提取word文档内容的示例

一、微软Word历史、背景&#xff1a; Word 的特异功能就是把那些应该写成简单的 TXT 或 PDF 格式的文件&#xff0c;变成了既大又慢且难以打开的怪兽&#xff0c;它们经常在系统切换和版本切换中出现格式不兼容&#xff0c;而且因为某些原因在文件内容已经定稿后仍处于可编辑的…

贪吃蛇游戏设计文档(基于C语言)

1. 引言 本设计文档旨在详细阐述一款2D贪吃蛇游戏的设计思路、功能模块划分以及具体实现要点。通过严谨的需求分析与清晰的架构设计&#xff0c;确保游戏开发过程有序进行&#xff0c;并最终打造出一款用户友好、稳定流畅的经典贪吃蛇游戏。 2. 需求分析 - 核心元素 - 蛇&am…

vue pc端网页实现自适应

一、基本原理 pc端做自适应可以用rem来实现&#xff0c;啥是rem&#xff0c;自己百度 二、新建rem.ts文件 // rem等比适配配置文件 // 基准大小 const baseSize 14 // 设置 rem 函数 function setRem () {// 当前页面宽度相对于 1920宽的缩放比例&#xff0c;可根据自己需要…

Python笔记14-实战小游戏飞机大战(上)

文章目录 功能规划安装pygame绘制游戏窗口添加玩家飞机图像屏幕上绘制飞船代码重构驾驶飞船全屏模式射击 本示例源码地址 点击下载 功能规划 玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船&#xff0c;还可使用空格键射击。游戏开始时&#xff…

敲黑板啦!CSGO游戏搬砖项目操作注意事项

CSGO游戏搬砖项目怎么赚钱的&#xff0c;利润在哪&#xff1f; 1.两个平台之间币种不一样&#xff0c;就存在一个汇率差&#xff0c;两平台装备价格也不一样&#xff0c;汇率差-价格差利润。 CSGO游戏搬砖项目具体有哪些操作步骤&#xff1f; 1、准备一台电脑&#xff0c;配置…

使用npm安装插件时报权限问题解决方法

使用npm安装插件时报权限问题解决方法 使用npm安装yarn时总报这个错误&#xff0c;显示权限问题&#xff0c;之前安装其它插件包的时候也有遇到过&#xff0c;总是潦草解决&#xff0c;今天仔细查了一下&#xff0c;是我没有管理端权限&#xff0c;应该是之前安装npm的时候没有…

IDEA 构建开发环境

本博客主要讲解了如何创建一个Maven构建Java项目。&#xff08;本文是创建一个用Maven构建项目的方式&#xff0c;所以需要对Maven有一定的了解&#xff09; IDEA 构建开发环境 一、创建一个空工程二、构建一个普通的Maven模块 一、创建一个空工程 创建一个空的工程 * 设置整…

VMware中CentOS 7解决网络问题

问题描述 在 VMware 中使用 CentOS 7 中使用 ping www.baidu.com 测试网络是否能正常连接。 出现了未知的名称和服务的问题&#xff1a; 解决方案一 在服务中检查 VMware NAT Service 是否开启 解决方案二 在控制面板中的网络适配器里检查 解决方案三 检查VMware中的网络适…

Python采集学习笔记-SQL Server不同表的数据转移

(同一数据库表数据转移)源码 import pyodbc# 连接数据库 server DESKTOP-HAI1BEH database T1 driver {ODBC Driver 17 for SQL Server} conn pyodbc.connect(fDRIVER{driver};SERVER{server};DATABASE{database};Trusted_Connectionyes;) # 查询数据 cursor conn.cursor…

周报(20240128)

日期&#xff1a;2024.1.22 - 2024.1.28 本周工作&#xff1a; 1. 阅读论文 本周阅读了以下论文&#xff1a; 《BRAU-Net&#xff1a;用于医学图像分割的U形混合CNN-Transformer网络》 背景 精确的医学图像分割对于临床量化、疾病诊断、治疗计划和许多其他应用至关重要。基…

【Linux】CentOS 7 安装配置Python

目录 一、简介 二、下载与安装 1、更新软件包 2、安装编译所依赖的环境 3、下载压缩包 4、解压 5、配置编译参数 6、编译和安装 7、查看python版本 8、创建软连接 9、pip换源&#xff08;清华源为例&#xff09;、更新 一、简介 Linux系统一般都自带python&#xff…