docker 部署PHP网页

准备好两个镜像


然后创建两个容器:

docker  run --name="apachedemo"  -p 80:80   -d  nimmis/apache-php5

docker run --name mysqldemo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest

docker ps 查看两个容器的状态,如果docker ps 没有说明容器没有起来。

docker ps 默认查看的是正在运行的容器。

然后在游览器输入docker 宿主机的ip;docker 安装环境的ip;

(比如:虚拟机里面安装Linux,Linux里面安装docker ,你要访问网页应该输入Linux的ip);

出现如下界面,则表示Apache服务安装没有问题。

​ 在Linux上新建一个PHP 文件,这里我命名为 demo.php

输入一下内容。

ip地址根据自己的ip修改。

<?php
header("Content-Type: text/html;charset=utf-8");
echo "<h1>Results  from database</h1>";
$servername = "192.168.43.227";
$username = "root";
$password = "password";
$dbname = "book";
 
$conn = mysqli_connect('192.168.10.9','root','root') or die("error:" .mysqli_connect_error());
mysqli_select_db($conn,'book');
 
$sql = "SELECT *  FROM student";
$result = mysqli_query($conn,$sql);
    while($row = mysqli_fetch_array($result)) {
        echo "<h2>";
	echo $row['name']. "<br/>";
	echo "</h2>";
    }
?>

第一次访问可能会出现一下的错误:

这是因为mysql 没有开启远程登录权限。

我们进入mysql容器修改相应的权限。

docker exec -it 1ed50ef86354  /bin/bash

docker exec -it 加容器ID或者容器名字可以进入docker容器内。

exit 退出容器。

mysql -uroot -ppassword 登录mysql

use mysql;
SELECT User, Host FROM user;
update user set host = '%' where user = 'root';
 flush privileges;

顺便再创建一个表

create   database  book;

use book;

create  table  student (id int ,name varchar(20));

insert into student values(1,'Joy'),(2,'Tom'),(3,'James');

再次访问会出现如下错误:

Server sent charset unknown to the client. Please, report to the developers

这是因为mysql最新版的字符默认字符编码 utf8mb4,所以我们要设置MySQL的默认字符集为老版本的utf8

还是在mysql容器内执行

mysql --help | grep my.cnf


查看mysql配置文件的路径那。

我安装的mysql-service精简到了连vi和vim也没有,所以需要自己手动安装。用yum安装就好了。由于没有配置yum源所以会很慢。

修改/etc/my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
default_authentication_plugin=mysql_native_password

修改配置文件后重启一下mysql 服务。

退出到Linux 系统,执行docker restart mysqldemo

再次进入游览器,报错 The server requested authentication method unknown to the client。

是由于用户身份认证的加密方式不兼容导致的,mysql8.0中默认方式为caching_sha2_password,引起老版本兼容性问题,老版本加密方式为mysql_native_password

mysql -uroot -p
 
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

我们这里修改为

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

然后再次访问: