环境准备:
在一台主机上部署lnmp,基于多个容器:
nginx服务:172.16.10.10
mysql服务:172.16.10.20
php服务:172.16.10.30
解决容器固定ip地址问题:
注意:因为当容器停止时或者将容器删除,再次运行相同的容器,它的ip地址不再时原来的地址,所以我们需要自定义一个网段,来指定容器的ip地址。
项目操作:
(1) 首先自定义一个网络:
1 |
[root@sqm-docker01 ~] # docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 mynet1 |
(2)下载nginx,php:fpm,mysql-5.7镜像:
1
2
3 |
[root@sqm-docker01 ~] # docker pull nginx
[root@sqm-docker01 ~] # docker pull php:7.2-fpm <!--使用的是php:7.2-fpm的镜像-->
[root@sqm-docker01 ~] # docker pull mysql:5.7 <!--使用的是mysql:5.7的镜像--> |
(3)####运行一个基于nginx镜像的容器#####
#先将nginx服务运行,以拷贝出nginx的配置文件:
参数解释:
- run :创建一个新的容器
- -d:后台运行
- –name:自定义名称为test1
在宿主机创建需要挂载文件的目录:
网站主目录:/wwwroot;
nginx的配置文件:/docker;
1
2 |
[root@sqm-docker01 ~] # mkdir /wwwroot
[root@sqm-docker01 ~] # mkdir /docker |
##使用docker cp命令将nginx存放配置文件的目录拷贝到本机,
注意:docker cp命令可以将宿主机上的文件拷贝到容器中,也可以反向拷贝,将容器中的文件或目录拷贝到本机
[root@sqm-docker01 ~]# docker cp test1:/etc/nginx /docker/ #使用docker cp将nginx存放配置文件的目录拷贝到宿主机。
1
2
3 |
[root@sqm-docker01 ~] # ls /docker/nginx/conf.d/
default.conf |
#注意:需要修改的是nginx conf.d目录下的default.conf文件,而不是nginx.conf 文件。
拷贝nginx网页目录:
1
2
3 |
[root@sqm-docker01 ~] # docker cp test1:/usr/share/nginx/html /wwwroot/
[root@sqm-docker01 ~] # ls /wwwroot/html/
50x.html index.html |
修改nginx默认的测试网页:
1 |
[root@sqm-docker01 html] # echo "<h1>hello welcome to nginx web</h1>" > index.html |
(4)运行nginx容器:
分别将容器中目录挂载到本地目录,并且指定ip地址
1 |
[root@sqm-docker01 ~] # docker run -itd --name nginx --network my_net1 --ip 172.16.10.10 -p 80:80 -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html nginx:latest |
参数解释:
- run:运行一个容器
- -itd: i:可交互
- t:伪终端
- d:保持容器后台运行
- –network :基于哪张网卡创建网络
- –ip: 定义容器的ip地址
- -v = –volume 数据卷,进行一个挂载
- 挂载格式: 宿主机:容器内
- p:映射端口,宿主机端口:容器内端口
(5)运行mysql容器:
1 |
[root@sqm-docker01 ~] # docker run --name mysql -e mysql_root_password=123.com -d -p 3306:3306 --network my_net1 --ip 172.16.10.20 mysql:5.7 |
-e就是设置容器里的环境变量,我们设置了mysql的密码环境变量,这个变量会传入容器里面来设置mysql的密码
在本机测试root用户是否能够登录mysql:
首先需要下载mysql客户端:
1 |
[root@sqm-docker01 ~] # yum -y install mysql |
(6)运行php容器:
1 |
[root@sqm-docker01 ~] # docker run -itd -p 9000:9000 --name phpfpm -v /wwwroot/html:/usr/share/nginx/html --network my_net1 --ip 172.16.10.30 php:7.2-fpm |
注意:
保证nginx和php共享一个存放网页的目录,php创建和nginx相同的默认网页根目录(-v挂载时,如果容器中没有该目录,将会自动创建)。
(7)配置nginx和php-fpm:
我们要对php解析nginx进行一个配置:
创建一个简单的测试网页:
接下来需要修改nginx配置文件:
1 |
[root@sqm-docker01 html] # vim /docker/nginx/conf.d/default.conf |
(8)配置mysql:
搭建phpmyadmin:
phpmyadmin 是一个以php为基础,以web-base方式架构在网站主机上的mysql的数据库管理工具,让管理者可用web接口管理mysql数据库。借由此web接口可以成为一个简易方式输入繁杂sql语法的较佳途径,尤其要处理大量数据的导入及导出更为方便。其中一个更大的优势在于由于phpmyadmin跟其他php程序一样在网页服务器上运行,但是您可以在任何地方使用这些程序产生的html页面,也就是于远程管理mysql数据库,方便的创建、修改、删除数据库及数据表.
1
2 |
[root@sqm-docker01 html] # pwd
/wwwroot/html |
解压到当前目录:
1 |
[root@sqm-docker01 html] # unzip phpmyadmin-4.9.1-all-languages.zip |
重命名:
1 |
[root@sqm-docker01 html] # mv phpmyadmin-4.9.1-all-languages phpmyadmin |
修改nginx配置文件–配置与phpmyadmin连接:
1 |
[root@sqm-docker01 html] # vim /docker/nginx/conf.d/default.conf |
将原先的location配置项进行拷贝,再添加以下两个location配置段。
修改完nginx配置文件,重启nginx:
访问测试网页:
已经将容器中的端口映射到了宿主机上,所以直接访问宿主机地址:172.16.1.30
访问php解析nginx网页:
接下来测试登陆 phpmyadmin:
访问url:http://172.16.1.30/phpmyadmin/index.php
缺少mysqli模块,所以无法访问,所以需要添加php支持mysql配置模块:
怎样针对容器进行添加扩展模块,我们可以登陆dockerhub进行查询相关文档:
链接路径:https://hub.docker.com/
复制以上dockerfile脚本,到本地进行安装:
注意还需添加部分内容:
1 |
[root@sqm-docker01 ~] # vim dockerfile |
1
2
3
4
5
6
7
8
9 |
from php:7.2-fpm
run 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 |
进行构建dockerfile:
1 |
[root@sqm-docker01 ~] # docker build -t phpfpm-mysqli . |
参数解释:
- build:进行构建
- -t :指定标签
- . 表示当前目录下的dockerfile
构建完成后,将原有的php镜像删除,运行刚刚过构建成功的支持mysqli模块的镜像:
1
2
3
4 |
[root@sqm-docker01 ~] # docker stop phpfpm
phpfpm
[root@sqm-docker01 ~] # docker rm phpfpm
phpfpm |
1
2
3 |
[root@sqm-docker01 ~] # docker run --name phpfpm -d -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network my_net1 --ip 172.16.10.30 phpfpm-mysqli:latest
#镜像指定刚刚构建dockerfile生成的镜像名。 |
修改 phpmyadmin默认的sample(样例文件):
想要配置文件将其使用,必须进行重命名,将sample去掉。
1
2
3 |
[root@sqm-docker01 phpmyadmin] # pwd
/wwwroot/html/phpmyadmin
[root@sqm-docker01 phpmyadmin] # cp config.sample.inc.php config.inc.php |
对配置文件进行修改:
1 |
[root@sqm-docker01 phpmyadmin] # vim config.inc.php |
修改完配置文件重启php:
1
2 |
[root@sqm-docker01 phpmyadmin] # docker restart phpfpm
phpfpm |
访问phpmyadmin网页:
输入url:http://172.16.1.30/phpmyadmin/index.php
#用户名和密码,是数据库的登陆密码
成功访问到mysql数据库。。。。。。
至此在docker中多容器之间部署lnmp搭建完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。
原文链接:https://blog.51cto.com/13972012/2445556
相关文章
- 利用FTP和计划任务自动备份网站数据和数据库 2025-05-27
- 服务器技术之硬件冗余技术 2025-05-27
- 服务器是租用还是服务器托管好? 2025-05-27
- 什么是DNS以及它如何影响服务器? 2025-05-27
- 刀片服务器与机架服务器的区别介绍 2025-05-27
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-27 36
-
2025-05-26 26
-
2025-05-27 104
-
2025-05-27 98
-
2025-05-27 18