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

uname -r 查看版本要在3.10以上yum -y updateyum报错:Could not retrieve mirrorlist
备份/etc/yum.repos.d/CentOS-Base.repo后执行
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum remove docker docker-common docker-selinux docker-engineyum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo国内:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-cesystemctl start dockersystemctl enable dockersudo mkdir -p /etc/dockertee /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/"]}EOFsudo systemctl daemon-reloadsudo systemctl restart dockerdocker network create my_networkdocker network ls
三、安装php
下载php镜像
docker pull php:7.4.3-fpm (踩坑经验:后面要带fpm)docker run -it --name test_php7.4.3-fpm -d php:7.4.3-fpm mkdir -p /data/php7.4.3 && cd /data/php7.4.3
docker cp [临时容器id]:/usr/local/etc /data/php7.4.3docker 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-fpmdocker stop [临时容器id]docker rm [临时容器id]php -mdocker-php-ext-install pdo pdo_mysql docker-php-ext-configure pcntl --enable-pcntl && docker-php-ext-install pcntl
docker-php-ext-install bcmath
docker-php-ext-install gd
四、安装nginx
理论:全部容器不做端口映射!!用nginx转发,如3306,最好把nginx装在宿主机上!!!
下载镜像
docker pull nginx:1.24.0docker run -it --name test_nginx1.24.0 -d nginx:1.24.0mkdir -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.0docker run \--network my_network \-p 80:80 \-p 443: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 \-d nginx:1.24.0docker stop [临时容器id]docker rm [临时容器id]例如,假设已启动的容器的名称为 "my-container",要将容器的 80 端口映射到宿主机的 8080 端口上,可以执行以下命令:

修改这两个文件
五、安装mysql
docker pull mysql:5.7.43docker run -it --name test_mysql5.7.43 -e MYSQL_ROOT_PASSWORD=root -v /etc/localtime:/etc/localtime:ro -d mysql:5.7.43mkdir -p /data/mysql5.7.43/conf
docker cp [临时容器id]:/var/log /data/mysql5.7.43docker cp [临时容器id]:/var/lib/mysql /data/mysql5.7.43/libdocker cp [临时容器id]:/etc/mysql/conf.d /data/mysql5.7.43/confdocker cp [临时容器id]:/etc/mysql/mysql.conf.d /data/mysql5.7.43/confdocker 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/mysql:/var/lib/mysql \-v /data/mysql5.7.43/conf:/etc/mysql \-v /etc/localtime:/etc/localtime:ro \-e MYSQL_ROOT_PASSWORD=root123456 \-d mysql:5.7.43 
docker stop [临时容器id]docker rm [临时容器id]docker exec -it [容器id] bashCREATE 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;GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'root123456 ' WITH GRANT OPTION;
FLUSH PRIVILEGES;
使用远程工具连接mysql,并建立一个user用户表,后面用来测试

如果需要开启binlog日志


我一般不开启

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

新增一个网站配置


下图这样配置,带不带index.php都可以访问,上面那个带了访问不了。

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

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

项目连接mysql

打开浏览器测试

安装redis
- –restart=always 总是开机启动
- –log是日志方面的
- -p 6379:6379 将6379端口挂载出去
- –name 给这个容器取一个名字
- -v 数据卷挂载
- /home/redis/myredis/myredis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。
- /home/redis/myredis/data:/data 这个同上
- -d redis 表示后台启动redis
- redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf
- –appendonly yes 开启redis 持久化
- –requirepass 000415 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置,我被搞过,可以看这篇文章“阿里云服务器中毒‘Kirito666’经历”)








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

浙公网安备 33010602011771号