docker 构建简单的 PHP+MySQL+nginx+Redis 环境,以及 docker 内 PHP 扩展安装。
- 服务器环境(centos7.4)
2.docker 安装sudo yum -y install docker-ce docker version //查看docker版本
- 安装mysql nginx redis php(非root用户请使用sudo命令)
第一步:拉取docker中镜像docker pull php:7.2-fpm docker pull nginx docker pull mysql:5.7 docker pull redis:3.2 docker images
第二步:建立容器
# 自有docker mysql 容器 docker run --name myDb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 # 自有docker redis 容器 docker run --name myRedis -p 6379:6379 -d redis:3.2 # 自有docker php 容器 docker run -d -p 9000:9000 --name myPhp -v /usr/html:/var/www/html -v /etc/myPhp:/usr/local/etc/php --link myDb:myDb --link myRedis:myRedis --privileged=true php:7.2-fpm # 自有docker nginx 容器 docker run \ --name myNginx -d \ -p 80:80 -p 443:443 \ -v /usr/html:/usr/share/nginx/html \ -v /etc/myNginx/nginx.conf:/etc/nginx/nginx.conf:ro \ -v /etc/myNginx/servers:/etc/nginx/servers \ -v /etc/myNginx/letsencrypt:/etc/nginx/letsencrypt:rw \ -v /var/log/myNginx:/var/log/nginx \ --link myPhp:myPhp --privileged=true \ nginx
备注:-v 参数为挂载目录,即将容器内部目录软连到宿主机目录,对于容器的配置和日志挂载可以方便直接在宿主机查看,当然不挂载也可以进入容器内部查看。进入容器命令
docker exec -ti containerID /bin/bash
。
有两个坑:1.nginx挂载配置目录时nginx.conf最好提前在宿主机对应目录下添加好(因为nginx.conf是个文件非目录,docker挂载会提示一些问题)2. php挂载php.ini时也同样在宿主机中先配置好。后面安装php扩展会用到
第三步. 启动容器
# 查看容器
docker ps -a
# 启动容器
docker start containId
- docker php 扩展安装
我使用pe c l安装# 进入php容器 docker exec -ti myPhp /bin/bash
使用pecl安装扩展命令, XXX为扩展名
pecl install xxxx && docker-php-ect-enable xxx
坑1: 我安装mongodb扩展时出现pecl拉取成功,docker-php-ext-enable脚本命令添加扩展失败的问题。解决如下
php.ini添加so文件扩展, 并将so 文件从/usr/local/lib/php/extension/o-debug-non-zts-20170718/ 中复制到 对应目录下 /usr/local/lib/php/pecl/20170718下。具体目录路径根据自己环境来看。此处php.ini在容器生成时已挂载,不需要在容器内部再添加新的php.ini
- phpinfo()查看环境吧。
参考:博客:docker 从入门到自动化构建 PHP 环境
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 5年前 自动加精
我的没问题
容器里什么也没有,如果要自己编译特定版本的扩展怎么办?
@lovecn 在容器里面用apt-get update 更新,在安装 apt-get install vim
有没有遇到这种情况