|
高士涛-学习日报 |
||||||||
|
姓名 |
高士涛 |
日期 |
2023/09/06 |
部门 |
云服务业务部 |
导师 |
王晓明 |
|
|
学习工作内容 |
||||||||
|
Docker实现LNMP的部署(Linux + Nginx + MySQL + PHP) |
||||||||
|
【学习目的】 1. 掌握 Docker 的基本操作 •
docker 安装 •
docker images •
docker run •
docker ps •
docker rm •
docker exec 2. 重点熟悉docker 端口映射和存储映射 3. 了解 PHP 程序的简单语法 4. 能够基于docker完成LNMP环境的部署 【参考连接】 使用Docker安装部署MySQL数据库-阿里云开发者社区 (aliyun.com) fastcgi原理 及 fastcgi_param 详解_fastcgi_param
script_filename_叫我峰兄的博客-CSDN博客 Docker 下安装php连接mysql报错:Uncaught
Error: Class 'mysqli' not found in 解决方法_帅死人了的博客-CSDN博客 【实验内容】 1. 拉取实验相关docker镜像(Nginx+PHP+MySQL) 1.1 拉取nginx镜像 docker pull nginx
1.2 拉取php镜像(php:fpm) docker pull php:fpm
1.3 拉取mysql镜像 docker pull mysql
1.4 查看已拉取到本地的镜像 docker images
2. 创建并配置MySQL容器 2.1 创建数据卷 MySQL作为数据库,其中通常存放我们的用户数据,都是很重要的,因此在容器化部署MySQL时,将MySQL的数据文件等等持久化是非常有必要的。 这里我们使用具名挂载的方式挂载MySQL容器的数据卷,方便管理。 先创建三个数据卷,分别用于挂载并持久化MySQL的数据文件、配置文件和日志这三个目录: docker volume create mysql-data docker volume create mysql-config docker volume create mysql-log
2.2 创建MySQL容器 docker run -id --name=mysql
-v mysql-config:/etc/mysql/conf.d -v mysql-log:/logs -v mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e
LANG=C.UTF-8 mysql
-id 将MySQL容器挂在后台运行。 --name=mysql 将容器起名为mysql,大家可以自己起名,该参数可以省略。 -v mysql-config:/etc/mysql/conf.d 把MySQL容器中的配置文件目录挂载至上述创建的名为mysql-config的数据卷上面,还有两个-v挂载数据卷的参数同理。 -p 3306:3306 把容器的3306端口映射到宿主机的3306端口,这样才能从外网访问这台机器上的MySQL,若你的数据库只需要从本机访问,就可以去除这个参数。 -e
MYSQL_ROOT_PASSWORD=123456 设置容器环境变量MYSQL_ROOT_PASSWORD的值为123456,这个环境变量表示MySQL的root用户的密码,一定要设置,这里设置了密码为123456,大家可以自定义。 -e LANG=C.UTF-8 设置容器的语言环境变量LANG值为C.UTF-8,这个必须要设置,否则容器内默认是英文环境,使得MySQL无法存放中文内容。 2.3 阿里云ECS安全组放通mysql相关端口(3306)
2.4 先进入MySQL容器的shell,然后连接MySQL数据库 docker exec -it mysql bash mysql -u root -p
2.5 新建一个自己的数据库,然后查看数据库是否新建成功 create
database LMS; show databases;
2.6 在自己新建的数据库中创建一个名为user的表 use LMS; CREATE
TABLE `user` ( `id`
int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id号', `username`
varchar(60) NOT NULL COMMENT '用户名', `password`
varchar(60) NOT NULL COMMENT '密码', PRIMARY
KEY (`id`) )
ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT
CHARSET=utf8mb3;
2.7 查看自己新建的数据库中的表信息 show tables;
2.8 向user表中插入几条测试数据 INSERT
INTO `user` VALUES (1,'gst','1'),(5,'1','1'),(6,'22','22');
2.9 放通MySQL数据库root用户的所有远程连接权限 grant all on *.* to root@'%';
2.10 使用数据库管理软件进行MySQL远程连接测试
3. 创建Nginx容器 注意端口映射和存储映射。 docker run --name nginx -p 80:80 -v /root/nginx/:/usr/share/nginx/html nginx
4. 创建PHP容器 注意端口映射和存储映射。 docker run --name php-fpm -p
9000:9000 -v /root/nginx/:/var/www/html -d php:fpm
5. 查看已创建的MySQL、Nginx、PHP容器的运行情况 docker ps -a
6. 配置LNMP各容器之间的关联 6.1 查看PHP容器的IP地址等信息 docker inspect e6b187d50cbb
6.2 修改Nginx配置文件 6.2.1 复制Nginx容器中的配置文件到宿主机。 docker cp d9a0fa167e73:/etc/nginx/conf.d/default.conf
/root/nginx/default.conf
6.2.2 在宿主机中修改复制过来的Nginx配置文件。 vi
/root/nginx/default.conf
6.2.3 在Nginx配置文件中加入红框的内容。 其中,172.17.0.2:9000 为PHP容器的IP地址和端口号,/var/www/html
为PHP容器的默认web目录。配置完成后保存配置文件。
6.2.4 将修改过的Nginx配置文件复制回Nginx容器中。 docker cp /root/nginx/default.conf
d9a0fa167e73:/etc/nginx/conf.d/default.conf
6.2.5 进入Nginx容器shell,重新加载nginx服务,使新的配置文件生效。 docker exec -it nginx /bin/bash nginx -s reload
7. 测试验证 7.1 测试 Nginx + PHP 服务的可用性 7.1.1 在与Nginx容器相映射的宿主机目录中,创建web测试页面文件“info.php”。 cd /root/nginx/ echo "<?php echo phpinfo();"
> info.php
7.1.2 使用浏览器通过ECS公网地址访问info.php,访问成功返回如下图界面。 (如果访问显示找不到页面,请检查你的配置是否有误或info.php文件放置目录是否正确。)
7.1.3 访问info.php页面时,Nginx后台日志记录如下所示。
7.2 测试Nginx + PHP + MySQL 服务的可用性 7.2.1 进入PHP容器。 docker exec -it e6b187d50cbb bash
7.2.2 在PHP容器中切换目录到 /usr/local/bin/
,安装mysqli扩展。 (纯净的php镜像,没有
mysqli 扩展,php 请求mysql服务会报错。直接进入到 php 容器里面安装该扩展即可。) cd /usr/local/bin/ docker-php-ext-install mysqli
7.2.3 重启 php 容器。 docker restart e6b187d50cbb
7.2.4 在宿主机 /root/nginx 目录下创建具有访问mysql数据库功能的web页面文件“t01.php”。 vim
/root/nginx/t01.php
t01.php中的代码如下所示:
7.2.5 使用浏览器通过ECS公网地址访问t01.php,访问成功返回如下图界面。
|
||||||||
|
遗留问题 |
||||||||
|
|
||||||||
|
明日计划 |
||||||||
|
继续深入学习 |
||||||||