docker 搭建php环境(踩坑经验!!)
本次安装的推荐配置:
- CentOS 7 (迅雷种子 http://ftp.nara.wide.ad.jp/pub/Linux/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.torrent)
- nginx 1.24.0
- mysql 5.7.43
- php 7.4.3-fpm
- redis 7.2.0
一、虚拟机安装centos7
vm虚拟机需要4g内存,网络使用nat模式设置静态ip、50G硬盘、1cpu、2核(踩坑经验:太低配置重启后会开不了机)
开机后
uname -r 查看版本要在3.10以上更新系统组件
yum -y update二、安装docker
删除旧docker
yum remove docker docker-common docker-selinux docker-engine安装工具
yum install -y yum-utils device-mapper-persistent-data Ivm2配置docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装docker
sudo yum install -y docker-ce启动docker
systemctl start docker设置开机启动
systemctl enable docker设置镜像国内加速(踩坑经验:设置多个源头,不然会很慢)
创建文件
sudo mkdir -p /etc/docker输入源头url
tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://mirror.ccs.tencentyun.com","https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com/","https://reg-mirror.qiniu.com/"]}EOF重启配置
sudo systemctl daemon-reload重启docker
sudo systemctl restart docker设置容器局域网,容器间相互访问 (心得:容器互相访问,不用通过宿主机,更快)
docker network create my_network查看局域网是否创建成功
docker network ls
三、安装php
下载php镜像
docker pull php:7.4.3-fpm (踩坑经验:后面要带fpm)使用镜像生成临时容器 ,名为:test_php7.4.3,用来拷贝配置文件(踩坑经验:空文件夹做共享,会将容器的配置文件清空)
docker run -it --name test_php7.4.3-fpm -d php:7.4.3-fpm 使用 docker ps 命令查看是否创建成功
创建需要被共享的文件夹
mkdir -p /data/php7.4.3 && cd /data/php7.4.3
将镜像内文件拷贝出来
(左边是容器,会连同文件夹一起复制过去,右边是放进哪个文件夹里)
docker cp [临时容器id]:/usr/local/etc /data/php7.4.3启动正式容器
docker run \--network my_network \--name prod_7.4.3-fpm \--restart=always \-v /data/php7.4.3/etc:/usr/local/etc \-v /data/nginx1.24.0/html:/var/www/html \-d php:7.4.3-fpm备注:--restart=always 重启自动启动容器
没问题后,停止临时镜像,并删除临时镜像
docker stop [临时容器id]docker rm [临时容器id]php开通 mysql pdo 扩展,php连接mysql会用到
进入php容器后
查看php扩展模块
php -m安装扩展
docker-php-ext-install pdo pdo_mysql
四、安装nginx
下载镜像
docker pull nginx:1.24.0镜像生成临时容器(用来拷贝配置文件)
docker run -it --name test_nginx1.24.0 -d nginx:1.24.0使用docker ps 查询是否启动成功
创建需要被共享的文件夹
mkdir -p /data/nginx1.24.0/conf/certmkdir -p /data/nginx1.24.0/conf/conf.dmkdir -p /data/nginx1.24.0/htmlmkdir -p /data/nginx1.24.0/logmkdir -p /data/nginx1.24.0/ssl
将镜像内文件拷贝出来
(左边是容器,会连同文件夹一起复制过去,右边是放进哪个文件夹里)
docker cp [临时容器id]:/etc/nginx/conf.d /data/nginx1.24.0/confdocker cp [临时容器id]:/etc/nginx/nginx.conf /data/nginx1.24.0/conf/nginx.confdocker cp [临时容器id]:/usr/share/nginx/html /data/nginx1.24.0启动正式容器
docker run \--network my_network \-p 80:80 \-p443:443 \--name prod_nginx1.24.0 \--restart=always \-v /data/nginx1.24.0/conf/nginx.conf:/etc/nginx/nginx.conf \-v /data/nginx1.24.0/conf/cert:/etc/nginx/cert \-v /data/nginx1.24.0/ssl:/etc/nginx/ssl/ \-v /data/nginx1.24.0/conf/conf.d:/etc/nginx/conf.d \-v /data/nginx1.24.0/log:/var/log/nginx \-v /data/nginx1.24.0/html:/usr/share/nginx/html \-d nginx:1.24.0备注:--restart=always 重启自动启动容器
没问题后,停止临时镜像,并删除临时镜像
docker stop [临时容器id]docker rm [临时容器id]五、安装mysql
下载镜像
docker pull mysql:5.7.43开启临时镜像(用来拷贝配置文件)
docker run -it --name test_mysql5.7.43 -e MYSQL_ROOT_PASSWORD=root -v /etc/localtime:/etc/localtime:ro -d mysql:5.7.43创建需要被共享的文件夹
mkdir -p /data/mysql5.7.43 
将镜像内文件拷贝出来
(左边是容器,会连同文件夹一起复制过去,右边是放进哪个文件夹里)
docker cp [临时容器id]:/var/log /data/mysql5.7.43docker cp [临时容器id]:/var/lib /data/mysql5.7.43docker cp [临时容器id]:/etc/mysql/conf.d /data/mysql5.7.43docker cp [临时容器id]:/etc/mysql/mysql.conf.d /data/mysql5.7.43启动正式容器
docker run \--network my_network \--name prod_mysql5.7.43 \--restart=always \-p 3306:3306 \-v /data/mysql5.7.43/log:/var/log \-v /data/mysql5.7.43/lib:/var/lib \-v /data/mysql5.7.43/conf.d:/etc/mysql/conf.d \-v /data/mysql5.7.43/mysql.conf.d:/etc/mysql/mysql.conf.d \-v /etc/localtime:/etc/localtime:ro \-e MYSQL_ROOT_PASSWORD=root123456 \-d mysql:5.7.43备注:--restart=always 重启自动启动容器
没问题后,停止临时镜像,并删除临时镜像
docker stop [临时容器id]docker rm [临时容器id]# 进入容器
docker exec -it [容器id] bash# 创建用户并开启远程登录
CREATE USER 'user_tp'@'%' IDENTIFIED BY 'user_tp_123456';# 创建数据库并设置字符集
CREATE DATABASE `tp_test` CHARACTER SET 'utf8mb4';# 给账号授权数据库
GRANT ALL PRIVILEGES ON `tp_test`.* TO 'user_tp'@'%';# 刷新权限
FLUSH PRIVILEGES;使用远程工具连接mysql,并建立一个user用户表,后面用来测试

六、运行php项目
将php项目通过ftp上传到 /data/nginx1.24.0/html (上面配置了这个地址会共享到容器内对应的文件夹)

新增一个网站配置


hosts新增一行 (你的windows电脑)

重启docker
systemctl restart docker
在php项目中,新增一个访问数据库的代码

项目连接mysql

打开浏览器测试

都是踩坑经验,无私分享,有问题欢迎留言,共同进步!