如何安装docker就不做多说了,请自行百度
注意本文档实在虚拟机中操作的,虚拟机ip为
192.168.172.131
docker安装mysql并启动
请参考:docker安装mysql
$ docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-e 设置环境变量,这里设置mysql的root用户的初始密码
-name 容器的名称、只要求唯一性
docker安装php
- 获取php镜像
$ docker pull php:8.0-rc-fpm-buster
8.0-rc-fpm-buster为php的标签,其他版本的请在docker库中查看
- 启动镜像
$ docker run -d -p 9002:9000 --name php8 -v /home/yzj/docker/nginx/html:/var/www/html php:8.0-rc-fpm-buster
docker run :启动docker镜像
-d:后台启动
-p:设置端口映射,即将容器的9000端口映射到宿主机的9002端口。
注意:本地端口:容器端口 (第一个9002是本地宿主机的端口,第二个9000是容器的端口)
--name:给容器命名
-v 配置文件映射
~/home/yzj/docker/nginx/html(将php目录的/var/www/html 映射到 /home/yzj/docker/nginx/html)
docker安装nginx
- 获取镜像
$ docker pull nginx
这里我获取的nginx最新版本
- 创建需要挂载的目录和文件
在工作目录创建
docker/nginx/html
、docker/nginx/conf/conf.d/default.conf
,其中default.conf
内容如下:
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #nginx的默认项目目录
index index.html index.htm index.php; #添加index.php
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/html;#php项目的默认目录,和php启动映射的数据卷对应上
fastcgi_pass 192.168.172.131:9002;# 宿主机ip和php映射的宿主机的端口号一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #这块也修改一下
include fastcgi_params;
}
}
- 启动镜像
$ docker run -itd --name nginx80 -p 80:80 -v /home/yzj/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/yzj/docker/nginx/html:/usr/share/nginx/html nginx
- 在映射工作目录创建index.html和index.php
root@ubuntu20:/home/yzj# vim docker/nginx/html/index.html
#加入代码后保存
<h1>nginx80</h1>
root@ubuntu20:/home/yzj# vim docker/nginx/html/index.php
#加入代码后保存
<?php
$host = "192.168.172.131";
$username = "root";
$password = "123456";
$database = 'mysql'; //改成自己的mysql数据库名
$con=mysqli_connect($host,$username,$password,$database); //连接数据库
if (!$con) {
die("连接 MySQL 失败: " . mysqli_connect_error());
}
mysqli_query($con,"set names utf8"); //数据库编码格式
//查询代码
$sql = "select * from user";
$query = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($query)){
print_r($row['User']);
echo "<br />";
}
?>
检验
- 访问:
http://192.168.172.131
浏览器输出:nginx80
- 访问:
http://192.168.172.131/index.php
此时可能会出问题,报:
mysqli_connect
方法不存在,是因为安装的php是纯净版本,很多扩展都没有,需要自己开启
$ docker exec -it php8 /bin/bash
$ cd /usr/local/bin
$ ./docker-php-ext-install pdo_mysql
$ ./docker-php-ext-install mysqli
# 退出容器
$ exit
$ docker php8 restart
再次访问 浏览器输出如下
root
mysql.infoschema
mysql.session
mysql.sys
root
网友评论