docker搭建LNMP
docker安装
略
下载镜像
- nginx:最新版
- php-fpm:根据自己需求而定
- mysql:根据自己需求定
以下是我搭建LNMP使用的镜像版本
root@VM-12-16-ubuntu:/docker/lnmp/php/etc# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.34 5761fe35fa53 37 hours ago 577MB
bitnami/php-fpm 8.1.22 33c8b3ab8748 2 days ago 281MB
nginx latest 89da1fb6dcb9 2 weeks ago 187MB
创建路径
# 创建相关目录
mkdir -p /docker/lnmp/php
mkdir -p /docker/lnmp/nginx/conf.d
mkdir -p /docker/lnmp/mysql
compase文件
version: '3'
services:php:image: bitnami/php-fpm:8.1.22volumes:- /var/www/html:/usr/share/nginx/html #宿主机上你的项目放在哪个路径就挂载哪个路径,如laravel,挂到项目所在路径即可,不要挂到public#- /docker/lnmp/php/etc:/opt/bitnami/php/etcrestart: alwaysnginx:image: nginx:latestports:- "80:80"- "443:443"volumes:- /docker/lnmp/nginx/conf.d:/etc/nginx/conf.d- /var/www/html:/usr/share/nginx/html- /var/log/nginx:/var/log/nginxdepends_on:- phprestart: alwaysmysql:image: mysql:8.0.34 volumes:- /docker/lnmp/mysql/data:/var/lib/mysql- /docker/lnmp/mysql/conf.d:/etc/mysql/conf.denvironment:- MYSQL_ROOT_PASSWORD=mysql123 #改成你自己的mysql密码ports:- "3306:3306"restart: always
nginx 配置文件
touch /docker/lnmp/mysql/conf.d/project_a.confcat > /docker/lnmp/mysql/conf.d/project_a.conf << EOF
server {listen 80;server_name php.test;root /usr/share/nginx/html;index index.html index.htm index.php;location / {try_files $uri $uri/ /index.php$is_args$args;}location ~ \.php$ {try_files $uri /index.php =404;fastcgi_pass php:9000; #这里是因为我compose.yml文件中php-fpm服务名称是“php”,你也可以改成你服务的私有地址fastcgi_index index.php;fastcgi_buffers 16 16k;fastcgi_buffer_size 32k;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#fixes timeoutsfastcgi_read_timeout 600;include fastcgi_params;}location ~ /\.ht {deny all;}location /.well-known/acme-challenge/ {root /var/www/letsencrypt/;log_not_found off;}error_log /var/log/nginx/php_error.log;access_log /var/log/nginx/php_access.log;}
EOF
安装mycli
因为docker安装mysql,服务上没有安装mysql客户端,查询不方便,推荐使用mycli,还带命令提示,还可以
apt install mycli -y
#或
yum install mycli -y


特殊要求
- 如果需要自己修改php.ini,请先运行php-fpm镜像,将配置文件拷贝到服务器上,修改后将文件挂到容器
# 临时启动一个php-fpm
docker run --name myphp -d bitnami/php-fpm:8.1.22
# 将配置文件拷贝到自己服务器上
docker cp myphp:/opt/bitnami/php/etc/ /docker/lnmp/php/etc/
# 删除临时php-fpm容器
docker rm -f myphp
测试
测试nginx是否正常
在根目录下创建index.html
<h1>hello,docker!</>

测试nginx是否能正确解析php文件
在根目录下创建index.php
<?php
phpinfo();

测试mysql
注意:如果你用的云服务器,$servername不要设置成公网地址,否则测试连接不成功,最好设置成你的服务器的私有地址
<?php
//$servername = "mysql" 因为我的compose.yml中mysql服务的名字是“mysql”,如果你也和我一样,可以这样写,不是的话,保持和compose.yml文件中mysql服务名一致
$servername = "mysql";
$username = "root";
$password = "mysql123";
$db_name = 'mysql';
$conn = new mysqli($servername, $username, $password, $db_name);
// 检测连接
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}
echo "连接成功";

php连接mysql8报错处理

# 创建mysql.cnf
touch /docker/lnmp/mysql/conf.d/mysql.cnf
# 修改密码验证插件
cat > /docker/lnmp/mysql/conf.d/mysql.cnf <<EOF
[mysqld]
default-authentication-plugin=mysql_native_password
EOF
# 重启mysql镜像
docker-compose -f /docker/lnmp/compose.yml restart mysql
# 登录用root登录mysql
mycli -uroot
# 没有库的可以创建一个,有库跳过这一步
create database blog;
#没有用户的的创建用户,有则跳过
CREATE USER ‘blog‘@‘%‘ IDENTIFIED WITH mysql_native_password BY 'Mysql@2023_!';
#用户授权,有用户的跳过
grant all privileges on blog.* to 'blog'@'%';
#修改密码
ALTER USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘new_password‘;
# 刷新
flush privileges;
注意:docker启动php-fpm,ip地址不是固定的,因此mysql需要将user表中host自动设置为%或者能访问到的地址
常用的docker语句
- 启动容器
#在后台运行
docker-compose -f 你的yml文件 up -d
#在前台运行,调试时常用
docker-compose -f 你的yml文件 up
#停止docker
docker-compose -f 你的yml文件 down
#重启
docker-compose -f 你的yml文件 restart
#查看所以容器
docker ps -a
# 进入容器
docker exec -it 容器id或容器名称 bash
# 从容器中拷贝文件、文件夹到宿主机,通常用于自定一设置时,将文件拷出修改后再挂到容器中
docker cp 容器id或容器名称:路径/文件名称 宿主机路径/文件名
相关文章:
docker搭建LNMP
docker安装 略 下载镜像 nginx:最新版php-fpm:根据自己需求而定mysql:根据自己需求定 以下是我搭建LNMP使用的镜像版本 rootVM-12-16-ubuntu:/docker/lnmp/php/etc# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8.0…...
未出现过的最小正整数
给定一个长度为 n 的整数数组,请你找出未在数组中出现过的最小正整数。 样例 输入1:[-5, 3, 2, 3]输出1:1输入2:[1, 2, 3]输出2:4数据范围 1≤n≤105 , 数组中元素的取值范围 [−109,109]。 代码: c…...
易服客工作室:WordPress是什么?初学者的解释
目录 什么是WordPress? WordPress可以制作什么类型的网站? 谁制作了WordPress?它已经存在多久了? 谁使用 WordPress? 白宫网站 微软 滚石乐队 为什么要使用 WordPress? WordPress 是免费且…...
2019年9月全国计算机等级考试真题(C语言二级)
2019年9月全国计算机等级考试真题(C语言二级) 第1题 1、“商品”与“顾客”两个实体集之间的联系一般是 A. 一对一 B. 一对多 C. 多对一 D. 多对多 正确答案:D 第2题 定义学生选修课程的关系模式:SC(S#,…...
LLaMA模型泄露 Meta成最大受益者
一份被意外泄露的谷歌内部文件,将Meta的LLaMA大模型“非故意开源”事件再次推到大众面前。“泄密文件”的作者据悉是谷歌内部的一位研究员,他大胆指出,开源力量正在填平OpenAI与谷歌等大模型巨头们数年来筑起的护城河,而最大的受益…...
企业中商业智能BI,常见的工具和技术
商业智能(Business Intelligence,简称BI)数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据,从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…...
item_password-获得淘口令真实url
一、接口参数说明: item_password-获得淘口令真实url ,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_password 名称类型必须描述keyString是调用key(…...
基于SOLIDWORKS配置功能建立塑料模具标准件库
在塑料模具的设计过程中,建立其三维模型对于后续进行CAE分析和CAM加工是非常重要的。除了型腔和型芯以外,塑料模具中的标准件很多,如推杆、导柱、导套、推板、限位钉等,这些对于不同的产品是需要反复调用的。目前,我国…...
1.物联网LWIP网络,TCP/IP协议簇
一。TCP/IP协议簇 1.应用层:FTP,HTTP,Telent,DNS,RIP 2.传输层:TCP,UDP 3.网络层:IPV4,IPV6,OSPF,EIGRP 4.数据链路层:Ethernet&#…...
拷贝公钥文件后,ssh 服务器仍提示输入密码
我们因为工作需要,可能在本地包含多个公私钥对,且每个公私钥对在生成时,指定的邮箱也不相同,所以我们在登录一些机器时,会指定不同的公钥文件,但是,有时候就算我们指定了正确的公钥文件…...
算法|Day45 动态规划13
LeetCode 300.最长递增子序列 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除&…...
基于随机森林的手写体数字识别,基于RF的手写体数字识别,基于RF的MNIST数据集分类识别
目录 背影 摘要 随机森林的基本定义 随机森林实现的步骤 基于随机森林的MNIST数据集分类识别 代码下载链接: 随机森林的手写体数字分类识别,随机森林的MNIST手写体数据集分类识别,卷积神经网络的手写体数字识别(代码完整,数据完整)资源-CSDN文库 https://download.csdn.n…...
vite初始化vue3项目(配置自动格式化工具与git提交规范工具)
初始化项目 vite构建vue项目还是比较简单的,简单配置选择一下就行了 初始化命令 npm init vuelatest初始化最新版本vue项目 2. 基本选项含义 Add TypeScript 是否添加TSADD JSX是否支持JSXADD Vue Router是否添加Vue Router路由管理工具ADD Pinia 是否添加pinia…...
leetcode473. 火柴拼正方形(回溯算法-java)
火柴拼正方形 leetcode473 火柴拼正方形题目描述回溯算法 上期经典算法 leetcode473 火柴拼正方形 难度 - 中等 原题链接 - leetcode473 火柴拼正方形 题目描述 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍…...
git-fatal: No url found for submodule path ‘packages/libary‘ in .gitmodules
文章目录 前言一、git submodule功能使用二、错误信息:三、解决方法:四、.gitmodules配置文件:总结 前言 最近在做vue项目,因为项目比较复杂,把功能拆分成很多子模块,我们使用Git的submodule功能。遇到错误…...
Android开发之性能优化:过渡绘制解决方案
1. 过渡绘制 屏幕上某一像素点在一帧中被重复绘制多次,就是过渡绘制。 下图中多个卡片跌在一起,但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是Android系统在绘制时会将下层的卡片进行绘制,接着再将上层的卡片进行绘制。但其…...
Wireshark 抓包过滤命令汇总
Wireshark 抓包过滤命令汇总 Wireshark 是一个强大的网络分析工具,它可以帮助网络管理员和安全专家监控和分析网络流量。通过捕获网络数据包,Wireshark 能够帮助我们识别网络中的问题、瓶颈以及潜在的安全威胁。在使用 Wireshark 进行网络数据包分析时&…...
配资平台app(正规股票配资软件)架构是怎么搭建的?
随着股票市场的发展,越来越多的投资者开始尝试使用股票配资平台进行杠杆炒股,因此,搭建一套稳定、可靠的配资平台app架构显得尤为重要。本文将介绍配资平台app架构设计的关键要素,以及建立一个正规的配资平台app所需考虑的问题。 …...
【实用黑科技】如何 把b站的缓存视频弄到本地——数据恢复软件WinHex 和 音视频转码程序FFmpeg
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:效率…...
神经网络基础-神经网络补充概念-57-多任务学习
概念 多任务学习(Multi-Task Learning,MTL)是一种机器学习方法,旨在同时学习多个相关任务,通过共享特征表示来提高模型的性能。在多任务学习中,不同任务之间可以是相关的,共享的,或…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
