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

  • 创建 MySQL
  • 创建 PHP
  • 创建 Nginx

难得难得, 看好咯, 就是我, 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 勾上 => 确定 & 重启.

元芳, 我在 Win10 上用 Docker 肝了个 LNMP , 康康?相关推荐

  1. Win10上运行Docker

    1. 前言 Docker最近推出了可以运行在Win10和Mac上的稳定版本,让我们赶紧来体验一下. Docker发布Mac和Windows 的目标非常简单--开发者可以更加简单方便地在研发机器上使用D ...

  2. win10上的docker怎么设置开机不要自动启动 [问题点数:20分,结帖人xyq1986]

    次win开机都自动启动docker,感觉很耗资源,docker只是有时开发时需要用到, 在docker的setting上的Start Docker Desktop when you log in取消了 ...

  3. win10安装dockerx docker的常见命令 可以子腾讯云上做做练习

    参考资料 https://www.jianshu.com/p/e8427d12b3e0 百度搜索  docker hub  可以查找  你需要的镜像 https://hub.docker.com/?u ...

  4. 10分钟教你如何在win10上操作win10上的虚拟机中的docker容器,保证学会

    欢迎关注微信公众号 山人彤 .海量资源免费送 1 背景介绍 小秦同学这几天,在进行分布式系统的学习,难免需要搭建各种集群.但是,小秦同学非常穷,小秦同学的导师也非常地穷,没有一个分布式集群来学习.所以 ...

  5. win10 在git bash上使用docker

    想在win10上装MySQL,才发现是个大坑,各种报错,只好用docker在win10上运行MySQL >>> docker pull mysql Using default tag ...

  6. docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...

    我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能 2020-06-20 11:28:38 57点赞 415收藏 74评论 你是AMD Yes党?还 ...

  7. docker wsl2启动不了_在window上安装docker的方法

    前一阵子公司要在线上部署docker,做完之后我就想在我的win10上面也装一个,在这个过程中遇到了一些问题,这里是对这些问题的一个笔记. 第一步:安装WSL2 docker需要通过WSL2才能运行, ...

  8. Win10家庭版安装docker(WSL与WSL2两种安装方式)

    Win10家庭版安装docker 背景 WSL方式安装(与WSL2可选其一) 系统要求 伪装成win10专业版 开启Containers 开启Hyper-V WSL2方式安装(与WSL可选其一) 系统 ...

  9. win10 家庭版安装 docker for windows

    从官网下载:https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe 在 win10 家庭版上安装 d ...

最新文章

  1. Maven整合SSM测试
  2. python电子相册制作代码大全_20 行 Python 代码即可制作精美证件照
  3. PHP 入门 - 1.语言基础
  4. 大话数据结构:散列表
  5. [转] DevExpress 第三方控件汉化的全部代码和使用方法
  6. Ext 与 Jquery 的结合应用
  7. Python Django之GET请求和POST请求及响应处理
  8. I—爆炸的符卡洋洋洒洒(不模不行的DP)
  9. flex white-space: nowrap,撑大盒子问题
  10. 天池实验室-Task03-Python入门(下)
  11. mysql5.5启动报错:The server quit without updating PID file ([FAILED]localhost.localdomain.pid)....
  12. linux activemq修改端口号,linux下 activemq集群配置
  13. 机器学习--支持向量机实战(四)核函数实现
  14. [Linux] sed编辑器
  15. apache .htaccess 转化nginx工具
  16. 微信群聊在哪个服务器,咱们谈谈微信群,为什么很多的聊天群变得越来越冷漠了...
  17. WCDMA中的CQI
  18. java根据书签添加内容_Java PDF书签——添加、编辑、删除、读取书签
  19. IPV4的特殊地址(包括私网地址)
  20. 基于jsp的KTV管理系统mysql

热门文章

  1. 计算机图形学:二维图形的几何变换(算法原理及代码实现)
  2. python运维工程师前景及待遇_做运维工程师有前途吗?
  3. arduino nano烧录出错
  4. 芯片制造:巨亏前行 行业标杆
  5. 无货源淘宝开网店可靠吗?优势在哪里?前景怎样
  6. ABAP使用BDC录屏实现供应商付款功能(F-02)
  7. C语言多线程之“哲学家就餐”问题
  8. 将SoundCloud API与Jav​​aScript SDK结合使用
  9. android studio 配置+安装
  10. mp9486电源经典应用电路