Docker-Compose构建lnmp

目录

    • 实验前准备
    • 安装compose
    • Nginx
      • 准备工作目录
      • 准备Dockerfile脚本
      • 准备nginx.conf
    • Mysql
      • 准备工作目录
      • 编写Dockerfile脚本
      • 准备my.cnf
    • PHP
      • 准备工作目录
      • 准备相关文件
    • 编写docker-compose.yml配置文件
    • 目录结构
    • 启动
    • 测试
      • Mysql授权
      • 测试
    • 问题
      • Mysql容器无权访问问题
      • 浏览器访问file not found问题

实验前准备

宿主机:192.168.188.17,安装docker、docker-compose
准备以下压缩包和配置文件nginx-1.12.0.tar.gz、wordpress-4.9.4-zh_CN.tar.gz、nginx.conf、mysql-boost-5.7.20.tar.gz、my.cnf、php-7.1.10.tar.bz2、php-fpm.conf、php.ini、www.conf

安装compose

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
这个下得很慢,自己想办法搞一份也行,把它放到/usr/local/bin/目录下
cp /opt/docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
可以看一下版本检查能不能用
docker-compose --version
在这里插入图片描述

Nginx

准备工作目录

mkdir -p /opt/compose_lnmp/compose_nginx/nginx
cp /opt/nginx-1.12.0.tar.gz /opt/compose_lnmp/compose_nginx/nginx/
cp /opt/wordpress-4.9.4-zh_CN.tar.gz /opt/compose_lnmp/compose_nginx/nginx/

准备Dockerfile脚本

vim /opt/compose_lnmp/compose_nginx/nginx/Dockerfile

FROM centos:7
MAINTAINER this is nginx image <lnmp>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;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
VOLUME [ "/usr/local/nginx/html/" ]
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]

Dockerfile的解释如下

#基础镜像
FROM centos:7
#维护者信息
MAINTAINER this is nginx image <lnmp>
#安装依赖包,并且添加nginx用户
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx
#将Dockerfile所在目录下的nginx-1.12.0.tar.gz压缩包添加到容器中/usr/local/src/的目录下(会自动解压)
ADD nginx-1.12.0.tar.gz /usr/local/src/
#进入容器的/usr/local/src/nginx-1.12.0目录
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
#将Dockerfile所在目录下的nginx.conf配置文件添加到容器中/usr/local/nginx/conf/的目录下
ADD nginx.conf /usr/local/nginx/conf/
#将Dockerfile所在目录下的wordpress-4.9.4-zh_CN.tar.gz添加到容器中/usr/local/nginx/html/的目录下(自动解压)
ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html
#为/usr/local/nginx/html/赋权
RUN chmod 777 -R /usr/local/nginx/html/
#映射的容器端口
EXPOSE 80
#允许被挂载的目录
VOLUME [ "/usr/local/nginx/html/" ]
#开启容器后执行的命令
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]

准备nginx.conf

搞一份nginx.conf配置文件
cp /opt/nginx.conf /opt/compose_lnmp/compose_nginx/nginx/
主要是增加一个动态页面的location块,这里的IP要写PHP服务的容器ip
在这里插入图片描述
主要配置代码以及少量解释

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.php
            index  index.html index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           html;
	    #这个ip和端口就是php容器的ip和服务端口
            fastcgi_pass   172.20.0.30:9000;
            fastcgi_index  index.php;
	    #$fastcgi_script_name类似于外部变量,你在浏览器访问时输的uri是什么这里就是什么
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

Mysql

准备工作目录

mkdir -p /opt/compose_lnmp/compose_mysql/mysql
cp mysql-boost-5.7.20.tar.gz /opt/compose_lnmp/compose_mysql/mysql/

编写Dockerfile脚本

vim /opt/compose_lnmp/compose_mysql/mysql/Dockerfile

FROM centos:7
MAINTAINER this is mysql images <lnmp>
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin mysql
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_EXTRA_CHARSETS=all \
-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 -j4;make install
ADD my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
CMD [ "/usr/sbin/init" ]

Dockerfile解释

#基础镜像
FROM centos:7
#维护者信息
MAINTAINER this is mysql images <lnmp>
#安装依赖包,添加mysql用户
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin mysql
#向容器的/usr/local/src/目录添加mysql-boost-5.7.20.tar.gz压缩包(自动解压)
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_EXTRA_CHARSETS=all \
-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 -j4;make install
#向容器的/etc/my.cnf目录添加my.cnf
ADD my.cnf /etc/my.cnf
#映射端口
EXPOSE 3306
#改变所属用户
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
#进入这个目录
WORKDIR /usr/local/mysql/bin/
#初始化mysql数据库
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqld
#添加环境变量
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#允许挂载的目录
VOLUME [ "/usr/local/mysql" ]
#容器启动后执行
CMD [ "/usr/sbin/init" ]

准备my.cnf

搞一份my.cnf配置文件
cp /opt/my.cnf /opt/compose_lnmp/compose_mysql/mysql/
my.cnf里设置大概如下

[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash

[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
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1

sql_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

PHP

准备工作目录

mkdir -p /opt/compose_lnmp/compose_php/php
cp /opt/php-7.1.10.tar.bz2 /opt/compose_lnmp/compose_php/php/
编写Dockerfile脚本
vim /opt/compose_lnmp/compose_php/php/Dockerfile

FROM centos:7
MAINTAINER this is php image <lnmp>
RUN yum install -y 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;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
CMD /usr/local/php/sbin/php-fpm -F

Dockerfile解释

#基础镜像
FROM centos:7
#维护者信息
MAINTAINER this is php image <lnmp>
#安装依赖包
RUN yum install -y 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;useradd -M -s /sbin/nologin nginx
#向容器的/usr/local/src/目录添加php-7.1.10.tar.bz2 压缩包(自动解压)
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
#向容器的/usr/local/php/lib/目录添加php.ini
ADD php.ini /usr/local/php/lib/
#向容器的/usr/local/php/etc/目录添加php-fpm.conf
ADD php-fpm.conf /usr/local/php/etc/
##向容器的/usr/local/php/etc/php-fpm.d/目录添加www.conf
ADD www.conf /usr/local/php/etc/php-fpm.d/
#映射端口
EXPOSE 9000
#容器启动后执行的命令
CMD /usr/local/php/sbin/php-fpm -F

准备相关文件

cp /opt/php.ini /opt/compose_lnmp/compose_php/php/
vim /opt/compose_lnmp/compose_php/php/php.ini
进行如下修改
取消注释,修改时区
在这里插入图片描述
修改套接字路径
在这里插入图片描述
cp /opt/php-fpm.conf /opt/compose_lnmp/compose_php/php/
vim /opt/compose_lnmp/compose_php/php/php-fpm.conf
php-fpm.conf需要进行如下修改
取消注释
在这里插入图片描述
cp /opt/www.conf /opt/compose_lnmp/compose_php/php/
vim /opt/compose_lnmp/compose_php/php/www.conf
www.conf需要进行如下修改
修改用户和组
在这里插入图片描述
修改监听ip和端口
在这里插入图片描述

编写docker-compose.yml配置文件

这里坑很多,如果要自己修改,建议看懂了再改

version: '3'
services:
 nginx:
  container_name: nginx
  hostname: nginx
  build:
   context: /opt/compose_lnmp/compose_nginx/nginx
   dockerfile: Dockerfile
  ports:
   - 1216:80
   - 1217:443
  privileged: true
  networks:
   lnmp:
    ipv4_address: 172.20.0.10
  volumes:
   - nginx-data:/usr/local/nginx/html/wordpress
 mysql:
  container_name: mysql
  hostname: mysql
  build:
   context: /opt/compose_lnmp/compose_mysql/mysql
   dockerfile: Dockerfile
  ports:
   - 1226:3306
  privileged: true
  networks:
   lnmp:
    ipv4_address: 172.20.0.20
 php:
  container_name: php
  hostname: php
  build:
   context: /opt/compose_lnmp/compose_php/php
   dockerfile: Dockerfile
  ports:
   - 1236:9000
  privileged: true
  networks:
   lnmp:
    ipv4_address: 172.20.0.30
  volumes:
   - nginx-data:/usr/local/nginx/html/wordpress
   - mysql-data:/usr/local/mysql/
volumes:
 nginx-data:
 mysql-data:
networks:
 lnmp:
  driver: bridge
  ipam:
   config:
    - subnet: 172.20.0.0/16

解释如下

#语法版本,这个版本不一样可能会有一定影响
version: '3'
services:
#nginx的配置
 nginx:
#容器名
  container_name: nginx
#主机名
  hostname: nginx
#用来指定dockerfile的模块
  build:
#dockerfile的路径
   context: /opt/compose_lnmp/compose_nginx/nginx
#dockerfile的名字
   dockerfile: Dockerfile
#端口映射,前面是宿主机的端口,后面是容器端口
  ports:
   - 1216:80
   - 1217:443
#给容器root权限
  privileged: true
#网络相关
  networks:
   lnmp:
    ipv4_address: 172.20.0.10
#将nginx-data挂载到nginx容器的/usr/local/nginx/html/wordpress
  volumes:
   - nginx-data:/usr/local/nginx/html/wordpress
#mysql配置
 mysql:
  container_name: mysql
  hostname: mysql
  build:
   context: /opt/compose_lnmp/compose_mysql/mysql
   dockerfile: Dockerfile
  ports:
   - 1226:3306
  privileged: true
  networks:
   lnmp:
    ipv4_address: 172.20.0.20
#php的配置
 php:
  container_name: php
  hostname: php
  build:
   context: /opt/compose_lnmp/compose_php/php
   dockerfile: Dockerfile
  ports:
   - 1236:9000
  privileged: true
  networks:
   lnmp:
    ipv4_address: 172.20.0.30
#将nginx-data挂载到/usr/local/nginx/html/wordpress,将mysql-data挂载到/usr/local/mysql/
  volumes:
   - nginx-data:/usr/local/nginx/html/wordpress
   - mysql-data:/usr/local/mysql/
#创建两个卷用于挂载
volumes:
 nginx-data:
 mysql-data:
#自定义网络
networks:
 lnmp:
  driver: bridge
  ipam:
   config:
- subnet: 172.20.0.0/16

目录结构

在这里插入图片描述

启动

cd /opt/compose_lnmp/
docker-compose -f docker-compose.yml up -d
选项解释
-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行
在一段漫长的等待之后
在这里插入图片描述
看一下容器有没有都启动
在这里插入图片描述

测试

Mysql授权

进入mysql容器
docker exec -it web02 bash
mysql -u root -p

create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;

测试

浏览器访问http://192.168.188.17:1216/wordpress/index.php
在这里插入图片描述

问题

在实验过程中有两个问题纠缠了我很久

Mysql容器无权访问问题

具体报错:Can t connect to local MySQL server through socket ‘/usr/local/mysql/mysql.soc’
报错分析:字面上看就是单纯的没找到.sock文件,根据网上的方法进行排查,发现/etc/my.cnf中写的是对的,但是.sock文件就是没生成,当我重启mysqld服务时发现居然没有权限,我才意识到可能是容器没有root权限
解决方法:在vim docker-compose.yml中为mysql容器添加了权限,具体如下:
在这里插入图片描述
重新生成并测试,解决问题

浏览器访问file not found问题

具体问题:当浏览器输入http://192.168.188.17:1216/wordpress/index.php时出现File not found报错,nginx容器中的nginx/logs/error.log日志报错为:FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream, client: 192.168.188.1, server: localhost, request: “GET /wordpress/index.php HTTP/1.1”, upstream: “fastcgi://172.20.0.30:9000”, host: “192.168.188.17:1216”
报错分析:浏览器访问静态页面时正常访问,所以排除nginx服务状态问题,nginx.conf的location规则也多次检查没有问题,那么问题大概率就是出在php容器里,经过排查我发现问题可能是因为php容器没有共享到nginx容器中的nginx/html/目录导致的
解决方法:最简单的方法当然是直接在vim docker-compose.yml中用volumes_from挂载到nginx容器,但是这个方法好像只支持版本2,那么其他版本该怎么解决。其实只要将宿主机、nginx、php三者相互挂载就能用volumes实现volumes_from的功能,具体实现如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重新生成并测试,解决问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 网络安全

网络安全 网络安全问题概述 计算机网络面临的女全性威胁 计算机网络的通信而临两大类威胁&#xff0c;即被动攻击和主动攻击 被动攻击是指攻击者从网络上窃听他人的通信内容。通常把这类攻击称为截获。在被动攻击中&#xff0c;攻击者只是观察和分析某一个协议数据单元 PDU…

R语言【paleobioDB】——pbdb_orig_ext():绘制随着时间变化而出现的新类群

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新&#xff0c;该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后&#xff0c;执行本地安装。 Usage pbdb_orig_ext (data, rank, temporal_extent…

各种版本对应关系:SpringCloudAlibaba——SpringCloud——SpringBoot——SpringFramework——JDK

SpringCloudAlibaba——SpringCloud——SpringBoot——SpringFramework——JDK 一般情况&#xff0c;在https://github.com/项目/wiki目录下有发布信息及对应的要求其他依赖的版本信息SpringCloudAlibaba——SpringCloud——SpringBootSpringBoot和SpringFramework的版本对应关…

基于MATLAB计算无线通信覆盖(一)环境准备

一、环境 MATLAB 2022b 注&#xff1a;开始仿真前需部署地理坐标区和地理图&#xff0c;最好采用第三种&#xff0c;直接把底图数据下载到本地&#xff0c;防止连接不上网络时只能显示darkwater的底图。 可用于地理坐标区和地理图的底图如下表所示 二、下载底图并安装 工具&…

如何用GPT进行论文润色与改写?

详情点击链接&#xff1a;如何用GPT/GPT4进行论文润色与改写&#xff1f;一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二…

最新可用GPT-3.5、GPT-4、Midjourney绘画、DALL-E3文生图模型教程【宝藏级收藏】

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

极狐GitLab 线下『 DevOps专家训练营』成都站开班在即

成都机器人创新中心联合极狐(GitLab)隆重推出极狐GitLab DevOps系列认证培训课程。该课程主要面向使用极狐GitLab的DevOps工程师、安全审计人员、系统运维工程师、系统管理员、项目经理或项目管理人员&#xff0c;完成该课程后&#xff0c;学员将达到DevOps的专家级水平&#x…

CentOs7.8安装原生Jenkins2.38教程

CentOs7.8安装Jenkins教程 前提&#xff1a;1、下载安装包2、安装&#xff1a;3、检验是否安装成功&#xff1a;4、查询java路径5、修改配置文件6、创建jenkins用户7、给jenkins用户授权8、开放防火墙端口9、运行和其他jenkins相关命令10、异常情况10.1 提示超时&#xff0c;查…

DAG最小路径点覆盖,最小路径可重复覆盖,详解

文章目录 前言有向无环图的最小路径点覆盖概念拆点二分图定理**证明** 最小路径可重复覆盖解决策略代码实现 OJ练习 前言 关于二分图&#xff1a;二分图及染色法判定 关于二分图最大匹配&#xff1a;二分图最大匹配——匈牙利算法详解 关于二分图带权最大完备匹配&#xff1…

NFS网络共享服务存储

目录 一、NFS简介 1、NFS定义&#xff1a; 2、NFS的特点 3、NFS的优缺点 4、NFS的原理图示 二、服务端NFS配置文件&#xff1a;/etc/exports 三、实验&#xff1a;NFS共享存储服务配置 1、服务端安装nfs-utils与rpcbind软件包 2、服务端新建共享文件夹目录并赋予权限 …

前端(html+css+javascript)作业--展现家乡的网页

期末期间&#xff0c;老师布置了前端作业&#xff0c;现在放到这里&#xff0c;给各位同志参考。 桂平市是广西壮族自治区的一个美丽的城市&#xff0c;拥有丰富的历史文化和自然景观&#xff0c;属于贵港市管辖&#xff0c;那为什么是看起来是市级而不是县级&#xff0c;其实他…

HAL库配置RS485通信

在配置好串口的基础上完成RS485的配置 一、使能RS485的发送和接收模式引脚 __HAL_RCC_GPIOG_CLK_ENABLE();//高电平是发送模式&#xff0c;低电平是接收模式&#xff0c;默认是接收模式HAL_GPIO_WritePin(PG4_RS485_DIR1_Port, PG4_RS485_DIR1_Pin, GPIO_PIN_RESET);GPIO_Init…

Java基础面试题(三)

Java基础面试题&#xff08;三&#xff09; 文章目录 Java基础面试题&#xff08;三&#xff09;什么是字节码?采用字节码的好处是什么?为什么说 Java 语言“编译与解释并存”&#xff1f; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 什么是字节码?采用字节码…

Qt命令行安装:linux(ubuntu)

起因是我上一篇文章说的&#xff0c;官网下的安装包卡死在第一步安装界面了。 于是我就问GPT有没有纯命令行的安装方式&#xff0c;果然是有的。 在Ubuntu上安装Qt可以使用以下命令&#xff1a; 1. 首先&#xff0c;添加Qt的官方存储库到系统中&#xff1a; sudo add-apt-rep…

在Ubuntu下载Python3.6 并建立软连接

打开终端&#xff0c;输入su root,进入root模式 su root为了避免权限问题 安装zlib1g-dev apt-get install zlib1g-dev1.然后创建目录 mkdir -p /usr/local/python32.进入python3目录 cd /usr/local/python33.从官网下载好python3.6.2 wget https://www.python.org/ftp/p…

Qt QRubberBand 如何实现鼠标框选控件

QRubberBand类提供了一个矩形或直线&#xff0c;可以指示选择或边界。常见的模式是结合鼠标事件来执行此操作。本文将使用框选QCheckBox控件&#xff0c;来演示QRubberBand是如何配合鼠标进行工作的。 一、RubberBand 框选效果图 二、RubberBand 代码 rubberband.h #ifndef …

【ug572】UltraScale体系结构时钟资源手册节选

概述 时钟架构概述 The UltraScale architecture clocking resources manage complex and simple clocking requirements with dedicated global clocks distributed on clock routing and clock distribution resources. The clock management tiles (CMTs) provide clock f…

经典目标检测YOLO系列(二)YOLOv2算法详解

经典目标检测YOLO系列(二)YOLOv2算法详解 YOLO-V1以完全端到端的模式实现达到实时水平的目标检测。但是&#xff0c;YOLO-V1为追求速度而牺牲了部分检测精度&#xff0c;在检测速度广受赞誉的同时&#xff0c;其检测精度也饱受诟病。正是由于这个原因&#xff0c;YOLO团队在20…

【RT-DETR有效改进】移动设备网络ShuffleNetV1(超轻量化网络主干)

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…

5路开关量输入转继电器输出 Modbus TCP远程I/O模块 YL95 传感器信号的测量

特点&#xff1a; ● 五路开关量输入&#xff0c;五路继电器输出 ● 支持Modbus TCP 通讯协议 ● 内置网页功能&#xff0c;可以通过网页查询电平状态 ● 可以通过网页设定继电器输出状态 ● DI信号输入&#xff0c;DO输出及电源之间互相隔离 ● 宽电源供电范围&#x…