windows环境下用docker搭建php开发环境dnmp
安装WSL
WSL即Linux子系统,比虚拟机占用资源少,安装的前提是系统必须是win10以上。
WSL的安装比较简单,网上有很多教程,例如:WSL简介与安装流程(Windows 下的 Linux 子系统)_wsl安装-CSDN博客,我这里就不多赘述了
安装DockerDesktop
官网下载:Docker Desktop: The #1 Containerization Tool for Developers | Docker
汉化包(可选):asxez/DockerDesktop-CN: Docker汉化 Docker中文版 Docker汉化包 DockerDesktop汉化 Docker Windows Docker MAC
修改镜像存储目录(可选):由于镜像比较大,为了不占用c盘用空间,可以设置修改镜像存储目录
下载dnmp
我们直接用github上star比较多的,虽然有点缺陷,很多东西文档上也没说,不过该有的都有,没有的我会补充
项目github地址:garymengcom/dnmp: Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis)
git clone https://github.com/garymengcom/dnmp.git
配置文件
1.复制配置文件
cd dnmp
copy env.sample .env
copy docker-compose.sample.yml docker-compose.yml
2.修改.env
文件配置
-
修改php代码目录,把
SOURCE_DIR
修改为你的php代码所在目录,默认是dnmp/www,假如我的是D:/wwwroot
目录,则修改为SOURCE_DIR=D:/wwwroot
-
增加php扩展,默认安装php扩展比较少,根据需要需要在对应的php配置中添加额外的扩展,如
redis,exif,bcmath
等 -
修改mysql端口、root密码
3.修改docker-compose.yml
文件,把自己不需要的服务注释掉,需要的加上。例如:默认会同时安装mysql5
和mysql8
,根据自己的需求,只保留其中一个;
4.默认配置文件都在services
目录下对应的程序目录里面,保持默认即可
启动服务
docker-compose up -d
如果下载镜像的过程中报错网络问题无法下载,可以看下面的【更换镜像源】这一节解决,或者尝试手动执行docker pull 单独拉取镜像试试
等待镜像下载完成,容器运行了就可以了。如果安装了Docker Desktop
,按照提示按v
键可以跳转到 Docker Desktop
中查看跑起来的服务
访问http://localhost
即可访问到默认的网站
更换镜像源
如果启动服务过程中报下面的错,镜像无法下载,则需要更换docker镜像源
可以上网找一下当前可用的docker镜像源,例如:https://cloud.tencent.com/developer/article/2485043
,然后在或DockerDesktop
的配置中增加镜像配置registry-mirrors
,镜像地址自己找最新可用的地址
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.1ms.run"]
}
安装PHP扩展
参考官方文档即可:garymengcom/dnmp: Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis)
新建站点
默认有一个localhost网站,目录在dnmp\www\localhost
,按照下面的步骤可以新建一个站点,以创建www.test-site.net
为例
-
1.创建nginx站点配置文件
进入
dnmp\services\nginx\conf.d
目录,新建文件www.test-site.net.conf
,文件内容如下(将www.test-site.net
全部替换为你自己的域名即可, 注意修改fastcgi_pass
配置项对应的php容器)server {server_name www.test-site.net;listen 80;root /www/www.test-site.net;index index.php index.html index.htm;#charset koi8-r;access_log /dev/null;#access_log /var/log/nginx/nginx.www.test-site.net.access.log main;error_log /var/log/nginx/nginx.www.test-site.net.error.log warn;#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000# 注意修改fastcgi_pass中对应的php容器#location ~ [^/]\.php(/|$) {fastcgi_pass php74:9000;include fastcgi-php.conf;include fastcgi_params;}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#} }
-
2.修改本地hosts文件,增加一条记录
127.0.0.1 www.test-site.net
-
3.新增php代码
在php代码目录(默认是dnmp\www)下新建站点目录
dnmp\www\www.test-site.net
,里面存放该站点的php文件 -
4.重启nginx,浏览器访问
http://www.test-site.net/
即可,需要注意的是如果你开了代理可能会导致hosts文件映射失效! -
5.如果每个网站需要不同的php版本,那么需要启动对应版本的php容器并且网站的nginx配置文件中的
fastcgi_pass
配置项需要修改为对应的php版本
注意事项
如果项目是thinkphp或laravel等web框架,需要将www.test-site.net.conf
配置中的root /www/www.test-site.net;
修改为public目录,如:root /www/www.test-site.net/public
,然后增加伪静态配置
Laravel伪静态:
location / { try_files $uri $uri/ /index.php$is_args$query_string;
} ThinkPHP5.x伪静态:
location / {try_files $uri $uri/ /index.php?$query_string;
}ThinkPHP6.x伪静态:
location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s=$1 last;break;}
}
SSL证书
-
1.生成证书
本地自签名证书推荐mkcert:Windows下安装mkcert_windows安装mkcert-CSDN博客
生产环境免费证书推荐Let‘s Encrypt:[SSL]Let‘s Encrypt生成免费的SSL证书_let’s encrypt 证书-CSDN博客
当然,也可以选择其他付费SSL证书,证书包括
.crt
和.key
格式的两个文件,在dnmp\services\nginx\ssl
目录创建跟网站域名一致的文件夹,然后将两个证书文件放到文件夹里即可 -
2.在对应站点的nginx配置文件最后增加下面这段配置,注意将证书路径替换为你的
listen 443 ssl; ssl_certificate /ssl/www.test-site.net/www.test-site.net+2.pem; ssl_certificate_key /ssl/www.test-site.net/www.test-site.net+2-key.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL;
-
3.重启nginx生效
docker-compose restart nginx
解决dnmp环境下php运行慢问题
你有没有发现使用WSL+Docker
这种方式运行php连输出简单的hello world
都要4秒钟,为什么会这么慢???
-
原因
WSL2 的跨文件系统的io读写性能非常非常差,官方已经告诉了我们关键问题和解决方案:不要将项目挂载到 Windows 系统中,
而是挂载到 WSL 文件系统中。 -
思路
1.参考文章 解决Docker使用WSL2项目运行慢的问题 | Laravel China 社区,将原本
.env
配置文件中的SOURCE_DIR
路径(也就是windows与docker容器映射的目录)改为WSL
路径,也就是windows与docker容器目录映射改为wsl与docker容器目录映射,然后进入WSL,在WSL中执行docker-compose up
命令。然后把php代码复制一份到这个WSL目录中,这样就不存在跨文件系统读写问题了,再次访问docker中的php网站,快到飞起!!!但是又产生新的问题:代码文件怎么同步?用FTP有点麻烦,linux定时同步也很麻烦。。。2.不知道你发现没有,在DockerDesktop中勾选
Enable integration with my default WSL distro
的话,你的电脑中会多出一个Linux文件目录,你可以直接在windows下访问WSL中的文件。通过查询资料得知,在WSL中,/mnt
目录是与windows的硬盘目录是连通的,也就是在WSL中也能直接读取到你在windows中的php代码目录!!! -
解决
有了上面两个前提,那就好解决了,直接把WSL中
/mnt
代码目录(与windows中的代码目录相同)和docker容器的目录映射起来,按照下面两个步骤操作就可以了1.修改
.env
中的php代码目录SOURCE_DIR
为WSL目录,例如我的代码目录为D盘下的D:\dnmp\www
,那么就改为SOURCE_DIR=/mnt/d/dnmp/www/
2.通过cmd进入WSL(直接输入wsl命令)然后在WSL中运行
docker-compose up -d
即可,就是这么简单。千万不要在windows下启动docker-compose
, 因为windows下没有/mnt/d/dnmp/www
目录,会映射失败。当然,第一次在WSL启动成功之后,也可以在dockerDesktop界面中直接点按钮一键启动!再次访问docker中的网站看看是不是快多了!
如果myql容器无法正常启动,请参考下面的【常见问题 · 在WSL中docker启动mysql容器失败】解决
自定义镜像
项目使用的镜像都是官方镜像,有时候会满足不了我们的需求,比如php扩展比较少,增加扩展之后如果要多机部署又要安装一次php扩展,非常不方便。目前可用的解决方法是打包并发布自己的镜像,然后修改dnmp\services
目录下对应的程序Dockerfile文件中的镜像名称再执行docker-compose up
新增PHP版本
以新增PHP8.4为例
-
1.在
docker-compose.yml
文件中复制一份PHP8.2的配置并替换为PHP8.4,注意先不要做目录映射,因为还没有默认的配置文件php84:build:context: ./services/php84args:DEBIAN_MIRROR_DOMAIN: deb.debian.orgPHP_EXTENSIONS: "$PHP84_EXTENSIONS"TZ: "$TZ"container_name: php84expose:- 9501volumes:- ${SOURCE_DIR}:/www/:rw- ${PHP84_LOG_DIR}:/var/log/php- ${PHP84_DATA_COMPOSER}:/tmp/composerrestart: alwayscap_add:- SYS_PTRACEnetworks:- default
-
2.在
.env
文件中复制一份PHP8.2的配置并替换为PHP8.4,修改配置文件位置,注意将扩展删除,只保留curl即可,不然可能会安装报错# # PHP84 # # Available PHP_EXTENSIONS: # # pdo_mysql,zip,pcntl,mysqli,mbstring,exif,bcmath,calendar, # sockets,gettext,shmop,sysvmsg,sysvsem,sysvshm,pdo_rebird, # pdo_dblib,pdo_oci,pdo_odbc,pdo_pgsql,pgsql,oci8,odbc,dba, # gd,intl,bz2,soap,xsl,xmlrpc,wddx,curl,readline,snmp,pspell, # recode,tidy,gmp,imap,ldap,imagick,sqlsrv,mcrypt,opcache, # redis,memcached,xdebug,swoole,pdo_sqlsrv,sodium,yaf,mysql, # amqp,mongodb,event,rar,ast,yac,yar,yaconf,msgpack,igbinary, # seaslog,varnish,xhprof,xlswriter,memcache,rdkafka,zookeeper, # psr,phalcon,sdebug,ssh2,yaml,protobuf,hprose # # You can let it empty to avoid installing any extensions, # or install multi plugins as: # PHP84_EXTENSIONS=pdo_mysql mysqli gd curl opcache # Note::that it is a spacePHP84_VERSION=8.4.3 PHP84_PHP_CONF_FILE_DEVELOPMENT=./services/php84/php.ini-development PHP84_PHP_CONF_FILE_PRODUCTION=./services/php84/php.ini-production PHP84_FPM_CONF_FILE=./services/php84/www.conf PHP84_LOG_DIR=./logs/php84 PHP84_DATA_COMPOSER=./data/composer PHP84_EXTENSIONS=curl
-
3.在dnmp项目中新建php84目录和Dockerfile文件
cd service && mkdir php84 cd php82 && copy Dockerfile ..\php84\
编辑
php84/Dockerfile
,将里面的FROM php:8.2-fpm
改为FROM php:8.4-fpm
并保存 -
4.在WSL中执行
docker-compose up -d
创建容器 -
5.在WSL中执行下面的命令复制配置文件到宿主机
首先查看php84容器
/usr/local/etc
目录下有什么配置文件然后将3个需要的文件复制到宿主机
docker cp php84:/usr/local/etc/php/php.ini-development /mnt/d/dnmp/services/php84/php.ini-development docker cp php84:/usr/local/etc/php/php.ini-production /mnt/d/dnmp/services/php84/php.ini-production docker cp php84:/usr/local/etc/php-fpm.d/www.conf /mnt/d/dnmp/services/php84/php-fpm.conf
-
6.修改
docker-compose.yml
目录映射配置文件,注意变量要跟.env
文件中对应php84:build:context: ./services/php84args:DEBIAN_MIRROR_DOMAIN: deb.debian.orgPHP_EXTENSIONS: "$PHP84_EXTENSIONS"TZ: "$TZ"container_name: php84expose:- 9501volumes:- ${SOURCE_DIR}:/www/:rw- ${PHP84_PHP_CONF_FILE_DEVELOPMENT}:/usr/local/etc/php/php.ini-development- ${PHP84_PHP_CONF_FILE_PRODUCTION}:/usr/local/etc/php/php.ini-production- ${PHP84_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf- ${PHP84_LOG_DIR}:/var/log/php- ${PHP84_DATA_COMPOSER}:/tmp/composerrestart: alwayscap_add:- SYS_PTRACEnetworks:- default
-
7.在WSL中删掉php84容器并重新创建
docker rm php84 docker-compose up -d
到此新增PHP版本成功
常见问题
-
php编译失败
php在编译过程中可能会遇到扩展安装报错导致编译失败
可以尝试修改
.env
文件中的CONTAINER_PACKAGE_URL
,这一行的上面有提供几个url,可以逐个尝试看看能不能解决。如果还不能解决,打开.env
文件,在对应的PHP扩展中删除部分扩展,例如只保留curl扩展,其他扩展等容器跑起来后手动安装。 -
在WSL中docker启动mysql容器失败
mysql无法启动,查看日志发现报错没有权限
[ERROR] Could not set file permission for ca-key.pem
,原因是wsl.conf文件没有metadata信息,需要修改wsl的配置才能支持修改文件属性。进入WSL,然后编辑/etc/wsl.conf
文件增加下面的配置信息,重启WSL即可[automount] enabled = true options = "metadata" mountFsTab = false
在windows cmd下重启WSL
# 关闭wsl wsl --shutdown # 启动并进入wsl wsl
再次进入WSL执行
docker-compose up -d
即可正常启动容器参考文章:https://blog.csdn.net/x356982611/article/details/108732844
相关文章:
windows环境下用docker搭建php开发环境dnmp
安装WSL WSL即Linux子系统,比虚拟机占用资源少,安装的前提是系统必须是win10以上。 WSL的安装比较简单,网上有很多教程,例如:WSL简介与安装流程(Windows 下的 Linux 子系统)_wsl安装-CSDN博客&…...
区块链中的递归长度前缀(RLP)序列化详解
文章目录 1. 什么是RLP序列化?2. RLP的设计目标与优势3. RLP处理的数据类型4. RLP编码规则详解字符串的编码规则列表的编码规则 5. RLP解码原理6. RLP在以太坊中的应用场景7. 编码示例分析8. 总结 1. 什么是RLP序列化? 递归长度前缀(RLP&…...
PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别
如果在 PHP 5.3 的版本以前想要创建MySQL的持久化连接(长连接),需要显式调用 pconnect 创建: $con mysql_pconnect($server[host], $server[username], $server[password]); if (!($con false)) { if (mysql_select_db($server[database], $con) fals…...
基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明
运行截图 功能介绍 前台功能包括:首页、详情页、订单、用户中心。后台功能包括:首页、轮播图管理、管理员、卖家管理、买家管理、景区管理、订单管理非开源功能(分类管理,地区管理,收藏管理,评论管理&a…...
架构学习第七周--Prometheus
目录 一、监控系统基础 二、Prometheus介绍 三、Prometheus单机部署 四、服务发现与告警功能 4.1,服务发现 4.2,告警功能实现 五、Prometheus与Kubernetes 5.1,Kubernetes指标 5.2,Prometheus集群部署 一、监控系统基础…...
基于Nanopi duo2的WiFi智能摄像头
1.固件包烧录 https://wiki.friendlyelec.com/wiki/index.php/NanoPi_Duo2/zh#.E8.BF.9E.E6.8E.A5WiFi 固件包链接以及烧录工具都在上面链接中 烧录过程 使用读卡器将SD卡插入到电脑,然后打开烧录工具 2.通过串口工具连接板子使其连接WiFi 对应的串口工具,就是这个HyperT…...
Hive Orc表数据导出和导入
导出到hdfs:hive执行 INSERT OVERWRITE DIRECTORY /test/hdfs_dir ROW FORMAT DELIMITED FIELDS TERMINATED BY \t STORED AS ORC SELECT * FROM hive_table; HDFS导出到本地:shell执行 hdfs dfs -get /test/hdfs_dis/file_name /linux_dir/xxx 本…...
Python爬虫实战:从零到一构建数据采集系统
文章目录 前言一、准备工作1.1 环境配置1.2 选择目标网站 二、爬虫实现步骤2.1 获取网页内容2.2 解析HTML2.3 数据保存 三、完整代码示例四、优化与扩展4.1 反爬应对策略4.2 动态页面处理4.3 数据可视化扩展 五、注意事项六、总结互动环节 前言 在大数据时代,数据采…...
Ubuntu 的RabbitMQ安装
目录 1.安装Erlang 查看erlang版本 退出命令 2. 安装 RabbitMQ 3.确认安装结果 4.安装RabbitMQ管理界面 5.启动服务并访问 1.启动服务 2.查看服务状态 3.通过IP:port 访问界面 4.添加管理员用户 a)添加用户名:admin,密码࿱…...
七星棋牌源码高阶技术指南:6端互通、200+子游戏玩法深度剖析与企业级搭建实战(完全开源)
在棋牌游戏行业高速发展的今天,如何构建一个具备高并发、强稳定性与多功能支持的棋牌游戏系统成为众多开发者和运营团队关注的焦点。七星棋牌全开源修复版源码 凭借其 六端互通、200子游戏玩法、多省区本地化支持,以及 乐豆系统、防沉迷、比赛场、AI智能…...
cuda安装
cuda WSL2急速搭建CUDA体验环境_wsl2 cuda-CSDN博客 cudnn cuDNN Archive | NVIDIA Developer pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_os_init 函数
ngx_os_init 声明在 src/os/unix/ngx_os.h ngx_int_t ngx_os_init(ngx_log_t *log); 定义在 src\os\unix\ngx_posix_init.c ngx_int_t ngx_os_init(ngx_log_t *log) {ngx_time_t *tp;ngx_uint_t n; #if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)long size; #endif#if (NGX…...
记录一次部署PC端网址全过程
当我查看我之前写的文章时、顿时惊奇发出感慨:啥时候写的?是我写的么?疑惑重重… 所以说,好记性不如烂笔头。 记录一次部署PC端网址全过程 部署PC端网址分是三步:第一步:申请域名并映射到外网IP ࿰…...
QML 实现一个动态的启动界面
QML 实现一个动态的启动界面 一、效果查看二、源码分享三、所用到的资源下载 一、效果查看 二、源码分享 工程结构 main.qml import QtQuick import QtQuick.Controls import QtQuick.Dialogs import Qt.labs.platformWindow {id:windowwidth: 640height: 400visible: truetit…...
视频HDR技术详解,你的电脑怎么播放HDR视频?
闲聊:前两天在b站上面看到影视飓风的视频,让我有点疑惑,我不知道为什么播放视频有设备撑不住一说,所以感兴趣去ytb下载了4k原片30hz刷新的,然后测试一下我的电脑能不能播放,发现还是可以的,视觉…...
Spring统一功能处理:拦截器、响应与异常的统一管理
目录 一.拦截器 二.统一数据返回格式 三.统一异常处理 一.拦截器 拦截器是Spring框架提供的核功能之,主要来拦截的请求,在指定法前后,根据业务需要执预先设定的代码。 也就是说,允许开发员提前预定义些逻辑,在的请…...
2025年度福建省职业院校技能大赛高职组“信息安全管理与评估”赛项规程
2025 年度福建省职业院校技能大赛 高 职组“ 信息安全管理与评估 ”赛项规程 一、赛项名称 省赛编号:GZ032 赛项名称:信息安全管理与评估 赛项组别:高职组 竞赛形式: 团体赛 二、竞赛目的 为全面贯彻落实国家网络强国战略&#x…...
Vue 中 nextTick 的原理详解
1. 为什么需要 nextTick Vue 采用 异步渲染机制,当响应式数据发生变化时,Vue 并不会立即更新 DOM,而是将这些变化放入一个 队列 中,并在 同一事件循环(Event Loop)中合并相同的修改,最后执行批…...
vue 手写分页
【先看效果】 (1)内容小于2页 不展示页码 (2)1 < 内容页数< 限定展示页码 展示:页码、上下页;隐藏:首页、末页图标,上、下一区间码。即:(页数&#…...
跟着柳叶刀数字健康,学习如何通过病理切片预测分子分类对预后的影响|项目复现
小罗碎碎念 项目复现 今天和大家分享一个非常具有参考价值的项目,手把手带着大家复现一篇发表在柳叶刀数字健康的文章。 花了六个小时才完成的这篇推送,信息量非常大,遇到了很多报错问题,但是解决以后的感觉是非常爽的,先给大家展示一下最终的成果——在同一张切片上,通…...
DuodooBMS源码解读之 sale_change模块
销售变更模块用户使用手册 一、模块概述 本扩展模块主要包含两个主要的 Python 文件:sale_change/report/sale_change_report.py 和 sale_change/wizard/sale_change_download.py,提供了销售变更报表查看和销售变更单下载的功能。以下是详细的使用说明…...
基于 Highcharts 实现 Vue 中的答题统计柱状图组件
在现代 Web 开发中,数据可视化是一个重要的组成部分,而 Highcharts 是一个广泛使用的 JavaScript 图表库,可以帮助开发者在 Web 页面上轻松地绘制丰富的图表。在本文中,我们将基于 Highcharts 创建一个用于答题统计的柱状图&#…...
MySQL 插入更新语句(insert…on duplicate key update语句 )
我们日常在使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,当遇到这种情况时,MySQL默认的反应是报错并停止执行后续的语句,为了避免这种情况,你有3种选择: 使用insert ignore…...
Jenkins整合Jmeter实现接口自动化测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、安装jmeter 下载:http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本,启动前修改j…...
基于LM Arena 的 LLM 基准测试排行榜:DeepSeek-R1 排名第 5
打开 Arena 网站:https://lmarena.ai/,点开 Leaderboard 可以看到上图的排行榜,可以看到 DeepSeek-R1 排名第 5。...
游戏引擎学习第116天
回顾昨天的工作 本次工作内容主要集中在游戏开发的低级编程优化,尤其是手动优化软件渲染。工作目的之一是鼓励开发者避免依赖外部库,而是深入理解代码并进行优化。当前阶段正进行SIMD(单指令多数据)优化,使用Intel推荐…...
【AI绘画】大卫• 霍克尼风格——自然的魔法(一丹一世界)
大卫• 霍克尼,很喜欢这个老头,“艺术是一场战斗”。老先生零九年有了iphone,开始用iphone画画,一零年开始用ipad画画,用指头划拉,据说五分钟就能画一幅,每天早上随手画几幅送给身边的朋友。很c…...
当湖南家具遇上DeepSeek:极满家开启智能家居新时代
在湖南的街头巷尾,总流传着这样一句话:家具有温度,生活才有味道。走进铂乐极满家的展厅,只有被阳光浸润的原木香气,和智能家居跳动的温暖建议。DeepSeek就推荐了能自动调节高度的智能款,连护眼灯角度都算好…...
#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…...
Docker挂载数据显式挂载和隐式挂载的区别
项目使用的Docker file 创建数据卷挂载点,结果发现宿主机目录中的数据卷路径下是空的,才知道docker file中创建的数据卷是隐式挂载,并不会在宿主机上留下持久化数据,随着容器被删除隐式挂载的数据卷也会跟着被删除 后面改为在jen…...
深度解析应用层协议-----HTTP与MQTT(涵盖Paho库)
HTTP协议概述 1.1 HTTP的基本概念 HTTP是一种应用层协议,使用TCP作为传输层协议,默认端口是80,基于请求和响应的方式,即客户端发起请求,服务器响应请求并返回数据(HTML,JSON)。在H…...
MySQL八股学习笔记
文章目录 一、MySQL结构1.宏观结构1.1.Server层1.2.存储引擎层 2.建立链接-连接器3.查询缓存4.解析SQL-解析器(1)词法分析(2)语法分析 5.执行SQL5.1.预处理器 prepare5.2.优化器 optimize5.3.执行器 execute(1…...
C++ 设计模式-备忘录模式
游戏存档实现,包括撤销/重做、持久化存储、版本控制和内存管理 #include <iostream> #include <memory> #include <deque> #include <stack> #include <chrono> #include <fstream> #include <sstream> #include <ct…...
Jenkins 环境搭建---基于 Docker
前期准备 提前安装jdk、maven、nodeJs(如果需要的话) 创建 jenkins 环境目录,用来当做挂载卷 /data/jenkins/ 一:拉取 Jenkins 镜像 docker pull jenkins/jenkins:lts 二:设置 Jenkins挂载目录 mkdir -p ~/jen…...
【动态规划篇】:解析背包问题--动态规划塑造的算法利器
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:动态规划篇–CSDN博客 文章目录 一.01背包问题1.模板题2.例题1.分割等和子集2.目标和3.最后…...
ok113i平台——多媒体播放器适配
1. 视频播放支持 1.1 在Linux平台交叉编译ffmpeg动态库,详情查看《ok113i平台——交叉编译音视频动态库》 提取如下动态库: libavcodec.so.58.134.100 libavdevice.so.58.13.100 libavfilter.so.7.110.100 libavformat.so.58.76.100 libavutil.so.56.…...
【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库
一、总体方案 目前在使用 DeepSeek 在线环境时,页面经常显示“服务器繁忙,请稍后再试”,以 DeepSeek R1 现在的火爆程度,这个状况可能还会持续一段时间,所以这里给大家提供了 DeepSeek R1 RAG 的本地部署方案。最后实现…...
线程与进程的深入解析及 Linux 线程编程
在操作系统中,进程和线程是进行并发执行的两种基本单位。理解它们的区别和各自的特点,能够帮助开发者更好地进行多任务编程,提高程序的并发性能。本文将探讨进程和线程的基础概念,及其在 Linux 系统中的实现方式,并介绍…...
微信问题总结(onpageshow ,popstate事件)
此坑描述 订单详情某按钮点击,通过window.location.href跳转到(外部)第三方链接后,回退后,在ios中生命周期和路由导航钩子都失效了,无法触发。 在安卓中无视此坑, 回退没有问题 解决 原因&am…...
自己安装一台DeepSeek的服务器
找一台还可以的Linux服务器,登录后执行: curl -fsSL https://ollama.com/install.sh | sh 等待安装完成: 执行命令,根据服务器能力安装不同版本的AI模型: ollama run llama3.2 下一步就开始对话吧: llam…...
面阵工业相机提高餐饮业生产效率
餐饮行业是一个快节奏、高要求的领域,该领域对生产过程中每一个阶段的效率和准确性都有很高的要求。在食品加工、包装、质量控制和库存管理等不同生产阶段实现生产效率的优化是取得成功的关键步骤。面阵工业相机能够一次性捕捉对象的二维区域图像,并支持…...
Java 中 HTTP 协议版本使用情况剖析
Java 中 HTTP 协议版本使用情况剖析 一、HTTP/1.1 与 HTTP/2 概述 (一)HTTP/1.1 HTTP/1.1 是广泛应用且成熟的 HTTP 协议版本,它在互联网发展历程中扮演了重要角色。其特点主要包括: 连接方式:默认采用短连接,即每次请求都要建立新的 TCP 连接,请求完成后断开。不过也…...
计算机网络之物理层——基于《计算机网络》谢希仁第八版
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...
DeepSeek 助力 Vue 开发:打造丝滑的缩略图列表(Thumbnail List)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
day56 第十一章:图论part06
108.冗余连接 注意init初始化 改进: 其实只有一条边冗余,改为,如果两条边在同一个集合里,就输出,不然加入。 #include <iostream> #include <vector> using namespace std;int n 1005; vector<int>…...
conda 配置源
无论是Anaconda vs Miniconda vs Miniforge 中的哪个,只要使用conda就涉及源,换源的目的是为了加速包的获取 修改配置文件 通过修改用户目录下的 .condarc 文件来使用 不同系统下的 .condarc 目录如下: Linux: ${HOME}/.condarcmacOS: ${…...
LangChain大模型应用开发:多模态输入与自定义输出
介绍 大家好,博主又来给大家分享知识了。今天给大家分享的内容是使用LangChain进行大模型应用开发中的多模态输入与自定义输出。 LangChain中的多模态数据输入是指将多种不同形式的数据作为输入提供给基于语言模型的应用程序或系统,以丰富交互内容和提…...
HarmonyOS 开发套件 介绍 ——上篇
HarmonyOS 开发套件 介绍 ——上篇 在当今科技飞速发展的时代,操作系统作为智能设备的核心,其重要性不言而喻。而HarmonyOS,作为华为推出的全新操作系统,正以其独特的魅力和强大的功能,吸引着越来越多的开发者和用户的…...
【Unity Shader编程】之图元装配与光栅化
执行方式:自动完成 图元装配自动化流程 顶点坐标存入装配区 → 按绘制模式连接顶点 → 生成完整几何图元 示例:gl.drawArrays(gl.TRIANGLES, 0, 3)自动生成三角形 会自动自动裁剪超出屏幕范围(NDC空间外)的三角形,仅保…...
小游戏-记忆卡牌
1、游戏开始4张卡牌,每次过关后新增两张,总共64张卡,可以修改数组EMOJIS,添加表情,增加卡牌数量 2、新建txt文件,将代码粘贴进去,保存后,将txt修改后缀名为html的格式 <!DOCTYPE…...