1 Star 4 Fork 1

李佳飞 / dnmp

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

Docker + Nginx + MySQL + PHP7 + Redis

本代码 Gitee仓库 参考 dnmp 改造缩减

目录结构

├── data                        数据库数据目录
│   └── mysql                  MySQL 数据目录
│   └── composer               Composer 数据目录
│   └── redis                  redis 数据目录
│   └── esdata                 elasticSearch 数据目录
├── services                    服务构建文件和配置文件目录
│   ├── mysql                   MySQL 配置文件目录
│   ├── nginx                   Nginx 配置文件目录
│   ├── php                     PHP7.1 配置目录
│   └── redis                   Redis 配置目录
│   └── supervisor              Supervisor 配置目录
│   └── elasticsearch           elasticSearch 配置目录
├── logs                        Nginx,PHP 日志目录
├── docker-compose.sample.yml   Docker 服务配置示例文件
└── env.smaple                  环境配置示例文件

快速使用

  1. 本地安装需有 gitDockerdocker-compose 1.7.0+
    • 如果下载的 Docker Desktop for Windows 包括 Compose 以及其他 Docker 应用程序,因此 Windows 用户不需要单独安装 docker-Compose
  2. git clone https://gitee.com/lijiafei/dnmp
  3. 拷贝并命名配置文件(Windows系统请用copy命令),启动:
    $ cd dnmp                                           # 进入项目目录
    $ cp env.sample .env                                # 复制环境变量文件
    $ cp docker-compose.sample.yml docker-compose.yml   # 复制 docker-compose 配置文件。默认启动4个服务:
                                                        # Nginx、PHP7.1、Redis和MySQL5.6。要开启更多其他服务,请删
                                                        # 除服务块前的注释
  4. 修改 .env 文件,如代码目录,版本,端口等,docker-compose.yml 不需要修改(或自行阅读更改)
  5. $ docker-compose up -d 构建,启动服务并放置后台运行
  6. 可根据具体需求配置域名,services/nginx/conf.d/*.conf,并添加本地的 Host 文件 ,重启 Nginx docker-compose restart nginx

管理命令

服务器启动和构建命令

如需管理服务,请在命令后面加上服务器名称,例如:

$ docker-compose up                         # 创建并且启动所有容器
$ docker-compose up -d                      # 创建并且后台运行方式启动所有容器
$ docker-compose up nginx php71 mysql         # 创建并且启动nginx、php、mysql的多个容器
$ docker-compose up -d nginx php71  mysql     # 创建并且已后台运行的方式启动nginx、php、mysql容器


$ docker-compose start php71                  # 启动服务
$ docker-compose stop php71                   # 停止服务
$ docker-compose restart php71                # 重启服务
$ docker-compose build php71                  # 构建或者重新构建服务

$ docker-compose rm php71                     # 删除并且停止php容器
$ docker-compose down                       # 停止并删除容器,网络,图像和挂载卷

查看docker网络

ifconfig docker0

用于填写 extra_hosts 容器访问宿主机的 hosts 地址

PHP和扩展

安装PHP扩展

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

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

然后重新build PHP镜像。

docker-compose build php

可用的扩展请看同文件的env.sample注释块说明。

快速安装php扩展

1.进入容器:

docker exec -it php71 /bin/sh

install-php-extensions apcu 

2.支持快速安装扩展列表

Extension PHP 5.5 PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3 PHP 7.4 PHP 8.0
amqp
apcu
apcu_bc
ast
bcmath
bz2
calendar
cmark
csv
dba
decimal
ds
enchant*
ev
excimer
exif
ffi
gd
gearman
geoip
geospatial
gettext
gmagick
gmp
gnupg
grpc
http
igbinary
imagick
imap
inotify
interbase
intl
ioncube_loader
json_post
ldap
mailparse
maxminddb
mcrypt
memcache
memcached
mongo
mongodb
mosquitto
msgpack
mssql
mysql
mysqli
oauth
oci8
odbc
opcache
opencensus
parallel*
pcntl
pcov
pdo_dblib
pdo_firebird
pdo_mysql
pdo_oci
pdo_odbc
pdo_pgsql
pdo_sqlsrv*
pgsql
propro
protobuf
pspell
pthreads*
raphf
rdkafka
recode
redis
seaslog
shmop
smbclient
snmp
snuffleupagus
soap
sockets
solr
sqlsrv*
ssh2
swoole
sybase_ct
sysvmsg
sysvsem
sysvshm
tensor
tidy
timezonedb
uopz
uuid
vips*
wddx
xdebug
xhprof
xlswriter
xmlrpc
xsl
yaml
yar
zip
zookeeper
zstd

此扩展来自https://github.com/mlocati/docker-php-extension-installer 参考示例文件

使用composer

容器内使用composer命令

进入容器,再执行composer命令,以PHP71容器为例:

docker exec -it php71 /bin/sh
cd /www/localhost
composer update

使用Log

Log文件生成的位置依赖于conf下各log配置的值。

Nginx日志

Nginx日志是我们用得最多的日志,所以我们单独放在根目录log下。

log会目录映射Nginx容器的/var/log/nginx目录,所以在Nginx配置文件中,需要输出log的位置,我们需要配置到/var/log/nginx目录,如:

error_log  /var/log/nginx/nginx.localhost.error.log  warn;

PHP-FPM日志

大部分情况下,PHP-FPM的日志都会输出到Nginx的日志中,所以不需要额外配置。

常见问题

如何在PHP代码中使用curl?

参考这个issue:https://github.com/yeszao/dnmp/issues/91

Docker使用cron定时任务

Docker使用cron定时任务

Docker容器时间

容器时间在.env文件中配置TZ变量,所有支持的时区请看时区列表·维基百科或者PHP所支持的时区列表·PHP官网

如何连接MySQL和Redis服务器

这要分两种情况,

第一种情况,在PHP代码中

// 连接MySQL
$dbh = new PDO('mysql:host=mysql;dbname=mysql', 'root', '123456');

// 连接Redis
$redis = new Redis();
$redis->connect('redis', 6379);

因为容器与容器是expose端口联通的,而且在同一个networks下,所以连接的host参数直接用容器名称,port参数就是容器内部的端口。更多请参考《docker-compose ports和expose的区别》

第二种情况,在主机中通过命令行或者Navicat等工具连接。主机要连接mysql和redis的话,要求容器必须经过ports把端口映射到主机了。以 mysql 为例,docker-compose.yml文件中有这样的ports配置:3306:3306,就是主机的3306和容器的3306端口形成了映射,所以我们可以这样连接:

$ mysql -h127.0.0.1 -uroot -p123456 -P3306
$ redis-cli -h127.0.0.1

这里host参数不能用localhost是因为它默认是通过sock文件与mysql通信,而容器与主机文件系统已经隔离,所以需要通过TCP方式连接,所以需要指定IP。

License

MIT

Repository Comments ( 0 )

Sign in for post a comment

About

docker + PHP + Nginx + MySql + Redis + Supervisor expand collapse
Shell and 2 more languages
MIT
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
1
https://gitee.com/lijiafei/dnmp.git
git@gitee.com:lijiafei/dnmp.git
lijiafei
dnmp
dnmp
master

Search