docker - 多容器搭建LAMP服务器环境

声明

1、docker是容器化技术

2、LAMP架构只的是 linux+apache+php+mysql 搭建的一套服务器环境,本文内容是基于linux环境搭建的docker容器,所以实际需要部署的apache容器+php容器+mysql容器

3、本文的docker容器的宿主机的基于vmware 搭建的一台 linux 虚拟主机,系统为centos7

概述

使用多容器技术搭建环境的好处

  • 环境隔离,互不干扰。
  • 搭建方便,节约资源。
    比如,我要在我的主机上搭建两套网站,其中一套环境只支持php5.5,另外一套环境只支持php7.1。传统环境部署方案需要重新虚拟两台主机。每台主机上都需要部署apache+php+mysql。搭建复杂,资源浪费严重。
    使用docker容器化技术,只需要创建一个php5.5的容器和一个php7.1的容器就可以解决。

docker多容器+LAMP的架构图

docker多容器+LAMP的架构图
从图中可以看出php容器与mysql容器有数据交互,即在docker容器中表现为容器之间的互联(link)。apache与php容器之间有链接(link)。mysql与apache之间没有数据直接交互。所以在创建容器时的思路是,先创建mysql容器,再创建php容器,link上mysql容。最后在创建apache容器,link上php容器。

docker镜像下载

在docker中,容器时通过镜像创建的,所以在创建容器之前需要下载相应的镜像。镜像下载可以通过官方镜像仓库下载,也可以通过国内的一下镜像源下载,或者通过 https://hub.daocloud.io 这个网站进行下载。

方式一:官方镜像仓库下载

通过docker search搜索到相应的镜像资源
docker search mysql
在这里插入图片描述
再通过 docker pull 拉取镜像
docker pull mysql:5.6
在这里插入图片描述

方式二:配置国内镜像源

详见

https://blog.csdn.net/u012081441/article/details/104553145

方式三:通过 https://hub.daocloud.io 网站下载

在这里插入图片描述
搜索出镜像之后,点击版本,选择想要的版本,复制拉取命令。
在这里插入图片描述
将拉取命令粘贴到docker pull之后即可下载镜像

docker pull daocloud.io/library/mysql:5.7.5-m15


镜像下载完成之后,可以通过 docker image 进行查看下载的镜像
在这里插入图片描述
镜像下载完成之后,便可以创建容器

第一步:搭建mysql容器

创建mysql容器

docker run -di -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql5.7 daocloud.io/library/mysql:5.7.31 

在这里插入图片描述
参数说明

  • -di 表示运行一个守护式的容器
  • -p 表示端口映射,mysql的默认端口是3306。前面的3306表示的宿主机的端口,后面的3306表示的容器的端口号。
  • -e 设置mysql的登录用户与密码,MYSQL_ROOT_PASSWORD=123456 设置mysql的root用户的密码为123456
  • – name 为创建的容器命名

容器创建号之后,可以使用 docker ps 查看正在运行的容器,使用docker ps -a查看所有容器
在这里插入图片描述

配置mysql

开启远程访问权限

进入mysql容器 docker exec -it mysql5.7 /bin/bash
登录mysql 数据库 mysql -uroot -p123456
然后输入以下代码 ,注意分号

use mysql;
select host,user from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root账户密码';
flush privileges;

在这里插入图片描述

测试mysql

方式一:登录mysql容器测试

进入mysql容器
docker exec -it mysql5.7 /bin/bash

登录mysql数据库
mysql -uroot -p123456

在这里插入图片描述

方式二:通过Navicat进行连接测试
成

第二步:搭建php容器

php容器是基于 php-5.5.28-fpm版本创建的镜像

docker run -di -v /var/www/html/:/var/www/html --link mysql5.7 -p 9000:9000 --name php5.5-mysql5.7 daocloud.io/library/php:5.5.28-fpm

参数说明:

  • docker run : 创建容器的命令
  • -di :让容器以守护式进程的方式运行
  • -v : 文件目录映射,前面的是宿主机的目录,后面的是容器的目录。
  • /var/www/html 用来部署网站的目录
  • – link mysql5.7 : 关联刚刚创建的mysql5.7的容器
  • -p 9000:9000 : 端口映射,php应用服务的默认端口是9000。前面的是宿主机的端口,后面的是php容器的端口。
  • –name php5.5-mysql5.7 : 为创建的容器命名
    在这里插入图片描述

配置php

安装mysql扩展

进入php容器中
docker exec -it php5.5-mysql5.7 /bin/bash
安装扩展pdo_mysql
docker-php-ext-install pdo_mysql
安装扩展mysql
docker-php-ext-install mysql
安装扩展mysqli
docker-php-ext-install mysqli
安装扩展pdo
docker-php-ext-install pdo

测试 php 服务器

(1)测试php容器是否搭建成功

在映射的目录/var/www/html 下面创建一个index.php文件。文件内容:

<?php
Phpinfo();
?>

然后进入到容器之中docker exec -it php5.5-mysql5.7 /bin/bash ,执行php -f index.php,返回php的一些版本信息,表示创建成功。
在这里插入图片描述

(2)测试php容器与mysql容器是否联通

在映射的目录/var/www/html 下面创建一个testmysql.php文件。文件内容如下:

<?php
$servername = "mysql5.7";
$username = "root";
$password = "123456";

try {
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    echo "sucess\n";
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

然后进入到容器之中docker exec -it php5.5-mysql5.7 /bin/bash ,执行php -f testmysql.php,如果成功将返回 sucess,如果不成功,参照上面 配置php中的安装mysql扩展,安装扩展之后,在进行测试
在这里插入图片描述

第三步:搭建apache容器

apache服务的应用是httpd,默认端口是80。所以我们的apache服务时基于httpd-2.4.12 版本镜像创建的

docker run -di -v /var/www/html/:/usr/local/apache2/htdocs --link php5.5-mysql5.7 -p 80:80 --name httpd2.4-php5.5 daocloud.io/library/httpd:2.4.12

参数说明:

  • /var/www/html/:/usr/local/apache2/htdocs :httpd容器的工作路径是 /usr/local/apache2/htdocs

配置httpd服务器

当httpd容器创建好之后,就可以使用浏览器访问网站
在这里插入图片描述
但我们发现,现在的浏览器并不能解析php代码,原因是httpd和php服务之间的一些配置还没配好

httpd和php之间的配置

httpd的配置文件为 /usr/local/apache2/conf/httpd.conf ,在容器之中不能使用vi命令,可以使用docker cp 8c0f7db1f140:/usr/local/apache2/conf/httpd.conf ./ 将配置文件拷贝到宿主机上,修改完成之后,在使用docker cp httpd.conf 8c0f7db1f140:/usr/local/apache2/conf/ 将文件拷贝回去替换。其中8c0f7db1f140为容器的ID

1、先在httpd.conf中找到下面代码,发现httpd默认只解析html代码。所以加上 index.php

修改前:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

修改后:

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

2、在httpd.conf文件的最后面添加上下面代码

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName localhost
    <Directory "/usr/local/apache2/htdocs">
     Options None
     Require all granted
    </Directory>
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://172.17.0.3:9000/var/www/html/$1
</VirtualHost>

其中 fcgi://172.17.0.3:9000/var/www/html/$1 中的 ip为php容器在局域网中实际的ip,可以通过 docker network inspect bridge 进行查看,/var/www/html/ 为php服务的工作路径,$1为传递的参数,即浏览器中输入地址为 http://192.168.36.144/index.php。Ip之后要跟上工作的文件或路径。
在这里插入图片描述
3、 httpd.conf 文中,将下面是三个的前面的#号去掉

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

在这里插入图片描述
将httpd.conf复制回容器/usr/local/apache2/conf/中之后,重启httpd服务。然后在测试一下httpd与php直接的通信

测试httpd

测试httpd与php之间的通信

在浏览器中测试前面编写的 index.php脚本,返回php的信息
在这里插入图片描述

测试httpd与php与mysql之间的通信

运行之前写的php测试mysql连通性的脚本 testmysql.php,返回 sucess。
在这里插入图片描述
至此,多容器搭建lamp环境搭建完成,可以部署自己的测试网站玩玩。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值