当前位置:首页 > 文章列表 > 数据库 > MySQL > mac上利用docker搭建lnmp开发环境

mac上利用docker搭建lnmp开发环境

来源:SegmentFault 2023-02-23 13:58:47 0浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《mac上利用docker搭建lnmp开发环境》,聊聊MySQL、docker、Redis、nginx、PHP,我们一起来看看吧!

项目地址https://github.com/shmilylbel...

安装docker

新版的docker for mac 下载地址docker-ce-desktop-mac,不需要安装docker toolbox ,安装好后大概是这样的

docker
,可以在终端测试

$ docker -v
$ docker-compose -v

修改docker 镜像仓库

首先是到阿里云获取专属加速地址

阿里云Docker官方镜像
,打开docker->preferences->Daemon->Registry mirrors 点击加号,粘贴刚刚获取到的加速地址,点击Apply & Restart。

使用git快速获取lnmp

进入到当前用户mac终端,以次执行

$ git clone https://github.com/shmilylbelva/dnmp.git
$ cd dnmp
$ docker-compose up

即开始安装资源,如下图

,完成以后可以在浏览器中访问localhost,出现以下界面代表ok。

localhost

站点部署

本文有默认加了两个站点:www.site1.com(同localhost)和www.site2.com。

要在本地访问这两个域名,需要修改你的hosts文件,添加以下两行:

127.0.0.1 www.site1.com
127.0.0.1 www.site2.com
其中,www.site2.com为支持SSL/https和HTTP/2的示例站点。

因为站点2的SSL采用自签名方式,所以浏览器有安全提示,继续访问就可以了,自己的站点用第三方SSL认证证书替换即可。

如果只用到站点1,把站点2相关的目录和配置文件删除:

./conf/nginx/conf.d/certs/site2/
./conf/nginx/conf.d/site2.conf
./www/site2/
重启容器内的Nginx生效:

docker exec -it dlnmp_nginx nginx -s reload

dnmp目录结构

.
├── conf                        配置目录
│   ├── conf.d              站点配置文件目录
│   │   ├── certs           SSL认证文件、密钥和加密文件目录
│   │   │   └── site2       站点2的认证文件目录
│   │   ├── site1.conf      站点1 Nginx配置文件
│   │   └── site2.conf      站点2 Nginx配置文件 
│   ├── my.cnf              MySQL配置文件           
│   ├── nginx.conf          Nginx通用配置文件
│   ├── php-fpm.d           PHP-FPM配置目录
│   │   └── www.conf        PHP-FPM配置文件
│   ├── php.ini             PHP配置文件
├── docker-compose.yml        默认容器启动配置文件
├── docker-compose54.yml      php5.4容器启动配置文件
├── docker-compose56.yml      php5.6容器启动配置文件
├── log                         日志目录
│   ├── mysql.slow.log                   MySQL日志
│   ├── nginx.error.log                   Nginx日志
│   ├── nginx.site1.error.log          
│   ├── nginx.site2.error.log           
├── mysql                       MySQL数据文件目录
├── php                          PHP版本目录
└── www                         站点根目录
    ├── site1                   站点1根目录
    └── site2                   站点2根目录

MYSQL说明

在docker-compose.yml文件中,我们指定了MySQL数据库root用户的密码为123456。
所以,我们就可以在主机中通过:

$ mysql -h 127.0.0.1 -u root -p  #linux中
#在mac中需要先切换到mysql容器
$ docker container ls  #列出容器列表
$ docker exec -it 775c7c9ee1e1 /bin/bash  #其中的容器id不用输入完整的mysql容器id,一般3位就能区分。
$ mysql -h 127.0.0.1 -uroot -p

输入密码,就可以进入MySQL命令行。

mysql

说明:这里MySQL的连接主机不能用localhost,因为MySQL客户端默认使用unix socket方式连接,应该直接用本地IP。
在PHP代码中的使用方式与在主机中使用稍有不同,如下:
$pdo = new PDO('mysql:host=mysql;dbname=site1', 'root', '123456');
其中,host的值就是在docker-compose.yml里面指定的MySQL容器的名称。
这是因为PHP代码是在FPM容器中,FPM容器启动时会自动在/etc/hosts中加上:
172.17.0.2 mysql 11e55f91c4c3 dnmp_mysql
就是说,mysql自动指向了MySQL容器动态生成的IP。
注意,这里用php进行mysql连接测试会失败(在docker-compose up的时候注意到存在mbind:Operation not permitted 这个提示)

mbind:Operation not permitted

,所以还需要处理上述问题。
进入刚刚的mysql终端,内容大致如下。host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码

mysql> select host,user,plugin,authentication_string from mysql.user;    
+-----------+------------------+-----------------------+------------------------------------------------------------------------+  
| host      | user             | plugin                | authentication_string                                                  |  
+-----------+------------------+-----------------------+------------------------------------------------------------------------+  
| %         | root             | caching_sha2_password | $A$005$^]RQB}j~t!      .#v)3.UogPRFu8VJA5/GKEbK5edEQlMT5sHw2n72zYJNlIbo3 |  
| localhost | mysql.infoschema | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                              |  
| localhost | mysql.session    | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                              |  
| localhost | mysql.sys        | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE                              |  
| localhost | root             | caching_sha2_password | $A$005$Y6&q!59^Fmh)@-6TG58J3F5+3I/HI9L|JCadNG+-+d6W+1D_UFW+7MRD7F3 |  
+-----------+------------------+-----------------------+------------------------------------------------------------------------+  

依次进行如下操作

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'newpassword'; 
#更新一下用户的密码 root用户密码为newpassword  
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  
Query OK, 0 rows affected (0.06 sec) 

mysql连接问题解决。

修改docker-compose.yml

如果容器已经生成,回头再编辑docker-compose.yml,用
docker-compose up
命令会直接启动原来的容器,修改的内容不会体现在启动的容器里。
所以,要使修改的docker-compose.yml生效,需要以下4步:

$ docker stop dnmp_nginx                      # 第一步:停止容器
$ docker rm dnmp_nginx                        # 第二步:删除容器
# !!第三步:重启Docker服务!!
$ docker-compose up -d --no-deps --build mysql  # 第四步:重新启动容器

其中最后一条命令参数作用:/
-d:后台执行
--no-deps:不启动link的容器
--build:启动容器前先构建镜像

使用Redis

Redis使用和MySQL类似。
不过需要注意的是在./php/php72中的Dockerfile末尾的

#源码安装方式
#php7 can install

ENV PHPREDIS_VERSION 4.0.0
RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
    && docker-php-ext-install redis \
    && rm -rf /usr/src/php

如果是php5.X那么这里应该是这样的(需要自己添加到对应的Dockerfile中,然后再docker-compose up)

#PECL安装方式
#php5 can install

#添加扩展 redis pecl方式
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe \
    && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
    && pecl install -o -f redis  \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
    && rm -rf /usr/share/php \
    && rm -rf /tmp/* \
    && apk del  .phpize-deps

在主机和容器内部都通过地址127.0.0.1,端口6379访问。

PHP则是跨容器访问,host参数用redis(links指定的名称),端口用6379。
修改site2的index.php文件内容如下

<?php $redis = new Redis();
    $redis->connect('192.168.1.11',6379);//修改成自己的ip
    $redis->set('name','青波');
    echo $redis->get('name');
        //检测是否连接成功

浏览器访问www.site2.com,出现‘青波’即代表redis扩展正常。

理论要掌握,实操不能落!以上关于《mac上利用docker搭建lnmp开发环境》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
上一篇
MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
Laravel Mysql SQLSTATE[42000]: Syntax error or access violation
下一篇
Laravel Mysql SQLSTATE[42000]: Syntax error or access violation
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    514次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    499次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • SEO  AI Mermaid 流程图:自然语言生成,文本驱动可视化创作
    AI Mermaid流程图
    SEO AI Mermaid 流程图工具:基于 Mermaid 语法,AI 辅助,自然语言生成流程图,提升可视化创作效率,适用于开发者、产品经理、教育工作者。
    590次使用
  • 搜获客笔记生成器:小红书医美爆款内容AI创作神器
    搜获客【笔记生成器】
    搜获客笔记生成器,国内首个聚焦小红书医美垂类的AI文案工具。1500万爆款文案库,行业专属算法,助您高效创作合规、引流的医美笔记,提升运营效率,引爆小红书流量!
    593次使用
  • iTerms:一站式法律AI工作台,智能合同审查起草与法律问答专家
    iTerms
    iTerms是一款专业的一站式法律AI工作台,提供AI合同审查、AI合同起草及AI法律问答服务。通过智能问答、深度思考与联网检索,助您高效检索法律法规与司法判例,告别传统模板,实现合同一键起草与在线编辑,大幅提升法律事务处理效率。
    614次使用
  • TokenPony:AI大模型API聚合平台,一站式接入,高效稳定高性价比
    TokenPony
    TokenPony是讯盟科技旗下的AI大模型聚合API平台。通过统一接口接入DeepSeek、Kimi、Qwen等主流模型,支持1024K超长上下文,实现零配置、免部署、极速响应与高性价比的AI应用开发,助力专业用户轻松构建智能服务。
    678次使用
  • 迅捷AIPPT:AI智能PPT生成器,高效制作专业演示文稿
    迅捷AIPPT
    迅捷AIPPT是一款高效AI智能PPT生成软件,一键智能生成精美演示文稿。内置海量专业模板、多样风格,支持自定义大纲,助您轻松制作高质量PPT,大幅节省时间。
    577次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码