docker 构建简单的 PHP+MySQL+nginx+Redis 环境,以及 docker 内 PHP 扩展安装。

  1. 服务器环境(centos7.4)

    2.docker 安装
    sudo yum -y install docker-ce
    docker version //查看docker版本
  2. 安装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
  1. 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
  2. phpinfo()查看环境吧。
    参考:博客:docker 从入门到自动化构建 PHP 环境
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

我的没问题

root@68b8d29a95dc:/var/www/html# docker-php-ext-enable mongodb
root@68b8d29a95dc:/var/www/html# php -m |grep mongodb
mongodb

容器里什么也没有,如果要自己编译特定版本的扩展怎么办?

root@68b8d29a95dc:/var/www/html# yum install vi
bash: yum: command not found
root@68b8d29a95dc:/var/www/html# wget -h
bash: wget: command not found
5年前 评论

@lovecn 在容器里面用apt-get update 更新,在安装 apt-get install vim

5年前 评论

file

有没有遇到这种情况

3年前 评论
shaonian1996 (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!