Docker分离部署LNMP
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,一、准备环境关于docker的安装可以参考Docker简介及安装配置详解这里就不做介绍了!案例需求:(1)各个容器需要实现数据持久化;(2)为容器分配固定的IP地址,防止容器重建后,IP地址发生变化,
千家信息网最后更新 2026年11月03日Docker分离部署LNMP
一、准备环境
关于docker的安装可以参考Docker简介及安装配置详解这里就不做介绍了!
案例需求:
(1)各个容器需要实现数据持久化;
(2)为容器分配固定的IP地址,防止容器重建后,IP地址发生变化,带来不必要的麻烦;
案例环境:
在一台docker 主机上安装即可!预设环境如图:
二、案例实施
(1)创建网卡,解决固定IP地址
[root@docker ~]# docker network create -d bridge --subnet 200.0.0.0/24 --gateway 200.0.0.1 lnmp//创建网卡lnmp,指定网段200.0.0.0/24(2)解决nginx容器中的目录问题
[root@docker ~]# docker run -itd --name test nginx //随便运行一个容器,以便生成nginx中所需的配置文件[root@docker ~]# mkdir /data /wwwroot//创建目录用于挂载nginx容器的相关目录[root@docker ~]# docker cp test:/etc/nginx /data//将nginx容器中的nginx主目录复制到本地[root@docker ~]# docker cp test:/usr/share/nginx/html /wwwroot//将nginx容器中的网页根目录复制到本地(3)运行Nginx容器测试
[root@docker ~]# docker run -itd --name nginx -v /data/nginx:/etc/nginx -v/wwwroot/html:/usr/share/nginx/html -p 80:80 --network lnmp --ip 200.0.0.10 nginx:latest//运行一个名为nginx的容器,挂载相应的目录,并映射端口、指定IP地址[root@docker ~]# echo "hello world" > /wwwroot/html/index.html [root@docker ~]# curl 127.0.0.1hello world//测试nginx网页根目录没有问题(4)运行mysql容器
[root@docker ~]# docker run -itd --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 --network lnmp --ip 200.0.0.20 mysql:5.7//运行一个名为mysql的容器,并指定映射端口及IP地址//使用"-e"选项来配置容器中的环境变量,相当于dockerfile中的ENV[root@docker ~]# yum -y install mysql //本地下载mysql客户端工具进行测试[root@docker ~]# mysql -u root -p123456 -h 127.0.0.1 -P 3306MySQL [(none)]> create database lzj;//登录到数据库并创建数据库进行测试(5)运行PHP容器
[root@docker ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 200.0.0.30 php:7.2-fpm//运行一个名为phpfpm的容器,并映射端口,挂载相应的目录,指定IP地址//看挂载的目录跟nginx主目录一样,是因为需要修改nginx容器的配置文件[root@docker ~]# echo "> /wwwroot/html/test.php[root@docker ~]# echo "phpinfo();" >> /wwwroot/html/test.php[root@docker ~]# echo "?>" >> /wwwroot/html/test.php //创建nginx与php连接测试的页面(6)编辑Nginx的配置文件,使Nginx可以和php进行连接
[root@docker ~]# vim /data/nginx/conf.d/default.conf 8 location / { 9 root /usr/share/nginx/html; 10 index index.php index.html index.htm; //添加index.php 11 } 30 location ~ \.php$ { 31 root /usr/share/nginx/html; //修改其网页根目录位置 32 fastcgi_pass 200.0.0.30:9000; //更改为PHP容器的IP地址 33 fastcgi_index index.php; 34 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //添加$document_root变量 35 include fastcgi_params; 36 } [root@docker ~]# docker restart nginx //重新启动nginx容器 [root@docker ~]# docker ps | grep nginx //确保nginx容器是正常运行的e000ccd5c883 nginx:latest "nginx -g 'daemon of…" 27 minutes ago Up 31 seconds 0.0.0.0:80->80/tcp nginx访问测试:
(7)测试PHP容器与Mysql容器的协调性
我们采用phpMyadmin这个数据库管理工具。
下载phpMyadmin:
[root@docker ~]# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip[root@docker ~]# unzip phpMyAdmin-4.9.1-all-languages.zip [root@docker ~]# mv phpMyAdmin-4.9.1-all-languages /wwwroot/html/phpmyadmin//将其移动到网页根目录下,并进行改名[root@docker ~]# vim /data/nginx/conf.d/default.conf…………………… //省略部分内容,添加以下内容 location /phpmyadmin { root /usr/share/nginx/html; index index.html index.htm index.php;} location ~ /phpmyadmin/(?(.*)\.(php|php5)?$) { root /usr/share/nginx/html; fastcgi_pass 200.0.0.30:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } [root@docker ~]# docker restart nginx //重新启动nginx容器[root@docker ~]# docker ps | grep nginx 确保nginx容器正常运行e000ccd5c883 nginx:latest "nginx -g 'daemon of…" About an hour ago Up 9 seconds 0.0.0.0:80->80/tcp nginx 访问测试:
报错就是因为在正常编译安装PHP时,都需要增加"--with-mysql..."等一些相关选项,看到这个页面,很显然,我们运行的这个PHP容器并没有增加关于数据库的选项。
(8)解决PHP容器不支持关联Mysql数据库
登录Docker官网,如图:
既然已经在Docker官网上看到了答案,接下里基于原本的php镜像编写Dockerfile,生成新的镜像使其支持这个功能!
[root@docker ~]# vim DockerfileFROM php:7.2-fpmRUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install mysqli pdo pdo_mysql //添加这行内容,使其支持连接mysql的功能[root@docker ~]# docker build -t phpmysql .//根据Dockerfile文件生成新的镜像[root@docker ~]# docker rm phpfpm -f//将原本的phpfpm容器进行删除[root@docker ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 200.0.0.30 phpmysql//还是原本创建phpfpm容器的命令,只是将镜像更换为刚才制作的镜像了[root@docker ~]# cd /wwwroot/html/phpmyadmin/[root@docker phpmyadmin]# mv config.sample.inc.php config.inc.php [root@docker phpmyadmin]# vim config.inc.php //编写php的配置文件 31 $cfg['Servers'][$i]['host'] = '200.0.0.20';//更改其为mysql容器的IP地址[root@docker ~]# docker restart phpfpm //重新启动php容器[root@docker ~]# docker ps | grep phpfpm //确保php容器运行正常367e73bc70bd phpmysql "docker-php-entrypoi…" 6 minutes ago Up 10 seconds 0.0.0.0:9000->9000/tcp phpfpm访问测试:
------本篇博文到此结束,感谢阅读------------
容器
运行
测试
地址
目录
数据
配置
数据库
文件
镜像
根目录
环境
网页
内容
原本
案例
端口
支持
生成
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技保险
互联网通讯科技
圆梦互联网科技
礼当家互联网科技
互联网与未来科技
互联网科技排名
奔汉互联网科技
天下捷融互联网科技
互联网科技公司做什么
联恩商钥互联网科技有限公司
科技赋能互联网健康
互联网汽车科技小镇
互联网科技博主是什么意思
福建科技产业互联网发展
浙江互联网科技研学营
崇明区互联网教育科技诚信经营
深圳市优智互联网科技有限公司
昆明中奇联合互联网科技
萌小萌互联网科技河南有限公司
杭州融税互联网科技有限公司
科技互联网
互联网科技股
互联网佳科技有限公司
A股互联网金融科技公司
科技互联网公司装修
唐信互联网科技 大连
国外互联网科技网站
湖南诚度互联网科技有限公司
宁夏科技产业互联网案例
互联网的黑科技实验室