使用 Docker-compose 搭建lnmp
服务编排:
应用编排:
- 单机环境下:shell/python脚本
- 多机/集群环境下:ansible、saltstack、pubbet
docker容器编排:
- 单机:docker-compose
- 多机/集群:docker swarm,mesos+ marathon,kubernetes
一、Docker-Compose简介
1.1 为什么使用 Docker-compose
我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍Docker 官方产品Docker Compose。
Dockerfile可以让用户管理一个单独的应用容器;而Compose则 允许用户在一个模板(YAML格式) 中定义一组相关联的应用容器( 被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等。
1.2 Docker-compose概述
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service) 以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务 发现及负载均衡,比如Consul。
Docker-Compose的工程配置文件默认为docker-compose. yml,可通过环境变量COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose允许用户通过一个单独的docker-compose. yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目 (project) 。
Docker-Compose项目由Python编写,调用Docker服 务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。
二、compose 部署
2.1 Docker Compose 环境安装
Docker Compose是 Docker 的独立产品,因此需要安装 Docker 之后再单独安装Docker 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#安装,给予执行权限chmod +x /usr/local/bin/docker-compose#查看版本docker-compose --version#方法二:也可以提前下载好安装包,之后上传到系统中。cd /opt/lschmod +x docker-composemv docker-compose /usr/local/bin/docker-compose --version
2.2 YAML文件格式及编写注意事项
2.2.1 YAML文件格式
YAML是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json简单的很多。
- YAML数据结构通过缩进来表示
- 连续的项目通过减号来表示
- 键值对用冒号分隔
- 数组用中括号 [ ] 括起来
- hash 用花括号 { } 括起来
#一个键如果有多个值。符号可以不缩进,但值要缩进。name:- zhangsan- lisi- wangwuname:- zhangsan- lisi- wangwuname: ["zhangsan", "lisi", "wangwu"]
2.2.2 使用YAML时需要注意下面事项
- 大小写敏感
- 通过缩进表示层级关系
- 不支持制表符tab键缩进T只能使用空格缩进
- 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
- 用 # 号注释
- 符号字符后缩进1个空格,如"冒号 : "、 "逗号 ,"、"横杠 - "
- 如果包含特殊字符用单引号(' ')引起来会作为普通字符串处理,双引号(" "):特殊字符作为本身想表示的意思
#双引号示例:name: "hello, \nworld"最后name值是两行内容name: hello,world#单引号示例:name: 'hello, \nworld',只会作为普通字符 name: hello,\nworld
2.2.3 数据结构
#对象: 键值对的字典animal: pets#数组: 一组按次序排列的列表- cat- dog- goldfish#布尔值debug: "true"debug: "false"#Yaml示例languages: #序列的映射- Java- Golang- Pythonwebsites: #映射的映射(键的值,仍然是键值对)Baidu: www.baidu.comWangyi: www.163.comSouhu: www.souhu.com#或者 languages: ["Java","Golong","Python"]websites: Baidu: www.baidu.comWangyi: www.163.comSouhu: www.souhu.com#Json格式{languages: ['Java','Golong','Python',],websites: [Baidu: 'www.baidu.com',Wangyi: 'www.163.com',Souhu: 'www.souhu.com',]}
2.3 Docker Compose 配置常用字段
字段 | 描述 |
---|---|
build | 使用Dockerfile构建镜像。指定Dockerfile 文件名,要指定Dockerfile文件需要在bui ld标签的子级标签中使用dockerfile标签指定 |
dockerfile | 构建镜像上下文路径(指定Dockerfile文件) |
context | 可以是dockerfile 的路径,或者是指向git 仓库的url地址 |
image | 指定镜像 |
command | 执行命令,覆盖容器启动后默认执行的命令(类似于 docker run) |
container_name | 指定容器名称,由于容器名称是唯一的, 如果指定自定义名称,则无法scale指定容器数量(同一个镜像指定多个容器数量) |
deploy | 指定部署和运行服务相关的配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络,引用顶级networks下条目 |
networks_mode | 设置容器的网络模式,如 host,bridge |
ports | 暴露容器端口,与-p相同,但端口不能低于60 |
volumes | 挂载一个宿主机目录或命令卷到容器中,命令卷要在顶级volumes定义卷名称 |
volumes_from | 从另一个服务或容器挂载卷,可选参数:ro 和:rw。仅版本'2' 支持 |
hostname | 容器主机名 |
sysctls | 在容器内设置内核参数 |
links | 连接到另外一个容器,- 服务名称[:服务别名] (类似于容器互联) |
privileged | 用来给容器root权限,注意是不安全的,只有两个值:true或false |
restart | 设置重启策略,never,always, no-failure, unless-stopped |
never,默认策略,在容器退出时不重启容器。 | |
on-failure,在容器非正常退出时(退出状态非0),才会重启容器。 | |
on-failure:3,在容器非正常退出时重启容器,最多重启3次。 | |
always,在容器退出时总是重启容器。 | |
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。 | |
depends_on | 在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。 |
(1)depends_on 指定依赖关系和启动顺序
php:depends_on:- apache- mysql
(2)使用镜像
- 如果想使用已存在的镜像,使用image。
- 如果想使用自己构建的镜像,使用build、dockerfile、context。
(3)引用网络
在顶级层设置两个网络模式,在服务中引用不同的网络,可以实现网络的隔离,和网络的兼容。(可以理解为vlan)
networks:lnmplampservice:nginx:networks:lnmpapache:networks:lampmysql:networks:lnmplampphp:networks:lnmplamp
(4)命令卷
在 version 3
,可以在顶级层中定义一个命令卷(例如:db-data),db-data 作为一个中间件,实际并不存在,只是为了做数据同步。(可以理解为vlan)
version: "3"services:nginx:volumes:- db_data:/var/lib/dbmysql:volumes:- db_data:/var/lib/backup/datavolumes: #在顶级层定义一个命令卷db_data:
2.4 Docker Compose 常用命令
命令 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
三、使用Docker-compose 搭建lnmp
3.1 Docker Compose 文件结构
[root@zy7 compose_lnmp]# yum -y install tree[root@zy7 compose_lnmp]# tree /opt/compose_lnmp/ -L 2/opt/compose_lnmp/├── docker-compose.yml├── mysql #创建模板脚本│ ├── Dockerfile #创建容器脚本│ ├── my.cnf #复制配置文件│ └── mysql-boost-5.7.20.tar.gz #复制源码包├── nginx│ ├── Dockerfile│ └── nginx-1.12.0.tar.gz├── php│ ├── Dockerfile│ └── php-7.1.10.tar.bz2└── wwwroot├── index.html #站点网页├── wordpress └── wordpress-4.9.4-zh_CN.tar.gz
3.2 准备依赖文件,配置nginx
#创建项目目录 compose_lnmp; #创建服务子目录[root@zy7 ~]# mkdir /opt/compose_lnmp/[root@zy7 ~]# cd /opt/compose_lnmp[root@zy7 compose_lnmp]# mkdir nginx mysql php wwwroot#上传wordpress软件包,准备测试页面[root@zy7 compose_lnmp]# cd /opt/compose_nginx/wwwroot/[root@zy7 wwwroot]# lswordpress-4.9.4-zh_CN.tar.gz[root@zy7 wwwroot]# tar xf wordpress-4.9.4-zh_CN.tar.gz [root@zy7 wwwroot]# echo "<h1>this is test web</h1>" > /opt/compose_lnmp/wwwroot/index.html#上传nginx软件包[root@zy7 compose_lnmp]# cd nginx/[root@zy7 nginx]# lsnginx-1.12.0.tar.gz #编写nginx的Dockerfile文件[root@zy7 nginx]# vim Dockerfile#基于基础镜像FROM centos:7#用户信息MAINTAINER this is nginx image <yuji>#添加环境包RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ makeRUN useradd -M -s /sbin/nologin nginx#上传nginx软件压缩包,并解压ADD nginx-1.12.0.tar.gz /usr/local/src/#指定工作目录WORKDIR /usr/local/src/nginx-1.12.0RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module && make -j8&& make installENV PATH /usr/local/nginx/sbin:$PATH#修改nginx配置文件RUN sed -i 's/#charset koi8-r;/charset utf-8;/' /usr/local/nginx/conf/nginx.conf \&& sed -i '45 s/index index.html index.htm;/index index.html index.php;/' /usr/local/nginx/conf/nginx.conf \&& sed -i '65,71 s/#//' /usr/local/nginx/conf/nginx.conf \&& sed -i 's/fastcgi_pass 127.0.0.1:9000;/fastcgi_pass 172.18.0.30:9000;/' /usr/local/nginx/conf/nginx.conf \&& sed -i 's#/scripts#/usr/local/nginx/html#' /usr/local/nginx/conf/nginx.conf#也可以提前将修改好nginx.conf,放入nginx目录下,之后使用ADD指令复制到镜像中。则可避免在镜像中修改。#暴露端口EXPOSE 80EXPOSE 443#前台启动nginxENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
3.3 配置mysql
#进入mysql子目录[root@zy7 ~]# cd /opt/compose_lnmp/mysql/#将mysql包上传到此目录[root@zy7 mysql]# lsmysql-boost-5.7.20.tar.gz#编写mysql的Dockerfile文件[root@zy7 mysql]# vim DockerfileFROM centos:7MAINTAINER this is mysql image <zhi>RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake makeRUN useradd -M -s /sbin/nologin mysqlADD 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 -j8 && make installRUN chown -R mysql:mysql /usr/local/mysql/ADD my.cnf /etc/RUN chown mysql:mysql /etc/my.cnfENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATHWORKDIR /usr/local/mysql/RUN bin/mysqld \--initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/dataRUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/EXPOSE 3306CMD /usr/local/mysql/bin/mysqld
编写myslq主配置文件my.cnf
#配置myslq主配置文件my.cnf(用来复制到容器)[root@zy7 mysql]# vim my.cnf [client]port = 3306socket = /usr/local/mysql/mysql.sock[mysql]port = 3306socket = /usr/local/mysql/mysql.sock[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataport = 3306character_set_server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket = /usr/local/mysql/mysql.sockserver-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 配置php
[root@zy7 compose_lnmp]# cd /opt/compose_lnmp/php/#将php包上传[root@zy7 php]# lsphp-7.1.10.tar.bz2#编写php的Dockerfile[root@zy7 php]# vim DockerfileFROM centos:7MAINTAINER this is php image <yuji>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-develRUN useradd -M -s /sbin/nologin nginxADD php-7.1.10.tar.bz2 /usr/local/src/WORKDIR /usr/local/src/php-7.1.10RUN ./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 && make installENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATHRUN \cp /usr/local/src/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini \&& sed -i 's#mysqli.default_socket =#mysqli.default_socket = /usr/local/mysql/mysql.sock#' /usr/local/php/lib/php.ini \&& sed -i '939 s#;date.timezone =#date.timezone = Asia/Shanghai#' /usr/local/php/lib/php.iniRUN \cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf \&& sed -i '17 s/^;//' /usr/local/php/etc/php-fpm.confRUN \cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf \&& sed -i 's#user = nobody#user = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \&& sed -i 's#group = nobody#group = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \ && sed -i 's#listen = 127.0.0.1:9000#listen = 172.18.0.30:9000#' /usr/local/php/etc/php-fpm.d/www.conf#也可以提前准备好php.ini、php-fpm.conf、www.conf这三个文件,放入php目录下,之后使用ADD指令复制到镜像中EXPOSE 9000ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
3.5 编写docker-compose.yml
#先拉取镜像centos:7[root@zy7 compose_lnmp]# docker pull centos:7[root@zy7 compose_lnmp]# vim /opt/compose_lnmp/docker-compose.yml#使用版本2(3版本不支持指令volumes_from)version: '2'#使用services定义服务services:#配置nginx服务nginx:#设置容器名container_name: nginx#设置主机名为nginxhostname: nginx#使用dockerfile创建镜像。Dockerfile文件在当前目录的nginx目录下,文件名为Dockerfilebuild:#指定Dockerfile文件所在位置context: ./nginxdockerfile: Dockerfile#映射端口ports:- 1315:80- 1316:443#加入到lnmp网络中,使用ip172.18.0.0.10networks:lnmp:ipv4_address: 172.18.0.10#将当前目录下的wwwroot目录挂载到容器的/usr/local/nginx/html目录volumes:- ./wwwroot/:/usr/local/nginx/html#配置服务mysqlmysql:container_name: mysqlhostname: mysqlbuild:context: ./mysqldockerfile: Dockerfileports:- 3306:3306networks:lnmp:ipv4_address: 172.18.0.20#设置/usr/local/mysql目录为数据卷volumes:- /usr/local/mysql#配置服务php php:hostname: phpbuild:context: ./phpdockerfile: Dockerfilecontainer_name: phpports:- 9000:9000networks:lnmp:ipv4_address: 172.18.0.30#从nginx容器和mysql容器获取数据卷 volumes_from:- nginx- mysql#php容器需要在nginx和mysql之后启动 depends_on:- nginx- mysql#php和容器nginx,容器mysql连接 links:- nginx- mysql#设置网络为自定义网络#配置网络模式和网络名 networks:#设置网络名lnmplnmp:#网络模式为bridge桥接模式driver: bridgeipam:config:#使用的网段为172.18.0.0/16- subnet: 172.18.0.0/16
运行docker-compose
#在工作目录使用此命令。#-f: --file-name, 指定模板文件。默认为docker-compose.yml#-p: --project-name NAME ,指定项目名称,默认使用目录名#-d: 在后台运行[root@zy7 compose_lnmp]# docker-compose -f docker-compose.yml up -d#在工作目录,使用 docker-compose ps 可以看到启动的容器状态[root@zy7 compose_lnmp]# docker-compose ps
进入mysql容器,进行用户授权
#进入mysql容器,进行用户授权。[root@zy7 mysql]# docker exec -it mysql /bin/bash[root@mysql mysql]# mysqlmysql> create database wordpress;mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by 'abc123';mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';mysql> flush privileges;
3.6 浏览器访问测试
http://192.168.126.27:1315/wordpress/index.php #在yaml文件中nginx端口映射为1315http://192.168.126.27:1315/ #直接访问,可以看见创建的测试网页
相关文章:
使用 Docker-compose 搭建lnmp
服务编排: 应用编排: 单机环境下:shell/python脚本多机/集群环境下:ansible、saltstack、pubbet docker容器编排: 单机:docker-compose多机/集群:docker swarm,mesos marathon&a…...

chatgpt赋能python:Python中的矩阵合并方法:介绍和使用方法
Python中的矩阵合并方法: 介绍和使用方法 矩阵合并是Python编程中常用的操作之一,特别是针对数据分析、机器学习和深度学习等领域。Python提供了多种方法来合并矩阵,本文将介绍这些方法并分享如何在实际应用中使用它们。 普通矩阵合并 最基础的矩阵合…...

Java动态代理:优化静态代理模式的灵活解决方案
文章目录 代理模式定义具体实现分析优缺点 优化使用动态代理解决优化相关知识动态代理种类场景应用 代理模式 定义 代理模式,为其他对象提供一种代理以控制对这个对象的访问 具体实现 代理模式的具体实现描述可以分为以下几个步骤: 创建抽象对象接…...

四种Bootloader程序安全机制设计
正文 大家周末好,我是bug菌~ 不管是玩单片机还是嵌入式linux,基本上都会接触到bootloader,所以bootloader程序也是一个关键的组件,进行硬件初始化,应用程序的合法性、完成性检测、升级功能等等都与其息息相关。 像一些…...

【DBA 警世录之习惯性命令---读书笔记】
👈【上一篇】 💖The Begin💖点点关注,收藏不迷路💖 【下一篇】👉 🔻【💣 话题引入:既然 DBA 这个职业如此危险,那么哪些习惯是 DBA 必须养成的呢&#x…...

Vue中如何进行状态持久化(LocalStorage、SessionStorage)
Vue中如何进行状态持久化(LocalStorage、SessionStorage)? 在Vue应用中,通常需要将一些状态进行持久化,以便在用户关闭浏览器或刷新页面后,仍能保留之前的状态。常见的持久化方式包括LocalStorage和Sessio…...

【30天熟悉Go语言】6 Go 复杂数据类型之指针
文章目录 一、前言二、数据类型总览三、指针1、特殊运算符& *2、内存角度来看指针3、使用指针修改数据4、指针使用的注意事项5、对比着看Java的引用类型 三、总结 一、前言 Go系列文章: GO开篇:手握Java走进Golang的世界2 Go开发环境搭建、Hello Wor…...
Linux内核使用红黑树的场景
进程调度队列 (Process Scheduling):内核需要对进程按照一定的调度策略进行排队,以便更好地利用 CPU 的时间片。因此,内核使用红黑树作为查找和管理进程调度队列的数据结构,以支持快速的查找、插入和删除操作。 文件系统 (File S…...

遗留的 AppSec 工具迷失在云端
随着应用程序开发步伐的加快,IT 和安全团队正在对旧的应用程序安全(AppSec) 工具失去信心。 根据 Backslash 对 300 名 CISO、AppSec 经理和工程师的调查,遗留工具无法跟上并陷入永远的追赶游戏。 影响是深远的,大多数组织都看到云原生 App…...

直流稳压电源与信号产生电路(模电速成)
目录 一、直流稳压电源 1、直流稳压电路 2、串联型稳压电路 3、集成稳压电路 二、信号产生电路 1、振荡电路 2、波形发生器 一、直流稳压电源 1、直流稳压电路 直流电源由 变压器、整流、滤波、稳压 四部分组成 整流:将交流变为直流 滤波:减小…...

0202性能分析-索引-MySQL
1 索引语法 创建索引 CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_column_name,...);Index_name:规范为idx_表名_字段名... 查看索引 SHOW INDEX FROM table_name;删除索引 DROP INDEX index_name ON table_name;按照下列要求,创建…...

Play wright自动化测试工具该如何更加完美地使用
目录 1.1 拦截网络请求 1.2 pytest 管理用例 1.3 PO模型 1.4 API 和 UI 自动化测试融合 1.5 数据驱动 1.6 动态挑选用例执行 1.6 Allure测试报告 1.7 持续集成 1.1 拦截网络请求 网络拦截: 无响应 pass 中止 route.abort("aborted") 放行 route…...
数据可视化学习笔记:Python实现汽车品牌销售量矩形树图
引言 本文将介绍如何使用 Python 和 Pyecharts 库创建一个汽车品牌销售量的矩形树图。我们将使用 Pandas 读取 CSV 文件数据,然后对数据进行处理、封装,最后将数据可视化为矩形树图。 准备工作 首先,我们需要先安装好相关库: PandasPyecharts可以使用 pip 命令进行安装:…...

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业
0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv,绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…...

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持
文章目录 零、学习目标一、Spring MVC 自动配置(一)自动配置概述(二)Spring Boot整合Spring MVC 的自动化配置功能特性 二、Spring MVC 功能拓展实现(一)创建Spring Boot项目 - SpringMvcDemo2021ÿ…...

chatgpt赋能python:Python安装EGG——一个简单的指南
Python安装EGG——一个简单的指南 如果你使用Python有一段时间了,你可能会遇到需要安装扩展包(Package)的情况。在Python中,这些扩展包的文件格式通常是.egg(Easy Installable GZip)。在本文中,…...

Web前端-React学习
React基础 React 概述 React 是一个用于构建用户界面的JavaScript库。 用户界面: HTML页面(前端) React主要用来写HTML页面, 或构建Web应用 如果从MVC的角度来看,React仅仅是视图层(V),也就…...
【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息
github仓库:https://github.com/open-rust-initiative/sensleak-rs Rust是一门神奇的编程语言,它提供了内存安全、零成本抽象、并发安全等特性,使开发人员能够编写高性能、高抽象和安全的代码。 这是我用rust开发的第一个工作,希望…...

搭建一个定制版New Bing吧
项目介绍 项目地址:https://github.com/adams549659584/go-proxy-bingai 引用项目简介:用 Vue3 和 Go 搭建的微软 New Bing 演示站点,拥有一致的 UI 体验,支持 ChatGPT 提示词,国内可用,国内可用ÿ…...

使用AIGC工具提升论文阅读效率
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...