Docker分离部署LNMP
发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,一、准备环境关于docker的安装可以参考Docker简介及安装配置详解这里就不做介绍了!案例需求:(1)各个容器需要实现数据持久化;(2)为容器分配固定的IP地址,防止容器重建后,IP地址发生变化,
千家信息网最后更新 2024年09月23日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安全错误
数据库的锁怎样保障安全
关于网络安全的手抄报字
软件开发 ios
数据库中文本换行
身边的网络安全故事征文高中
英国数据库公司
宇视流媒体服务器的默认ip
商场网络安全承建方
福建百惠网络技术有限公司
福建公司软件开发
东阳吴宁金曌软件开发工作室
镇江运营网络技术包括什么
普通人怎么自学软件开发
备份附加数据库sql
成都服务器安全检测
一个网页多服务器
电脑运行数据库要求
2012服务器光盘安装教程
华为服务器默认管理密码
java实现服务器控制多个视频
网络安全测评方案审核
能不能用手机建一个数据库
数据库字段存放照片的数据类型
常德市网络安全知识有奖竞答
专业app软件开发公司排名
浙江企业软件开发服务优化
苹果登陆腾讯云服务器
单选框男女往数据库
首席网络安全官待遇
雨佳服务器
模糊更新时间数据库