<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="DNMP 可以构建出基于 Docker 的 PHP 开发环境">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2022-11-21 00:07<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
DNMP 可以构建出基于 Docker 的 PHP 开发环境

Github：https://github.com/telanflow/dnmp

DNMP 可以构建出基于 Docker 的 PHP 开发环境，其优势有在短时间内随意构建不同版本的相关服务、环境统一分布在不同服务器等，使开发者能够更专注于开发业务本身。

友情提示：请务必配置 DockerHub 加速器（方法见底部），不然会镜像下载超时。

产品特色



XML/HTML代码


    灵活切换适合国内的源（apt-get、php composer）

    组件精简易懂，学习、测试环境、生产环境均适合

    良好的扩展性






组件（容器）及相关软件版本



XML/HTML代码


    Ningx：latest

    PHP56：php-fpm 5.6.x composer:1.8.0 swoole:1.10.5 redis:4.3.0

    PHP74：php-fpm 7.4.x composer:2.1.11 swoole:4.8.7 redis:5.3.7 mongodb:1.12.1

    PHP80：php-fpm 8.0.x composer:2.1.11 swoole:4.8.7 redis:5.3.7 mongodb:1.12.1

    PHP81：php-fpm 8.1.x composer:2.1.11 swoole:4.8.7 redis:5.3.7 mongodb:1.12.1

    MySQL：5.7

    Redis：latest 默认密码：dnmp

    Mogodb: latest 默认验证数据库：admin 账号：admin 密码：admin

    ElasticSearch：7.1.1






目录结构



XML/HTML代码


    dnmp

    |----/build                  镜像构建目录

    |----/config                 配置文件目录

    |----/data                   持久化数据目录

    |----/www                    WEB文件目录

    |----/.env-example           配置文件示例

    |----/docker-compose.yml     docker compose 配置文件






开始安装

没有安装 Docker 的同学移步 安装教程，如果你有足够的时间强烈建议通读 Docker &mdash; 从入门到实践



XML/HTML代码


    cd ~/

    git clone --depth 1 https://github.com/telanflow/dnmp.git

    cd dnmp

    cp .env-example .env








XML/HTML代码


    # 配置数据库密码、时区、端口等

    vim .env

    # 构建全部镜像并启动容器

    sudo docker-compose up --build -d

    # 构建单个镜像并启动容器

    sudo docker-compose up --build -d [nginx|php56|php74|php80 ...]

    # 构建单个镜像

    sudo docker-compose build --no-cache [nginx|php56|php74|php80 ...]






注意：dnmp部署完成后，需要修改redis服务的密码config/redis/redis.conf 设置 requirepass dnmp（替换成你自己的密码） 

启动成功访问 http://localhost 即可

常用操作命令



XML/HTML代码


    # 查看当前启动的容器

    sudo docker-compose ps

    # 启动部分服务在后边加服务名，不加表示启动所有，-d 表示在后台运行

    sudo docker-compose up -d [nginx|php56|php74|php80 ...]

    # 启动容器

    sudo docker-compose start [nginx|php56|php74|php80 ...]

    # 停止容器

    sudo docker-compose stop [nginx|php56|php74|php80 ...]

    # 重启容器

    sudo docker-compose restart [nginx|php56|php74|php80 ...]

    # 停止并删除相关的容器

    sudo docker-compose down [nginx|php56|php74|php80 ...]

    # 删除所有未运行的容器

    sudo docker rm $(sudo docker ps -a -q)

    # 删除所有未运行的镜像，-f 可以强制删除

    sudo docker rmi $(sudo docker images -q)

    # 删除dnmp

    sudo docker rm $(sudo docker ps -a | grep dnmp | awk '{print $1}')

    # ⚠️清理所有停止的容器（注意如果执行 docker images -a 会出现一些 none 的镜像，这些是构建镜像的中间层不占用空间也不是垃圾数据，不用管）

    sudo docker system prune

    # 进入容器

    docker exec -it [dnmp-nginx|dnmp-redis|dnmp-php74|dnmp-php80| ...] bash






更多可通过 sudo docker -h 或者 sudo docker-compose -h 查看

容器内目录映射



XML/HTML代码


    # Nginx

    /etc/nginx          配置文件目录

    /etc/nginx/html     .env文件中的 WWW_DIR

    # PHP

    /etc/nginx/html     .env文件中的 WWW_DIR

    /usr/local/etc      配置文件目录 `部分文件已经映射到config目录下

    # Mysql

    /etc/mysql           配置文件目录

    # Redis

    /usr/local/etc/redis 配置文件目录






修改镜像文件怎么处理？

比如在 php 里新增一个扩展



XML/HTML代码


    # 1、更改对应的 dnmp/build/php/Dockerfile

    # 2、重新构建镜像

    sudo docker-compose build --no-cache [php56|php74|php80 ...]






如何在 php 里连接 MySQL 和 Redis？



XML/HTML代码


    &lt;?php

     

        echo &quot;&lt;pre&gt;&quot;;

     

        // 连接 MySQL

        $user = &quot;root&quot;;

        $pass = &quot;root&quot;;  

        $dbh = new PDO('mysqlmysqlmysql:host=mysql;dbname=mysql', $user, $pass);

       

        foreach($dbh-&gt;query('SELECT * from user') as $row) {

            print_r($row);

        }

     

        echo &quot;&lt;br /&gt;&quot;;

     

        // 连接 Redis

        $redis = new Redis();

        $redis-&gt;connect('redis', 6379);

        $redis-&gt;set(&quot;test-key&quot;,&quot;hello&quot;);

        echo &quot;Stored string in redis:: &quot; . $redis-&gt;get(&quot;test-key&quot;);

      

        // 连接 Mongodb

        $manager = new MongoDB\Driver\Manager(&quot;mongodb://mongodb:27017&quot;);






其他的坑

如果需要升级某些组件的版本需要注意载入对应版本的配置文件，修改对应的配置信息，比如 redis.conf 默认配置的出口 ip 为 127.0.0.1，这样的话 php 的容器是连不上的，需要修改成 0.0.0.0，另外也要注意修改对应的 log path。

安装 Docker 及相关工具

安装 docker（2选1）

1、参考 daocloud 提供的文档（推荐）



XML/HTML代码


    # 注意按照文档如果执行类似 install docker-ce=17.03.1* 出错，执行 install docker-ce 即可

    https://download.daocloud.io/Docker_Mirror/Docker






2、ubuntu 系统（可能不是最新版本的，适合学习或者测试用）



XML/HTML代码


    apt-get update &amp;&amp; apt install docker.io






安装 docker-compose



XML/HTML代码


    sudo curl -L &quot;https://github.com/docker/compose/releases/download/2.27.2/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose

    sudo chmod +x /usr/local/bin/docker-compose






启动 Docker



XML/HTML代码


    sudo service docker start

    sudo docker info






配置 DockerHub 加速器（你用的阿里云也许不用配置，如果觉得下载镜像很慢就配置）

阿里云加速器：每个人有对应的加速地址，访问 https://cr.console.aliyun.com -&gt;【镜像加速器】配置加速器

DaoCloud 加速器：http://guide.daocloud.io/dcs/daocloud-9153151.html

腾讯云加速器：https://www.qcloud.com/document/product/457/7207




 
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
