使用docker-compose快速搭建php或者node环境

liyuzhao5年前笔记2691

这个是博主自己写的一份docker文件,能让你快速的搭建php或者node环境。

github地址:dcnmp


注意

1、默认使用php7.3的镜像,如果你要用php7.2,请记得修改nginx的php代理配置
2、如果你要使用多个php-fpm容器,记得修改php-fpm容器内的监听9000端口,如果多个php-fpm容器端口都是9000,那么只会生效一个,nginx转发到其它的php-fpm容器会直接502,默认php和php7两个容器时,则不需要修改,我已经修改好了,一个监听9000,另一个监听9001。如果你还要增加多个,则请查看php/conf/zz-docker.conf配置,可以直接修改php-fpm的监听端口。

location ~ \.php$ {
        fastcgi_pass   php73:9000;  #这里要改为php72,对应你composer.yml里面的
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

集成了多个服务,目前有nginx、php、mysql、mongodb、redis、rabbitmq、phpredisadmin、supervisord(安装在php容器中)。如果你想支持更多的服务,可以参考原有的服务目录结构、env.sample配置、docker-compose-sample.yml配置

1.目录结构

/
├── mongodb                             Mongodb
│   └── Dockerfile                      Mongodb构建文件
├── Mysql                               Mysql目录
│   ├── conf                            Mysql配置文件目录
│   │    └── mysql.cnf                  mysql配置文件
│   └── Dockerfile                      Mysql构建文件
├── nginx                               Nginx
│   ├── conf                            Mysql配置文件目录
│   │    ├── conf.d                     Nginx站点ssh秘钥目录
│   │    ├── vhost                      Nginx虚拟站点配置目录
│   │    └── nginx.conf                 Nginx默认配置文件
│   └── Dockerfile                      Nginx构建文件
├── PHP                                 PHP
│   ├── conf                            PHP配置文件目录
│   │    ├── supervisord.d              supervisord配置目录
│   │    ├── php.ini                    PHP配置文件
│   │    └── php-fpm.conf               php-fpm配置文件
│   ├── extensions                      PHP扩展目录(为了快速构建可以先下载好一些扩展)
│   ├── sh                              构建中运行脚本目录
│   └── Dockerfile                      PHP构建文件
├── phpredisadmin                       redis界面管理
│   └── Dockerfile                      phpredisadmin构建文件
├── rebbitmq                            rebbitmq
│   └── Dockerfile                      rebbitmq构建文件
├── redis                               redis
│   └── Dockerfile                      redis构建文件
├── docker-compose-sample.yml           Docker-compose配置示例文件
├── env.smaple                          环境配置示例文件
└── README.MD                           文档说明


2.使用

    1、本地安装gitdockerdocker-compose,自行百度安装

    2、clone dcnmp项目

    3、拷贝并命名配置文件,启动:

$ cd dcnmp
$ cp env.sample .env
$ cp docker-compose-php.yml docker-compose.yml
$ docker-compose up

    4、访问在浏览器中访问:

        http://localhost: 默认http站点

        https://localhost:自定义证书https站点,访问时浏览器会有安全提示,忽略提示访问即可 两个站点使用同一PHP代码:./www/localhost/index.php

要修改端口、日志文件位置、php代码目录位置、php扩展、php镜像版本等,请修改**.env**文件,然后重新构建:

$ docker-compose build php7    # 重建单个服务$ docker-compose build          # 重建全部服务

3.PHP扩展

PHP的很多功能都是通过扩展实现,而安装扩展是一个略费时间的过程, 所以,除PHP内置扩展外,在env.sample文件中默认安装少量扩展, 如果要安装更多扩展,请打开你的.env文件修改如下的PHP配置, 增加需要的PHP扩展:

PHP7_EXTENSIONS=pdo_mysql,opcache,redis       # PHP 7.2要安装的扩展列表,英文逗号隔开PHP7_EXTENSIONS=opcache,redis                 # PHP 5.6要安装的扩展列表,英文逗号隔开

然后重新build PHP镜像。 bash docker-compose build php7 docker-compose up -d 可用的扩展请看同文件的PHP extensions注释块说明。

4.添加快捷命令

在开发的时候,我们可能经常使用docker exec -it切换到容器中,把常用的做成命令别名是个省事的方法。

打开~/.bashrc,加上:

alias dnginx='docker exec -it dcnmp_nginx /bin/sh'
alias dphp='docker exec -it dcnmp_php /bin/sh'
alias dphp7='docker exec -it dcnmp_php7 /bin/sh'
alias dmysql='docker exec -it dcnmp_mysql /bin/bash'
alias dredis='docker exec -it dcnmp_redis /bin/sh'

其它的服务一样,自行设置

5.配置文件说明

主要说明几个全局变量:
// php项目代码存放路径,一般映射在宿主机/app目录下
CODE_PATH=/app/www
// 各个服务软件的数据备份,比如mysql、redis等等,防止容器挂后数据不见的问题
DATA_PATH=/app/data
// 各个服务的配置,放在当前目录下每个服务目录的conf目录中
CONF_PATH=./
// 各个服务的log
LOG_PATH=/app/log

php项目代码、各服务的数据备份、各服务的日志都统一放在放在宿主机/app目录下,方便统一管理。 你也可以把配置也放到这个/app目录下,如果放到/app目录下,需要你提前把所有的服务目录下的conf目录中的所有文件都要复制到/app/conf/xxx服务名。

例如:mysql的配置复制到/app目录下,则为/app/conf/mysql/服务目录下的conf的所有目录文件。然后修改配置文件CONF_PATH=/app/conf

6.PHP镜像选择

PHP镜像支持多个版本,可以查看:https://github.com/docker-library/repo-info/tree/master/repos/php/remote

如果你用swoole不需要php-fpm的话,可以使用7.2-cli-alpine,如果需要php-fpm则用7.2-fpm-alpine。

7.nodejs镜像选择

nodejs官方镜像有三种,但是目前我们要选择-alpine后缀的,容量小、好用。nodejs搭配nginx很简单,在代理那里转发到nodejs容器即可,例如http://nodejs:3000

8.监控文件变化

新增对于hyperf等swoole框架的文件变化重启服务
进入到php容器直接使用swoolefor即可使用服务,详细请看php容器的~/.bashrc
如何使用请移步到swoolefor查看文档,地址:https://github.com/mix-php/swoolefor

9.存在问题

1:目前在/php/Dockerfile文件中,无法使用$(nproc),使用会报错,无法拿到cpu的数目

2:如果mysql启动不成功,查看容器报错为:[ERROR] Could not open file '/var/log/mysql/mysql.error.log' for error logging: Permission denied 则需要你删除映射的/app/log/mysql目录,然后重新开启容器,如果还不行,则在宿主机直接运行chmod -R 0777 /app/log/mysql

3:swoole扩展偶尔安装不上去,是因为可能文件损坏,请到https://github.com/swoole/swoole-src/releases 下载对应的版本

10.swoole框架建议

1、建议直接在宿主机使用supervisord来管理项目



相关文章

centos通过yum升级更新php的版本

如果你的centos PHP上面的版本很低,那么建议你通过yum进行更新。建议大家去参考这个博主的博文:Centos7下Yum更新安装PHP5.5,5.6,7.0如果出现:Resolving ...

linux终端递归给目录和子目录权限

我相信很多人都知道怎么给目录权限,但是想给目录下所有的文件和目录也有同样的权限估计就有很多人不懂了,其实也就是多一个操作。操作如下:$ chmod 755 目录名 -R #-R代表递归该文件...

mac使用virtualbox搭建centos7环境并配置静态ip(记录)

步骤:1、下载virtualbox(自行百度谷歌或者官网下载),官方地址2、下载centos7镜像,阿里centos镜像地址3、选择minimal类型的镜像下载4、安装virtualbox5、安装ce...

正则匹配只能输入正负数字(包括小数)

在网上很多都不行,很多都是能匹配正负数字,但是很多正则表达式把0002等这些都被匹配出来了。下面这个是完美的正则表达:/(?!(^-?0(\d+)|^-?0(\.0+)?$))^-?\d+(?:\.\...

centos+crontab+shell+git进行项目更新

centos+crontab+shell+git进行项目更新

我现在想开发一个tp+workerman的后台,所以我在码云创建一个项目,然后在本地开发,每开发完一个功能就git push到码云上面,然后自己又在本地虚拟主机上安装一个centos的系统来做服务器,...

git上传问题,push的时候总是出现权限问题

git上传问题,push的时候总是出现权限问题

最近想自己开发结合tp和workerman,所以在码云上创建了一个项目,但是由于公司那边有个码云账号和我自己的码云账号,所以使用tortoisegit的时候就算是输入对了账号和密码,总会出现权限的问题...

评论列表

追忆
2024-07-26 22:20:54

识别码:wkndvg43107XH-文章首尾呼应,语句简洁,刀刀见血,点明主题。http://www.shidongtang.com/post/16984.html

1111
2024-08-07 22:23:24

识别码:gifkwh52890DO-这游戏真不错!http://www.a5km.com/yxgl/jdqs/29280.html

1
2024-08-17 12:15:20

识别码:cbxawp30926VK-这游戏真不错!http://www.3553km.com

1
2024-08-17 15:56:35

识别码:kzbmpg12675HT-这游戏真不错!http://www.3553km.com

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。