Docker分离部署LNMP
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,一、准备环境关于docker的安装可以参考Docker简介及安装配置详解这里就不做介绍了!案例需求:(1)各个容器需要实现数据持久化;(2)为容器分配固定的IP地址,防止容器重建后,IP地址发生变化,
千家信息网最后更新 2025年02月02日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安全错误
数据库的锁怎样保障安全
my sql数据库菜鸟教程
网络安全宣传活动月总结
怎么选择商务服务器
清远数字软件开发
安卓软件开发工具包下载
网络安全传输策略研究论文
体育系统网络安全监测预警机制
亚马逊云服务器怎么查ip
江苏软件开发过程检测中心
h2内存数据库 查询
手机软件开发常用语言
关于药学专业的软件开发
北京蚂蚁学网络技术中心
树形数据库sql
腾讯云 软件开发公司吗
数据库迁移性能评估
orcl建表超过数据库长度
米家智能家居有服务器吗
沧州盘古网络技术有限公司征信
在日本无服务器
计算机网络技术支持的岗位
三级网络技术有如何学
公司网关和dns服务器
计算机三级网络技术高频
跟你学软件开发
梦幻最新服务器
著作权不明确的软件开发税率
天猫七猫小说怎么回事服务器异常
浙江项目软件开发定做
支付宝后台服务器怎么找