'docker 部署PHP网页'
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';
然后再次访问: