资讯专栏INFORMATION COLUMN

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

yintaolaowanzi / 1765人阅读

摘要:因为站点的采用自签名方式,所以浏览器有安全提示,继续访问就可以了,自己的站点用第三方认证证书替换即可。这是因为代码是在容器中,容器启动时会自动在中加上就是说,自动指向了容器动态生成的。则是跨容器访问,参数用指定的名称,端口用。

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

安装docker

新版的docker for mac 下载地址docker-ce-desktop-mac,不需要安装docker toolbox ,安装好后大概是这样的,可以在终端测试

</>复制代码

  1. $ docker -v
  2. $ docker-compose -v
修改docker 镜像仓库

首先是到阿里云获取专属加速地址,打开docker->preferences->Daemon->Registry mirrors 点击加号,粘贴刚刚获取到的加速地址,点击Apply & Restart。

使用git快速获取lnmp

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

</>复制代码

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

即开始安装资源,如下图

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

站点部署

本文有默认加了两个站点: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目录结构

</>复制代码

  1. .
  2. ├── conf 配置目录
  3. │ ├── conf.d 站点配置文件目录
  4. │ │ ├── certs SSL认证文件、密钥和加密文件目录
  5. │ │ │ └── site2 站点2的认证文件目录
  6. │ │ ├── site1.conf 站点1 Nginx配置文件
  7. │ │ └── site2.conf 站点2 Nginx配置文件
  8. │ ├── my.cnf MySQL配置文件
  9. │ ├── nginx.conf Nginx通用配置文件
  10. │ ├── php-fpm.d PHP-FPM配置目录
  11. │ │ └── www.conf PHP-FPM配置文件
  12. │ ├── php.ini PHP配置文件
  13. ├── docker-compose.yml 默认容器启动配置文件
  14. ├── docker-compose54.yml php5.4容器启动配置文件
  15. ├── docker-compose56.yml php5.6容器启动配置文件
  16. ├── log 日志目录
  17. │ ├── mysql.slow.log MySQL日志
  18. │ ├── nginx.error.log Nginx日志
  19. │ ├── nginx.site1.error.log
  20. │ ├── nginx.site2.error.log
  21. ├── mysql MySQL数据文件目录
  22. ├── php PHP版本目录
  23. └── www 站点根目录
  24. ├── site1 站点1根目录
  25. └── site2 站点2根目录
MYSQL说明

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

</>复制代码

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

输入密码,就可以进入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 这个提示)

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

</>复制代码

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

依次进行如下操作

</>复制代码

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

mysql连接问题解决。

修改docker-compose.yml

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

</>复制代码

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

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

使用Redis

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

</>复制代码

  1. #源码安装方式
  2. #php7 can install
  3. ENV PHPREDIS_VERSION 4.0.0
  4. RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz
  5. && tar xfz /tmp/redis.tar.gz
  6. && rm -r /tmp/redis.tar.gz
  7. && mkdir -p /usr/src/php/ext
  8. && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis
  9. && docker-php-ext-install redis
  10. && rm -rf /usr/src/php

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

</>复制代码

  1. #PECL安装方式
  2. #php5 can install
  3. #添加扩展 redis pecl方式
  4. RUN apk add --no-cache --update libmemcached-libs zlib
  5. RUN set -xe
  6. && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS
  7. && pecl install -o -f redis
  8. && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
  9. && rm -rf /usr/share/php
  10. && rm -rf /tmp/*
  11. && apk del .phpize-deps

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

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

</>复制代码

  1. connect("192.168.1.11",6379);//修改成自己的ip
  2. $redis->set("name","青波");
  3. echo $redis->get("name");
  4. //检测是否连接成功

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28764.html

相关文章

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

    摘要:因为站点的采用自签名方式,所以浏览器有安全提示,继续访问就可以了,自己的站点用第三方认证证书替换即可。这是因为代码是在容器中,容器启动时会自动在中加上就是说,自动指向了容器动态生成的。则是跨容器访问,参数用指定的名称,端口用。 项目地址https://github.com/shmilylbel... 安装docker 新版的docker for mac 下载地址docker-ce-de...

    Doyle 评论0 收藏0
  • mac利用docker搭建lnmp开发环境

    摘要:因为站点的采用自签名方式,所以浏览器有安全提示,继续访问就可以了,自己的站点用第三方认证证书替换即可。这是因为代码是在容器中,容器启动时会自动在中加上就是说,自动指向了容器动态生成的。则是跨容器访问,参数用指定的名称,端口用。 项目地址https://github.com/shmilylbel... 安装docker 新版的docker for mac 下载地址docker-ce-de...

    vincent_xyb 评论0 收藏0
  • 分解dockerlnmp环境搭建中的作用

    摘要:如果不用我们可能将上述讲的命令每搭建一次就需要执行一遍,有没有能统一管理的有,就是在环境搭建中的作用快速创建镜像,快速创建并运行容器,实现统一管理。 前言 初学者在dcoker学习过程中,可能不太清楚docker中那么多的命令,参数,工具在lnmp环境搭建中起了什么作用,下面跟着我来熟悉一下。(本文面向的是不怎么熟悉linux的:phper) 镜像,容器,仓库 镜像:Docker 镜像...

    tommego 评论0 收藏0

发表评论

0条评论

yintaolaowanzi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<