——DNMP开发环境搭建(Docker + Nginx + MySQL5.7 + PHP7.2(预装了 composer) + Redis)
laravel 官方推荐的使用homestead或valet来搭建开发环境,但基于 docker 搭建开发环境更方便。 laravel学习请加
QQ: 2922800186
,vue学习请加QQ: 3180555323
本架构文件适用于Windows、Linux、MacOs
本教程配套视频
-
编辑器选择,php建议使用phpstorm,js/css/html等使用vscode
-
软件安装
git
,官网下载,windows 用户建议在git bash
下工作Docker
,windows 上安装,Linux 之 Ubuntu 上安装,Linux 之 Centos 上安装 ,MacOS 上安装](https://docs.docker.com/docker-for-mac/install/)(系统要求:Linux(支持 centos,debian,ubuntu,fedora 等),Windows 10 Build 15063+,或 MacOS 10.12+,且必须要64
位)docker-compose 1.7.0+
,参考官网安装
-
clone
项目:$ git clone [email protected]:advance/dnmp.git
-
如果不是
root
用户,还需将当前用户加入docker
用户组:$ sudo gpasswd -a ${USER} docker
-
拷贝并命名配置文件(为了统一,windows 用户请在 git bash 下工作),启动:
$ cd dnmp $ docker-compose up -d s1 s2 s3 s4 s5 # 根据需要启动指定服务,这5个服务第一次从镜像构建到容器运行约耗时9分钟 # 默认安装了5个常用服务: nginx为s1, php为s2,mysql为s3, phpmyadmin为s4,redis为s5 # .env,docker-compose.yml修改得up -d相应服务就行,如果Dockerfile有修改,请带参考--build # 如果只是服务的配置文件进行了修改,如nginx的nginx.conf修改了,请进入容器启动相应服务,如$ docker exec -it s1 nginx -s reload
-
在物理理(宿主机)浏览器中访问:
-
http://192.168.0.104 或 https://192.168.0.104 (物理机的 ip,自已查看本机的 ip)
PHP 代码在文件
./www/localhost/info.php
。
PHP 的很多功能都是通过扩展实现,而安装扩展较费时间,默认除了 php 内置扩展外,只安装了pdo_mysql
,mysqli
,mbstring
,gd
,curl
,opcache
,想安装其它扩展,请修改.env 文件
PHP_EXTENSIONS=pdo_mysql,opcache,redis # 扩展以英文逗号隔开
然后重新构建 php 镜像。
docker-compose build s2
docker exec -it c2 sh
cd /www/localhost
composer update
mysql 数据库放在宿主机上的,没有在容器中,方便管理,第一次启动后,文件夹dnmp\data\mysql5
的内容如下
- 修改host文件,增加如
127.0.0.1 01.laravel.bendi
- 配置nginx,增加配置文件
dnmp/services/nginx/conf/sites/laravel.conf
,后重启nginx,docker exec -it s1 nginx -s reload
如需管理服务,请在命令后面加上服务器名称,例如:
$ docker-compose up # 创建并且启动所有容器
$ docker-compose up -d # 创建并且后台运行方式启动所有容器
$ docker-compose up s1 s2 s3 # 创建并且启动nginx、php、mysql的多个容器
$ docker-compose up -d s1 s2 s3 # 创建并且已后台运行的方式启动nginx、php、mysql容器
$ docker-compose start s2 # 启动服务
$ docker-compose stop s2 # 停止服务
$ docker-compose restart s2 # 重启服务
$ docker-compose build s2 # 构建或者重新构建服务
$ docker-compose rm s2 # 删除并且停止php容器
$ docker-compose down # 停止并删除容器,网络,图像和挂载卷
# 当php.ini修改了,得 docker-compose restart s2
# 当nginx.conf修改了,得docker-compose restart s1
# 当docker-compose.yml中哪个服务修改了,得docker-compose up -d 修改的服务名
# 当Dockerfile修改了,得docker-compose up -d --build 修改的服务名
为了提高效率,对于使用频率较高的命令,写成别名的形式,打开~/.bashrc
或者~/.zshrc
文件,加上:
alias d1='docker exec -it c1 sh'
alias d2='docker exec -it c2 sh' # 如果想进入php服务器,命令行输入 d2 就行
alias d3='docker exec -it c3 bash'
alias d5='docker exec -it c5 sh'
alias delc='docker rm -f `docker ps -aq`' # 删除所有容器
alias deli='docker rmi -f `docker images -aq`' # 删除所有镜像
alias dc12345='docker-compose up -d s1 s2 s3 s4 s5' # 删除所有镜像
alias dc123='docker-compose up -d s1 s2 s3' # 删除所有镜像
如果发现的.env中修改了MYSQL_ROOT_PASSWORD的值,mysql镜像也重新生成了,如果密码仍为修改之前的,那是因为镜像尽管重新生成了,但数据库已储存在宿主机中了,得以原来的密码进入mysql后进行修改就行
容器时间在.env 文件中配置TZ
变量,所有支持的时区请看时区列表·维基百科或者PHP 所支持的时区列表·PHP 官网。
本Docker构建文件填坑,测试,文档编写,视频录制编辑,花了整整两天,你的打赏,是对我最大的鼓励
- https://github.com/jtreminio/php-docker
- https://github.com/cytopia/devilbox
- https://github.com/yeszao/dnmp
- https://github.com/guanguans/dnmp-plus
- https://github.com/shmilylbelva/dnmp
- https://github.com/Tinywan/dnmp
MIT