基于 Dockerfile 部署 LNMP 架构

目录

前言

1、任务要求

2、Nginx 镜像创建

2.1 建立工作目录并上传相关安装包

2.2 编写 Nginx Dockerfile 脚本

2.3 准备 nginx.conf 配置文件

2.4 生成镜像

2.5 创建 Nginx 镜像的容器

2.6 验证nginx

3、Mysql 镜像创建

3.1 建立工作目录并上传相关安装包

3.2 编写 Mysql Dockerfile 脚本

3.3 编写 my.cnf 配置文件

3.4 生成镜像

3.5 创建 Mysql 镜像的容器

4、PHP 镜像创建

4.1 建立工作目录并上传相关安装包

4.2 编写 PHP Dockerfile 脚本

4.3 准备 php.ini、php-fpm.conf、www.conf 配置文件

4.3.1 修改 php.ini 配置文件

4.3.2 修改 php-fpm.conf 配置文件

4.3.3 修改 www.conf 配置文件

4.4 生成镜像

4.5 创建该镜像的容器

4.6 验证 PHP

5、启动 wordpress 服务

5.1 mysql 授权

5.2 浏览器访问安装 wordpress


前言

在 Docker 上搭建 LNMP 架构(Linux + Nginx + MySQL + PHP)是一种常见的做法,可以通过容器化技术轻松地部署和管理整个 Web 应用程序的运行环境

  • Linux:作为操作系统,提供了稳定的运行环境
  • Nginx:作为Web服务器,具有高性能和高并发处理能力,可以作为反向代理服务器,负责接收用户的请求并将请求转发给后端的应用服务器
  • MySQL:作为关系型数据库,提供了数据存储和管理的功能
  • PHP(或Python、Perl):作为服务器端脚本语言,用于处理用户的请求,生成动态的网页内容

1、任务要求

需要使用 Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台,然后对此服务进行相关的性能调优和管理工作

宿主机操作系统IP地址主要软件配置要求
DockerCentOS 7172.16.12.15

Docker 19.03

4核8G以上
容器 操作系统IP地址主要软件
nginxCentOS 7172.20.0.10Docker-Nginx
mysqlCentOS 7172.20.0.20Docker-Mysql
phpCentOS 7172.20.0.30Docker-php
  • 使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台
  • 限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap
  • 限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s
  • 将所有容器进行快照,然后将 Docker 镜像打包成 tar 包备份到本地

(1)关闭防火墙和核心防护

systemctl disable --now  firewalld
setenforce 0

 (2)自定义网络docker1

docker network create --subnet=172.20.0.0/16 --opt "com.docker.network.bridge.name"="docker1"  mynetwork

(3)所有安装包下载

wget https://cdn.mysql.com//archives/mysql-5.7/mysql-boost-5.7.20.tar.gz
wget http://nginx.org/download/nginx-1.12.0.tar.gz
wget https://www.php.net/distributions/php-7.1.10.tar.bz2
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

2、Nginx 镜像创建

2.1 建立工作目录并上传相关安装包

mkdir -p /opt/lnmp/nginx/html
cd /opt/lnmp/nginx     
#需在此路径上传 nginx 安装包 nginx-1.12.0.tar.gz
cd /opt/lnmp/nginx/html
#需在此路径上传 wordpress 服务包 wordpress-4.9.4-zh_CN.tar.gz

cd /opt/lnmp/nginx/html/    #切换目录
tar xf wordpress-4.9.4-zh_CN.tar.gz   #解压安装包

2.2 编写 Nginx Dockerfile 脚本

cd /opt/lnmp/nginx
vim DockerfileFROM centos:7
MAINTAINER this is nginx image <lnmp>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module;make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
#ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
EXPOSE 443
VOLUME [ "/usr/local/nginx/html/" ]
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]

2.3 准备 nginx.conf 配置文件

#需上传nginx的主配置文件到/opt/lnmp/nginx目录下,再过滤查看其生效的配置
egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$"worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;charset utf-8;location / {root   html;index  index.html index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ \.php$ {root           html;fastcgi_pass   172.20.0.30:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;include        fastcgi_params;}}
}

2.4 生成镜像

docker build -t nginx:lnmp .
# -t 参数用于指定构建镜像的名称及标签
# . 就是指示Docker在当前目录中查找名为Dockerfile的文件,并以此文件作为构建镜像的基础docker images  #查看所有镜像

2.5 创建 Nginx 镜像的容器

docker run -d --name nginx -p 80:80 -v /opt/lnmp/nginx/html:/usr/local/nginx/html -m 500m --memory-swap 1g --net mynetwork --ip 172.20.0.10 nginx:lnmp#docker run: 运行一个新的容器
#-d: 在后台运行容器
#--name nginx: 为容器指定一个名称为 nginx
#-p 80:80: 将容器的 80 端口映射到主机的 80 端口,允许通过主机的 80 端口访问容器内的服务
#-v /opt/lnmp/nginx/html:/usr/local/nginx/html: 将主机的 /opt/lnmp/nginx/html 目录挂载到容器内的 /usr/local/nginx/html 目录,实现主机和容器之间的文件共享
#-m 500m: 限制容器的内存使用为 500MB
#--memory-swap 1g: 设置容器的内存加交换空间的上限为 1GB
#--net mynetwork: 连接容器到名为 mynetwork 的网络
#--ip 172.20.0.10: 为容器分配 IP 地址为 172.20.0.10
#nginx:lnmp: 使用 nginx:lnmp 镜像来创建容器docker ps -a   #查看所有的容器

docker inspect nginx    #查看nginx容器的ip地址等信息

########如果有网络报错提示########
[Warning] IPv4 forwarding is disabled. Networking will not work.

解决方法:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker

2.6 验证nginx

cd /opt/lnmp/nginx/html/
echo "welcome to my world" > index.html
#编写测试网页文件

curl http://172.16.12.15:80   #浏览器访问宿主机的80端口

3、Mysql 镜像创建

3.1 建立工作目录并上传相关安装包

mkdir -p /opt/lnmp/mysql
cd /opt/lnmp/mysql     
#需在此路径上传 mysql 安装包mysql-boost-5.7.20.tar.gz

3.2 编写 Mysql Dockerfile 脚本

vim Dockerfile FROM centos:7
MAINTAINER this is mysql image <lnmp>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j 4 && make install
ADD my.cnf /etc/
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN useradd -M -s /sbin/nologin  mysql
RUN chown mysql:mysql /etc/my.cnf
RUN chown -R mysql:mysql /usr/local/mysql/
RUN /usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
EXPOSE 3306
CMD ["/usr/local/mysql/bin/mysqld"]

3.3 编写 my.cnf 配置文件

vim my.cnf[client]
port = 3306
socket = /usr/local/mysql/mysql.sock[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

3.4 生成镜像

docker build -t mysql:lnmp .
# -t 参数用于指定构建镜像的名称及标签
# . 就是指示Docker在当前目录中查找名为Dockerfile的文件,并以此文件作为构建镜像的基础docker images  #查看所有镜像

3.5 创建 Mysql 镜像的容器

docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp#docker run: 运行一个新的容器
#--name=mysql: 为容器指定一个名称为 mysql
#-d: 在后台运行容器
#--privileged: 给容器赋予特权,即容器内的进程可以获得访问主机的权限
#--device-write-bps /dev/sda:10M: 限制容器对指定设备 /dev/sda 的写入速率为 10MB/s
#-v /usr/local/mysql: 挂载主机的 /usr/local/mysql 目录到容器内的相同路径,实现主机和容器之间的文件共享
#--net mynetwork: 连接容器到名为 mynetwork 的网络
#--ip 172.20.0.20: 为容器分配 IP 地址为 172.20.0.20
#mysql:lnmp: 使用 mysql:lnmp 镜像来创建容器docker ps -a   #查看所有的容器

docker inspect mysql    #查看mysql容器的ip地址等信息

4、PHP 镜像创建

4.1 建立工作目录并上传相关安装包

mkdir -p /opt/lnmp/php
cd /opt/lnmp/php     
#需在此路径上传 php 安装包php-7.1.10.tar.bz2

4.2 编写 PHP Dockerfile 脚本

vim DockerfileFROM centos:7
MAINTAINER this is php image <lnmp>
RUN yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c++ make pcre-devel 
RUN useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src/
WORKDIR /usr/local/src/php-7.1.10
RUN ./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make -j 4 && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
ADD php.ini	/usr/local/php/lib/
ADD php-fpm.conf /usr/local/php/etc/
ADD www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]

4.3 准备 php.ini、php-fpm.conf、www.conf 配置文件

4.3.1 修改 php.ini 配置文件

该配置文件模板位于安装目录的 php-7.1.10/php.ini-development 位置

vim php.ini#第939行,取消注释,修改
date.timezone = Asia/Shanghai
#第1170行,修改
mysqli.default_socket = /usr/local/mysql/mysql.sock

[root@localhost php]#egrep -v "^;" php.ini | egrep -v "^$"    #过滤php.ini文件里生效的配置
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket = /usr/local/mysql/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = 1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]

4.3.2 修改 php-fpm.conf 配置文件

该配置文件位于 /usr/local/php/etc/php-fpm.conf.default

vim php-fpm.conf#第17行,删除注释符号“;”
pid = run/php-fpm.pid

[root@localhost php]# egrep -v "^;" php-fpm.conf | egrep -v "^$"    
#过滤php-fpm.conf配置文件中生效的配置
[global]
pid = run/php-fpm.pid
include=/usr/local/php/etc/php-fpm.d/*.conf

4.3.3 修改 www.conf 配置文件

该配置文件位于 usr/local/php/etc/php-fpm.d/www.conf.default

vim www.conf #第23、24行,修改用户和组
user = nginx
group = nginx
#第36行,修改监听IP和端口为容器IP:9000端口
listen = 172.20.0.30:9000
#第62行,修改被允许监听的客户端容器地址为回环地址和nginx容器地址
listen.allowed_clients = 127.0.0.1,172.20.0.10

[root@docker php]# egrep -v "^;" www.conf | egrep -v "^$"
[www]
user = nginx
group = nginx
listen = 172.20.0.30:9000
listen.allowed_clients = 127.0.0.1,172.20.0.10
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

4.4 生成镜像

docker build -t php:lnmp .
# -t 参数用于指定构建镜像的名称及标签
# . 就是指示Docker在当前目录中查找名为Dockerfile的文件,并以此文件作为构建镜像的基础docker images  #查看所有镜像

4.5 创建该镜像的容器

docker run --name=php -d -p 9000:9000 --volumes-from mysql --volumes-from nginx --net mynetwork --ip 172.20.0.30 php:lnmp#docker run: 运行一个新的容器
#--name=php: 为容器指定一个名称为 php
#-d: 在后台运行容器
#-p 9000:9000: 将容器的 9000 端口映射到主机的 9000 端口,允许通过主机的 9000 端口访问容器内的服务
#--volumes-from mysql: 将容器 mysql 的数据卷挂载到当前容器中,实现数据共享
#--volumes-from nginx: 将容器 nginx 的数据卷挂载到当前容器中,实现数据共享
#--net mynetwork: 连接容器到名为 mynetwork 的网络
#--ip 172.20.0.30: 为容器分配 IP 地址为 172.20.0.30
#php:lnmp: 使用 php:lnmp 镜像来创建容器docker ps -a   #查看所有的容器

docker inspect php    #查看php容器的ip地址等信息

4.6 验证 PHP

#进入到 php 容器中
docker exec -it php bashps -aux

5、启动 wordpress 服务

5.1 mysql 授权

[root@localhost mysql]#docker exec -it mysql /bin/bash   #进入到 mysql 容器内
[root@8ef6f9c3b89d mysql-5.7.20]#mysql -u root -p
Enter password: 
#初始密码为空,回车即可
mysql> create database wordpress;
#创建wordpress数据库mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
#授予一个名为 wordpress 的数据库中的用户 wordpress 在任何主机上('%')的所有权限,并使用密码 123456 进行身份验证
#将所有权限授予用户 wordpress,允许其从任何主机连接到 wordpress 数据库,并使用密码 123456 进行身份验证mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
#授予用户名为 root,从任何主机连接到 MySQL 数据库服务器的用户,对所有数据库中的所有表具有全部权限,并设置密码为 abc123
#这样的设置允许用户 root 从任何地方以密码 abc123 连接到 MySQL 数据库,并具有对所有数据库的全部权限mysql> flush privileges;
#刷新权限mysql> exit   #退出 mysql 数据库[root@8ef6f9c3b89d mysql-5.7.20]# exit  #退出 mysql 容器

5.2 浏览器访问安装 wordpress

浏览器访问 http://172.16.12.15/wordpress/index.php

 报错页面: 

解决方法:

cd /opt/lnmp/nginx/html/wordpress   #切换目录
cp wp-config-sample.php wp-config.php   #手动创建wp-config.php文件
vim wp-config.php
#第23行,将'database_name_here'改为'wordpress'
define('DB_NAME', 'wordpress');
#第26行,将'username_here'改为'wordpress'
define('DB_USER', 'wordpress');
#第29行,将'password_here'改为'123456'
define('DB_PASSWORD', '123456');systemctl restart docker   #重启docker服务
docker start nginx;docker start mysql;docker start php   #重启docker容器
docker ps   #查看当前正在运行中的容器,必须得有nginx、mysql、php

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

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

相关文章

计算机网络实验一:对等网络的构建

实验一:对等网络的构建 1、实验要求 (1)掌握TCP/IP协议的配置; (2)掌握常见网络命令的使用; (3)掌握组建windows对等网络并配置文件共享。 2、实验内容 (1)以Microsofe Winodws 系统为例,对TCP/IP协议进行安装和配置; (2)学习使用常见的网络命令,并了解…

linux内核源码分析--核心网络文件和目录

图3-2显示了在/proc/sys中由网络代码所使用的主要目录&#xff0c;就每个目录而言&#xff0c;都列出了在哪一章描述其文件。 proc/sys/net bridge ipv4 core route neigh conf 图3-2/proc/sys/net 中的核心目录 根据前借所述&#xff0c;我们来看net中的树根是如何定义的&…

【网络】tcp协议如何保证可靠性

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输层协议&#xff0c;为网络通信提供了可靠性和连接稳定性。本文将详细介绍 TCP 协议如何保证数据的可靠传输和连接的稳定性&#xff0c;并分析其优缺点。 可靠性保证 序号和确认机制&…

【YOLO】目标检测 YOLO框架之train.py参数含义及配置总结手册(全)

1.一直以来想写下基于YOLO开源框架的系列文章&#xff0c;该框架也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下YOLO目标检测相关知识体系&#xff0c;之前实战配置时总是临时性检索些注释含义&#xff0c;但…

java下乡扶贫志愿者招募管理系统springboot-vue

计算机技术在现代管理中的应用&#xff0c;使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题&#xff0c;提高效率。 技术栈 前端&#xff1a;vue.jsElementUI 开发工具&#xff1a;IDEA 或者eclipse都支持 编程语言: java 框架&#xff1…

[C++基础学习-04]----C++数组详解

前言 在C中&#xff0c;数组是一种用来存储相同类型元素的数据结构。一维数组是最简单的数组形式&#xff0c;它由一系列按顺序存储的元素组成。二维数组则是由一维数组构成的数组&#xff0c;可以看作是一堆一维数组堆叠在一起形成的矩阵。 正文 01-数组简介 一维数组和二维…

《QT实用小工具·五十六》自适应界面变化的控件

1、概述 源码放在文章末尾 该项目实现了网格显示多张带文字的图片在界面中自适应布局 特点 跟随窗口大小变换位置&#xff0c;并带移动动画 响应鼠标事件&#xff0c;图片缩放动画 点击水波纹动画 项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #i…

【华为】路由综合实验(OSPF+BGP基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

半监督节点分类:标签传播和消息传递

基础概念回顾 传统图机器学习的特征工程——节点层面&#xff0c;连接层面&#xff0c;全图层面 节点层面&#xff1a;信用卡欺诈 连接层面&#xff1a;推荐可能认识的人 全图层面&#xff1a;预测分子结构 半监督节点分类 半监督节点分类&#xff1a;用已知标签节点预测未…

2011NOIP普及组真题 1. 数字反转

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1953 核心思想&#xff1a; 本题可以直接对字符串处理&#xff0c;也可以 直接对 int 进行处理 int的范围是 -2,147,483,648 到 2,147,483,647&#xff0c;正好覆盖题中的 -1,000,000,0…

vue - 基本使用

转载改编自&#xff1a;https://www.bilibili.com/video/BV1Ap4y1W7MG/ 文章目录 二、Composition API&#xff08;组合式API&#xff09;1、setup2、API - ref3、API - reactive &#xff08;对象&#xff09;4、API - toRefs 三、Provide与Inject&#xff08;提供/注入&#…

秋招算法刷题8

20240422 2.两数相加 时间复杂度O&#xff08;max(m,n))&#xff0c;空间复杂度O&#xff08;1&#xff09; public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode headnull,tailnull;int carry0;while(l1!null||l2!null){int n1l1!null?l1.val:0;int n2l2!…

什么是责任链模式?有哪些应用?

一、定义、目的 责任链模式的目的是避免请求发送者与多个接收者之间的耦合关系&#xff0c;将这些接收者组成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有一个接收者处理它为止。 在责任链模式中&#xff0c;通常将处理请求的对象称为处理器或者链的节点&#…

OpenWRT部署Zerotier虚拟局域网实现内网穿透

前言 细心的小伙伴肯定已经发现了&#xff1a;电脑上部署了Zerotier&#xff0c;如果路由器也部署了OpenWRT&#xff0c;那是否能远程访问呢&#xff1f; 答案是肯定的。 OpenWRT部署Zerotier有啥好处&#xff1f; 那好处必须多&#xff0c;其中的一个便是在外远程控制家里…

pytorch 线性代数基本操作

pytorch是非常好的人工智能训练和推理框架&#xff0c;我们来通过李沐老师的《动手学深度学习》来简单学习一下。 首先&#xff0c;安装pytorch&#xff0c;请参考pytorch官网&#xff1a;PyTorch 也可以到kaggle、colab、启智社区等使用配置好的pytorch环境&#xff0c;更简单…

图像压缩问题

图像压缩问题的bilibil讲解 1.问题引入 首先&#xff0c;图像是由像素组合成的&#xff0c;每个像素都有灰度值&#xff0c;灰度值是体现像素的颜色的。灰度值从0~255&#xff0c;灰度值占用的位数就是像素占用的位数。我们要存储一个图像就要存储它的所有像素。现在的问题是我…

0502_C高级H1

练习题&#xff1a; 5月2日作业&#xff1a; 第一题&#xff1a; 段错误 str指向申请堆空间内存的首地址&#xff0c;直接拷贝hello world 会导致段错误 第二题&#xff1a; 段错误 临时变量返回地址属于典型的段错误 第三题&#xff1a; hello 第四题&#xff1a; 段错误 free…

ssm(教学评价系统)

开发语言&#xff1a;Java JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09;服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.6/5.7&#xff08;或8.0&#xff09;数据库工具&#xff1a;Navicat 开发软件&#xff1a;idea 依赖管理包&#xff1a;Maven 代码数据库…

车载电子电器架构 —— 关于bus off汇总

车载电子电器架构 —— 关于bus off汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

【uniapp】H5+、APP模拟浏览器环境内部打开网页

前言 今天将智能体嵌入到我的项目中&#xff0c;当作app应用时&#xff0c;发现我使用的webview组件&#xff0c;无论H5怎么登录都是未登录&#xff0c;而APP却可以&#xff0c;于是进行了测试&#xff0c;发现以下几种情况&#xff1a; 方法<a>标签webviewAPP✅✅网页…