元芳, 我在 Win10 上用 Docker 肝了个 LNMP , 康康?

本文详细介绍了如何在Windows 10上使用Docker搭建LNMP环境,包括创建MySQL、PHP和Nginx容器。通过Docker Desktop for Windows,作者分享了从下载镜像、创建容器到配置挂载目录的全过程,特别强调了Windows环境下挂载目录的注意事项,并提供了安装PHP扩展的详细步骤。文章最后提到了一些常见的Docker使用技巧,如加速镜像下载和解决挂载目录无效的问题。
摘要由CSDN通过智能技术生成

元芳, 我在 Win10 上用 Docker 肝了个 LNMP , 康康?

难得难得, 看好咯, 就是我, Speauty, 对, 让你加班的 Bug 就是我写的. 比如这个, 让你领略一下 Docker 在 Win10 上安装 lNMP 的风骚. 一顿啪啪啪, 爽.

Docker Desktop for Windows , 用过的人都说好, 我也是其中一个.

创建 MySQL

二话不说, 操起手中的砖头, 对, 照着额头去, 看到了吗? 就是这般简单. 先下载个镜像, 我用的是 5.7 版本, 只能说不旧. 人狠话不多, 直接双手画圆. 先来一个 docker pull mysql:5.7 , 回头就把本地的目录结构建好. 本地目录主要是为了保存数据, 日志和配置文件(修改之后, 重启一下容器即可生效), 我的目录大概是这样的, mysql > data,logs,conf, 而且是放在 E 盘的, 听不懂不要紧, 你试试就知道了.

估摸, 差不多, 镜像应该下载好了, 那就回到终端, 要开始创建容器:

docker run --privileged=true \
-p 8848:3306 \
-v "...\mysql\logs":/var/log/mysql \
-v "...\mysql\conf":/etc/mysql/mysql.conf.d \
-v "...\mysql\data":/var/lib/mysql \
--name mysql-8848 \
-e MYSQL_ROOT_PASSWORD=root \
--restart=always -d \
mysql:5.7

分解完后, 说点什么? 啥? 这不是 Linux 的长命令分割方式么? 害, 没事儿, 我故意的, 这坑, 自己看着办. 当然, 挂载目录也是有坑的, 这里还是要唠叨两句. Windows 似乎真没有 Linux 系操作系统好用. 在 Windows 上创建容器时, 挂载目录, 为了不必要的麻烦, 路径都加上双引号, 劝你向善, 别去尝试裸奔, 或搞个单引号去诱惑它. 否则, 你就惨了, 什么路径无效, 挂载失败等等, 都会对你很热情的. 创建好之后, 干啥? 也没啥了, 看点小视频放松一下呗. 如果你不放心, 可以用的本地 MySQL 工具软件尝试连接一下.

创建 PHP

不接受反驳, PHP 是世界上最好的语言, 没有之一.

得, 别忽悠人, 搞紧的, 好好在你的流水线上装逼. 所以, 我选择了 alpine , 别问为什么, 你自己拉下来看看大小, 就会觉得蒙娜丽莎的微笑真是美妙. 还是和上面一样的操作, 一手目录结构, 一手拉取镜像. 还是比较长的镜像标签, docker pull php:7.3.16-fpm-alpine3.10 . 关于目录结构, 我就补充建了个扩展配置文件目录, 似乎也可以在其中放个用户配置文件, 应该会被加载的, 空了再去试试, php > confExtensions . 对了, 还有日志, 我这边好像忘了加, 操作也差不多, 找到相应路径, 对应起来即可. 还有一个, 不要忘了, 源码目录, 也要挂载到这个容器中哦, 具体原因, 自行查阅 PHP-FPM 的执行流程.

docker run -p 9000:9000 
--privileged=true 
-v "E:\GitWorks":/www 
-v "E:\Docker\php\confExtensions":"/usr/local/etc/php/conf.d" 
--restart=always -d 
--name php73 
php:7.3.16-fpm-alpine3.10

应该就好了, 速度还是十分可观. 怎么装扩展呢. 这里不再介绍常规的 pecl 安装, 关于 Docker 中的 PHP , 可是带有专有工具的. 首先你得搞一个 PHP 源码数据, 怎么搞? 关于扩展怎么安装? 怎么配置? 不慌, 稳, 主要就是几个命令, 这就带大家熟悉一下:

  • docker-php-source : 顾名思义, 对源码包进行管理
    • 创建并初始化 extract , 使用该技能后, 你将会发现 usr/src/php 这个目录的存在, 里面是不是很熟悉, PHP 的源码, 在安装其他扩展的时候需要把扩展包解压到 该目录下的 ext 目录进行下一步操作. 如果有对应扩展包目录的话. 可以直接进入对应扩展包目录进行配置和安装操作. 完整命令: docker-php-source extract .
    • 删除 delete , 这个比较狠, 直接删除源码包的大招. 此招一出, 昏天黑地, 对不起, 你可能就需要重新安装扩展了, 本人亲自试过. 那感觉, 很好很好. 这个技能直接被我打入冷宫, 用不召见的那种. 完整命令: docker-php-source delete .
  • docker-php-ext-configure : 配置扩展
    • 自从有了这个, 气也不喘了, 被安排的服服帖帖. 我用过一次, 和 ./configure --xxoo 相差不大. 不用你找什么 phpize 执行文件. 格式大概是这样的 docker-php-ext-configure ext-name --xxoo , 是不是很眼熟. 具体的, 就看我下面的操作.
  • docker-php-ext-install : 安装扩展
    • 配置都设置好了, 该干啥, 安装呗. 怎么看都比 sudo make && sudo make install 要少敲几个字母吧. 是的, 你没想错, 就是那一套, 哥们, 走呢, 还是走呢. 完整命令: docker-php-ext-install ext-name . 安装完了, 还顺便给你把配置文件创建好, 是不是超级贴心, 不过也只是引入了扩展, 该重启的步骤, 一个也不能少. 这就是 PHP-FPM .
  • docker-php-ext-enable : 激活扩展
    • 这个命令, 我感觉就没用过, 就是在开启扩展时需要用到. 请问在安装扩展之后, 已经自动给你开启了扩展, 什么时候才能用到这个命令. 完整命令: docker-php-ext-enable swoole .

命令介绍完了, 接下来该秀一下实际操作了吧. 如果这样你就大错特错了. 还得依赖撒. 假装我没用编译安装过环境. 至于哪些扩展呢, 你就坐好咯. apk add --no-cache --virtual tmpPacks m4 libbz2 perl autoconf pkgconf dpkg-dev dpkg libmagic file libgcc libstdc++ binutils gmp isl libgomp libatomic mpfr3 gcc musl-dev libc-dev g++ make re2c .phpize-deps , 对的, 没看错, 就这一套连招下去, 包你爽的不要不要. 至于事后嘛, 害, 我怎么就控制不住呢, 下一次, 下一次, 我绝不会心动. 没关系, 我帮你一把 apk del tmpPacks , 这个可以帮你消除记忆. 一直装逼, 一直爽, 嘿嘿, 咋就想不起来了呢, 继续盘Ta. 哦, 对了还有一个嘻嘻, 我也不清楚该不该和上面放在一起, 单独列了出来, apk --no-cache --virtual TestTmp add libmcrypt-dev zlib-dev curl-dev , 这是我在安装扩展时, 额外提醒我要做的安全措施. 下面, 灯光音乐, 摇晃的红酒杯, 走起:

  • 安装 ext 中已有的扩展, 以 bcmath 为例:
cd /usr/src/php/ext/bcmath && docker-php-ext-install bcmath
  • 安装非自带扩展, 就那我昨晚装的那几个, 做个示范
    • redis 扩展: 进行 redis 的扩展
    # 下载源码包(统一下载到 usr/src 目录下)
    wget http://pecl.php.net/get/redis-5.2.1.tgz
    # 解压源码包
    tar zxf redis-5.2.1.tgz
    # 迁移目录
    mv redis-5.2.1 /usr/src/php/etc/redis
    cd /usr/src/php/etc/redis
    docker-php-ext-install redis
    
    • yaf 扩展: 一款框架扩展, 鸟哥出品
    wget http://pecl.php.net/get/yaf-3.0.9.tgz
    tar zxf yaf-3.0.9.tgz
    mv yaf-3.0.9 /usr/src/php/ext/yaf
    cd /usr/src/php/ext/yaf
    docker-php-ext-install yaf
    
    • swoole 扩展: “面向生产环境的 PHP 异步网络通信引擎”
    wget http://pecl.php.net/get/swoole-4.4.16.tgz
    tar zxf swoole-4.4.16.tgz
    mv swoole-4.4.16 /usr/src/php/ext/swoole
    cd /usr/src/php/ext/swoole
    docker-php-ext-install swoole
    
    • mcrypt 扩展: 加密支持扩展库
    wget http://pecl.php.net/get/mcrypt-1.0.3.tgz
    tar zxf mcrypt-1.0.3.tgz
    mv mcrypt-1.0.3 /usr/src/php/ext/mcrypt
    cd /usr/src/php/ext/mcrypt
    docker-php-ext-install mcrypt
    
    • xlswriter 扩展: 一款 xlsx/csv 存取的高性能扩展
    wget http://pecl.php.net/get/xlswriter-1.3.4.tgz 
    tar zxf xlswriter-1.3.4.tgz 
    mv xlswriter-1.0.3 /usr/src/php/ext/xlswriter
    cd /usr/src/php/ext/xlswriter
    docker-php-ext-configure xlswriter --enable-reader
    docker-php-ext-install xlswriter
    

还有什么, 没想到, 已如此强大, 谁敢一战? 差点上头, 还有一个 composer . 这都 2020 , 还不用这个, 等着回去继承家产么? 荒谬, 还是回到 usr/src , 下载一个, curl -sS https://getcomposer.org/installer | php , 然后将它移到另一个目录下 mv composer.phar /usr/local/bin/composer , 然后配置成阿里源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ .

上面这些操作应该够普通开发者使用的. 还要提一下 composer , 我昨晚是装好了的, 今天开机一看, 没了. 好生嚣张. 其实也有 php composer 的容器, 然而, 我也试了一下, 和 PHP 容器的相关信息对不上, 是要 --link 操作么? 我后来没有再尝试过.

创建 Nginx

好说好说, 拉取镜像 docker pull nginx , 然后本地创建对应目录结构, 主要还是日志和配置文件, 这两个是没得说. 拉取好之后, 创建镜像即可, 问题不是很复杂, 注意连接 PHP 容器:

docker run -p 8808-8818:80-90 --privileged=true -v "E:\GitWorks":/www -v "E:\Docker\nginx\logs":/var/log/nginx -v "E:\Docker\nginx\conf":"/etc/nginx/conf.d" --name GitWorksServer --restart=always -d --link php73:php73 nginx:latest
看不懂, 也没关系, 坑着坑着, 就免疫了. 相信自己, 奥里给.


BUG 永恒, 举杯, 肝 TA

  1. 提高 Docker 镜像下载速度, 换上阿里云镜像加速器
    点击查看对应文档, 获取到相应镜像加速器链接后, 打开本地的 Docker DeskTop => Settings => Docker Engine => 在 registry-mirrors 中填上刚获取的连接 => Apply&Restart .

  2. 更改需要挂载到容器的盘符
    Docker DeskTop => Settings => Resources => FILE SHRARING => 选择盘符 => Apply&Restart .

  3. 更改镜像下载位置
    Docker DeskTop => Settings => Resources => ADVANCE => Disk image locatioin => 选择路径 => Apply&Restart .

  4. 挂载目录无效
    检测挂载目录是否在文件分享盘符之下, 默认是在系统盘下. 注意路径加上双引号.

  5. Alpine 系统换源
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories .

  6. 查看容器 IP
    docker inspect CONTAINER-NAME/ID-f={{.NetworkSettings.IPAddress}} .

  7. 创建 Redis 容器
    docker run --privileged=true -p 9494:9494 -v "E:\Docker\redis\data\9494":/data -v "E:\Docker\redis\conf":/etc/redis/ --name redis-9494 --restart=always -d redis redis-server /etc/redis/9494.conf .

  8. 开启 Hyper-V
    控制面板 => 程序 => 程序和功能 => 启用或关闭 Windows 功能 => 找到 Hyper-V 勾上 => 确定 & 重启.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值