终于能用 Docker 搭建一套自己的环境了(dnmp)

dnmp

怀着忐忑的心情上传了我的第一个github项目(https://github.com/MichealJl/dnmp
刚接触Docker没多久,这个练手的 希望大家多多指教

在此之前先要了解docker一些基本用法 我学习docker的记录:https://jlmvp.cn/

首先确保你安装了docker和docker-compose以及git

目前只加了php5.6 和php7.2两个版本切换,如需扩展请自行照猫画虎

开始

1、将项目clone到本地

2、进入dnmp将env-example 重命名为.env

3、配置env中你所需要设置的环境变量

4、在docker-compose.yml目录 执行docker-compose config 你可以看到完整配置信息

Image text

5、执行docker-compose up -d (额。。安装php的那些扩展挺慢的 你可以酌情 修改php目录下的Dockerfile,等用的到那些扩展的时候 再装)**

Image text

安装成功之后显示如下
Image text

6、修改nginx的配置文件 nginx/conf.d/default.conf

Image text

查看 容器php名称

docker ps | grep php |awk $'{print $2}'

7、重启nginx服务

8、在你的项目目录下创建index.php 输出phpinfo();

Image text

结尾提示 如果你使用了mysql8.0以上版本会报如下错误

connect error:The server requested authentication method unknown to the client

解决方法 进入mysql容器登录mysql

执行

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

flush privileges;

Gogs安装

执行docker-compose up -d

进入mysql容器创建Gogs数据库 CREATE DATABASE gogs CHARACTER SET utf8 COLLATE utf8_bin;

打开网页输入你的IP地址:你设置的Gogs端口号 进入安装安装向导页面

设置参数

Image text

Image text

Image text

本帖由系统于 19小时前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 24
Insua

为内蒙古老乡点赞!! :+1:

1个月前
j475523225

@Insua 共勉

1个月前

先赞再看 :grin:

刚好也在学 docker,感谢分享 :heart:

1个月前
j475523225

@FireRabbit 我也是初学docker者 😂 有问题 一起讨论

1个月前

自己修改 laradock 会让你更快更强

1个月前
j475523225

@WensonSmith 嗯 那个我开始试过,但是自己体验一下也挺好

1个月前
Aolinver

666,我也自己做了,不过楼主的更好,(laradock体质不够好)

1个月前
j475523225

@Aolinver :joy: 我也是 各种百度各种试

1个月前

反手就是一个赞

1个月前
j475523225

@MR_NOBODY 反手回你个赞

1个月前

networks是加入指定网络

1个月前
j475523225

@yangxiaopeipei 比如我这些镜像都加入了这同一个网络,具体有什么用或者帮助么

1个月前

在同一network下的各个容器可以互相访问,Host是你的service名称。有networks了,其实links就没有必要了,需要互访的应用加到同一network即可,不同network相互隔离。不要把所有的service加入到同一个network下,你现在所有的service都能互访。

我自己其实服务器上也搭了dnmp,只有nginx,php和mysql,我是让nginx和php加入了名为nginx的network,php和mysql加入了名为mysql的network,这样来实现隔离。安全上我觉得还是有必要的。

我也是才开始用docker,别人写的总是不顺心,就自己折腾了,我自己用着感觉还不错。等我有空了也弄个repo,hhh。

另外,php和nginx推荐使用基于alpine的镜像,能有效减少镜像大小。nginx的alpine镜像已经默认支持tls1.3,改好配置文件就启用了。

1个月前
j475523225

@zvonimirsun 感谢讲解 下次试试

1个月前
j475523225

@zvonimirsun 刚才试了一下 果然可以 :joy: 在同一个网络不需要link 我就当用link起了个别名吧。。。

3周前

@j475523225 赞一个!用你的项目搭建了起来,但是发现gd库好像有问题 .具体情况是:mews/captcha 验证码扩展包使用报错 Call to undefined function Intervention\Image\Gd\imagettfbbox() 查了下应该是gd未安装freetype . 作了如下改动
file
还是报相同的错误 大佬能更新下不 感谢

3周前
j475523225

@alaraveler

file

..谢谢提醒 这个我还没遇到过。。。
也是一顿百度 这是查到的并且试过了(https://www.liangzl.com/get-article-detail-28505.html)

安装结果

你安装完重启下php的容器

3周前
Krisji

狠强势

3周前

@j475523225 感谢讲解 已经可以了 :+1:

3周前

@j475523225 再请教下使用docker部署laravel laravel的配置文件 REDIS_HOST該填什么 直接填 docker-compose.yml 文件中配置的 links值 比如REDIS_HOST=redis 会报错

Predis\Connection\ConnectionException : php_network_getaddresses: getaddrinfo failed: Name or service not known [tcp://redis:6379]

这是我的redis配置 mysql也会遇到想通问题 应该是没有解析为对应ip 我用docker inspect 获取ip 替换后是可以运行的

以下是我的redis配置
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

2周前
j475523225

@alaraveler 你用这个查一下redis容器的名称 docker ps | grep redis |awk $'{print $11}' 把配置换成查出来的这个 试试

2周前
j475523225

@alaraveler 这个我真不知道 不过后来听了他的 我把link去掉了 发现 填写服务名称就能互相连接, 还没试过localhost 找时间试试

2周前

用localhost 不行 刚才理解错了 :joy:

2周前
j475523225

@alaraveler 错几次 就知道怎么回事了 :joy:

2周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!