docker实战部署(使用docker搭建一套开发环境全家桶的详细教程)
docker实战部署
使用docker搭建一套开发环境全家桶的详细教程DNMP介绍
DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一键安装程序。支持的服务丰富、功能强大、使用简单、兼容多平台。是适用于多端的一款docker开发与生产环境的PHP环境全家桶。
DNMP项目特点:
100%
开源100%
遵循Docker标准- 支持多版本PHP共存,可任意切换(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3)
- 支持绑定任意多个域名
- 支持HTTPS和HTTP/2
- PHP源代码、MySQL数据、配置文件、日志文件都可在Host中直接修改查看
- 内置完整PHP扩展安装命令
- 默认支持
pdo_mysql
、mysqli
、mbstring
、gd
、curl
、opcache
等常用热门扩展,根据环境灵活配置 - 可一键选配常用服务:
- 多PHP版本:PHP5.4、PHP5.6、PHP7.1-7.3
- Web服务:Nginx、Openresty
- 数据库:MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch
- 消息队列:RabbitMQ
- 辅助工具:Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo
- 实际项目中应用,确保
100%
可用 - 所有镜像源于Docker官方仓库,安全可靠
- 一次配置,Windows、Linux、MacOs皆可用
- 支持快速安装扩展命令
install-php-extensions apcu
- 具体使用文档可参考:https://gitee.com/bruce_qiq/dnmp/blob/master/README.md。文档中已经有一个明确的使用教程。接来下,主要针对安装完之后,做的一些基本操作做一个简单的演示,因为部分操作在源文档不是很详细,并且有明显的坑。主要记录几个功能:
1.修改无法连接MySQL问题。
2.配置NGINX虚拟域名。
3.安装PHP扩展。
因为个人打算持续使用该包来做自己的开发环境,后面会针对不同的问题做总结,同时也会根据原主的仓库基础下,进行迭代更新。欢迎关注。公号卡二条的技术圈
修改MySQL连接问题
由于dnmp在安装时,是将本地的3305端口映射到MySQL容器的3306端口,因此我们在连接是需要连接3305端口。
在示例代码的www目录下面,有一个localhost目录,我们找到测试MySQL的一段代码,如下:
// 检测MySQL服务 function getMysqlVersion() { if (extension_loaded('PDO_MYSQL')) { try { $dbh = new PDO('mysql:host=192.168.2.103;dbname=mysql', 'root', '123456'); $sth = $dbh->query('SELECT VERSION() as version'); $info = $sth->fetch(); } catch (PDOException $e) { return $e->getMessage(); } return $info['version']; } else { return 'PDO_MYSQL 扩展未安装 ×'; } }
我们只需要修改为如下代码:
// 检测MySQL服务 function getMysqlVersion() { if (extension_loaded('PDO_MYSQL')) { try { $dbh = new PDO('mysql:host=192.168.2.103;port=3305;dbname=mysql', 'root', '123456'); $sth = $dbh->query('SELECT VERSION() as version'); $info = $sth->fetch(); } catch (PDOException $e) { return $e->getMessage(); } return $info['version']; } else { return 'PDO_MYSQL 扩展未安装 ×'; } }
这里的192.168.2.103是我们宿主机的ip,根据你实际的情况填写即可。可以通过ifconfig查看。如果是Windows系统,则使用ipconfig查看。
ifconfig
配置NGINX域名
在配置之前,我们需要明确这么几个东西。我们源码目录位置、NGINX配置文件位置、NGINX日志文件位置。特别注意:
1.我们可以通过截图看见,conf.d目录下面存在两个配置文件。这两个就是我事先配置好的域名文件。这个文件,是通过NGINX容器映射到本地磁盘。因此可以通过宿主机进行查看。
2.logs文件就是NGINX的error,access等相关日志文件,同样的是在NGINX容器中映射到宿主机的。
3.这里的www就是程序源码路径,我们的所有程序源码都放在这里即可。
对于NGINX域名配置文件,推荐进入到容器进行编写,而不是通过在宿主机进行编写。
第一步:进入我们的www目录,安装一个应用程序。这里推荐使用compser来安装,对于composer的使用,也可以参考文档进行简单配置即可使用。
ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● composer create-project topthink/think=5.1.35 tp5 Creating a "topthink/think=5.1.35" project at "./tp5" Installing topthink/think (v5.1.35) - Installing topthink/think (v5.1.35): Loading from cache Created project in /app/tp5 Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Installing topthink/think-installer (v2.0.0): Loading from cache - Installing topthink/framework (v5.1.39): Loading from cache Writing lock file Generating autoload files ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● ll total 0 drwxr-xr-x 3 ert staff 96B 9 6 22:02 localhost drwxr-xr-x 19 ert staff 608B 9 8 22:26 tp5
这样本地就按照好了一个tp5的框架了。第二步:进入NGINX容器,通过docker ps查看docker容器的container-id,使用docker exec命令进入到容器内部。
ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5f9cd08aa2 dnmp_php "docker-php-entrypoi…" 27 hours ago Up About an hour 9000/tcp, 9501/tcp php 8bc44fc8c578 dnmp_nginx "/docker-entrypoint.…" 27 hours ago Up 26 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx f02ad53bf14d mysql:5.7.28 "docker-entrypoint.s…" 27 hours ago Up 26 hours 33060/tcp, 0.0.0.0:3305->3306/tcp mysql5 ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● docker exec -it 8bc44fc8c578 /bin/sh /www # ls localhost tp5
进入NGINX配置文件路径
/ # cd /etc/nginx/ /etc/nginx # ls -la total 60 drwxr-xr-x 1 root root 4096 Sep 8 20:23 . drwxr-xr-x 1 root root 4096 Sep 7 19:34 .. drwxr-xr-x 5 root root 160 Sep 8 20:05 conf.d -rw-r--r-- 1 root root 429 Sep 6 22:02 fastcgi-php.conf -rw-r--r-- 1 root root 1077 Jul 8 00:14 fastcgi.conf -rw-r--r-- 1 root root 1062 Sep 6 22:02 fastcgi_params -rw-r--r-- 1 root root 2837 Jul 8 00:14 koi-utf -rw-r--r-- 1 root root 2223 Jul 8 00:14 koi-win -rw-r--r-- 1 root root 5231 Jul 8 00:14 mime.types lrwxrwxrwx 1 root root 22 Jul 11 04:27 modules -> /usr/lib/nginx/modules -rw-r--r-- 1 root root 760 Sep 6 22:02 nginx.conf drwxr-xr-x 2 root root 4096 Sep 8 20:23 rewrite -rw-r--r-- 1 root root 636 Jul 8 00:14 scgi_params -rw-r--r-- 1 root root 664 Jul 8 00:14 uwsgi_params -rw-r--r-- 1 root root 3610 Jul 8 00:14 win-utf
conf.d就是我们的域名配置路径,nginx就是默认的配置文件。
创建一个域名配置文件。
/etc/nginx # cd conf.d/ && touch tp5.conf /etc/nginx/conf.d # ls -la total 16 drwxr-xr-x 5 root root 160 Sep 8 20:05 . drwxr-xr-x 1 root root 4096 Sep 8 20:23 .. -rw-r--r-- 1 root root 48 Sep 6 22:02 .gitignore -rw-r--r-- 1 root root 2254 Sep 6 22:02 localhost.conf -rw-r--r-- 1 root root 505 Sep 8 20:29 tp5.conf
配置tp5.conf文件。复制如下内容:
server { listen 80; server_name tp5.com; root /www/tp5/public; index index.php; #NGINX日志文件,如果是其他的域名,直接替换nginx.tp5.com.xx.log文件名称即可。 access_log /var/log/nginx/nginx.tp5.com.access.log; error_log /var/log/nginx/nginx.tp5.com.error.log; #thinkphp5的url重写文件,避免重复编写,单独放一个文件,以后其他的thinkphp项目,直接引入即可。 include rewrite/thinkphp.conf; location ~ \.php$ { # 这里的php是php容器的名称,可以改为实际的ip,不建议使用,因为ip会变化。 fastcgi_pass php:9000; include fastcgi-php.conf; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
测试域名配置,并重启NGINX服务。
/etc/nginx/conf.d # nginx -t && nginx -s reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful /etc/nginx/conf.d #
将域名添加到宿主机的host文件。
访问测试
PHP扩展安装
在搭建docker环境时,PHP的Redis扩展默认是没安装,这里就以Redis扩展为例。
由于内置了部分扩展(具体有哪些扩展,参考上面提到的使用文档),因此直接使用命令安装即可。
install-php-extensions redis
测试扩展
/www # php --ri redis redis Redis Support => enabled Redis Version => 5.3.1 ......
总结
到此这篇关于使用docker搭建一套开发环境全家桶的文章就介绍到这了,更多相关docker搭建开发环境全家桶内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- 使用TLS加密通讯远程连接Docker的示例详解(使用TLS加密通讯远程连接Docker的示例详解)
- docker自动入门教程(Docker Machine深入详解)
- docker部署redis集群查看版本(docker下的 redis 之持久化存储详解)
- docker如何进入容器(详解如何进入、退出docker容器的方法)
- 查看docker image版本(解决docker images 镜像消失的问题)
- 在docker中运行springboot(Linux Docker运行springboot项目的步骤详解)
- docker中mysql连接命令(docker 如何修改mysql的root密码)
- docker容器启动后怎么进入(Docker 退出container后保持继续运行的操作)
- dockerfile深度解析(Dockerfile文本文件使用方法实例解析)
- 安全进入docker容器的方法(使用docker部署一个简单的c/c++程序的方法)
- dockervolume迁移工具(Docker中数据卷volume管理的两种方式)
- docker同步宿主机配置(docker容器间跨宿主机通信-基于overlay的实现方法)
- dockerhub镜像排行(DockerHub 镜像仓库的使用详解)
- docker部署oracle(Docker安装Oracle_11g的方法)
- 运行docker时提示端口已被占用(docker 突然不能被外网访问的解决方案)
- centosdocker镜像安装mysql(linux下利用Docker安装mysql的步骤)
- 萌娃唱《白龙马》走红,那生动的小表情,网友直呼 简直是戏精(萌娃唱白龙马走红)
- 朱鹤松被不断认可,凤凰传奇玲花喊话岳云鹏,索要老朱演出门票(朱鹤松被不断认可)
- 元宵晚会槽点多,芒果台上来就假唱,岳云鹏不说相声改评书了(元宵晚会槽点多)
- 岳云鹏跟凤凰传奇谈心,说出了人生中最重要的三个人,这才成功(岳云鹏跟凤凰传奇谈心)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
- Top 3 JSHS《运动与健康科学 英文 》跻身SCI体育学期刊世界前三(Top3JSHS运动与健康科学)
热门推荐
- linuxmysql怎么设置root密码(Linux mysql-5.6如何实现重置root密码)
- pythoncsv格式转换(Python把对应格式的csv文件转换成字典类型存储脚本的方法)
- css 中border基本语法(详解CSS的border边框属性及其在CSS3中的新特性)
- mysql自增主键创建过程(深入谈谈MySQL中的自增主键)
- SQL Server变量
- python常用的属性和方法(Python进阶之@property动态属性的实现)
- dedecms安装配置(浅析织梦dedecms三个最重要的安全设置)
- MongoDB优化器profile
- sql server锁原理(Sql Server 死锁的监控分析解决思路)
- python中if判断数据类型(基于python if 判断选择结构的实例详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9