1. 前言

1.1 Docker适合什么类型的项目?

Docker存在的意义是解决项目移植时兼容的问题。
好吧,那么Docker是否对于任何项目都合适呢?
就我目前的体验而言,使用Docker做负载均衡是比较合适的,用Docker装载静态的,较小的项目也是合适的。
如果是想用Docker装载一个大型项目,个人感觉不太合适。这个理论有待后期使用的时候再慢慢探索。

1.2 PHP+MySQL项目部署在Docker的几种思路。

1.2.1 使用tomsik68/xampp

这也是本文要重点探讨的,详情见后面内容。

1.2.2 使用httpd然后再自行安装mysql和php

我会单独写一篇文章记录这个方法。

1.2.3 使用pch18/baota

这种方法是将宝塔软件放在Docker里面。我也会单独写一篇文章记录这个方法。但是这种方法我认为有个致命的问题,就是pch18/baota镜像文件太大了,要5G。你没看错,要5G。所以这种方案的可行性非常值得商榷,因为这很明显违背了Docker存在的意义。

2. 安装部署tomsik68/xampp

下面的内容参考:https://hub.docker.com/r/tomsik68/xampp

2.1 拉取镜像

docker pull tomsik68/xampp

2.2 为宿主机创建mysql数据卷

docker volume create mysql

上述命令的mysql名称任意,为了方便识别用的mysql。

2.3 运行容器

宿主机bind mount网页文件的位置:/opt/www
宿主机映射端口地址:41062
mysql目录不能使用文件夹bind mounts的形式,以下方法执行后会因为权限问题报错。

docker run --name myXampp -p 41061:22 -p 41062:80 -it -v /opt/www:/www -v /opt/mysql:/opt/lampp/var/mysql tomsik68/xampp

必须使用下方数据卷的方法:

docker run --name myXampp -p 41061:22 -p 41062:80 -it -v /opt/www:/www -v mysql:/opt/lampp/var/mysql tomsik68/xampp

2.4 测试运行

在/opt/www 中新建index.php文件,写入如下代码:

<?php
echo "hello world";
echo 1+3;
?>

然后在浏览器中打开地址:http://宿主机IP地址或域名:41062/www/index.php
如果看到hello world4,证明容器运行成功了!
如果运行不成功,可能是因为宿主机防火墙问题,或者关闭防火墙,或者放行41062端口即可。

2.5 进入容器查看

如果想要查看容器内部情况,使用以下命令:

docker exec -it myXampp bash

3. 导入一个PHP+MYSQL网站

我们就以安装一个“帝国CMS”为例演示网站导入过程。

3.1 下载解压安装包。

进入/opt/www目录后下载安装包

wget http://ecms.phome.net/downcenter/empirecms/ecms75/download/EmpireCMS_7.5_SC_UTF8.zip

解压

unzip EmpireCMS_7.5_SC_UTF8.zip

为了方便我把解压后的upload文件夹重名名为了ecms

mv upload ecms

3.2 更改文件夹权限

如果不更改,安装时会提示权限不足。

chmod 777 -R ecms

3.3 完成安装

http://宿主机IP地址或域名:41062/www/ecms/e/install/

按步骤提示完成安装即可。
注:安装时使用xampp默认的mysql用户名:root,密码是空。

4. 数据持久化问题

A. 对于一个web站点,有两部分数据需要持久化:数据库+网页代码。
B. 在tomsik68/xampp给出的官方文档中,run命令是这样写的:

docker run --name myXampp -p 41061:22 -p 41062:80 -d -v /opt/www:/www tomsik68/xampp

上面的命令只实现了网页文件的持久化,没有实现数据库持久化。这样的问题就是每当服务器重启的时候,数据库数据就会丢失。
C. 为了解决数据库持久化的问题,在2.3中我将命令修改为以下形式:

docker run --name myXampp -p 41061:22 -p 41062:80 -it -v /opt/www:/www -v mysql:/opt/lampp/var/mysql tomsik68/xampp

这样,即便服务器重启,只需要使用以下命令就可以重新恢复网站:

docker start myXampp

发表评论

电子邮件地址不会被公开。 必填项已用*标注