本站前期主要是以宝塔面板为基础,手动搭建各种类型的网站,对新手小白而言非常不友好,就算是有明确的图文教程和视频教程,仍有人操作失误,导致各种安装问题接连不断。自打接触docker这种“万物皆可docker”的容器化技术后,开始沉迷于其中,并在短期内阅读学习相关学习资料及视频,最近推出了很多自制的docker镜像。这其中,我们借助shell
命令,开发了一些一键脚本,基于docker,交互式操作,体验非常友好。

Docker+ 一键脚本=至尊魔法师
优点汇总
- docker属性:万物皆可docker化
- docker镜像包含完整的程序运行环境
- 容器之间相互独立,同时运行多个wordpress都没问题(有空试下一键开启1000个wordpress)
- docker安装过程非常简单,基本秒速就可以搭建一个网站
- 一键脚本加持后:可自定义端口、密码、路径等关键属性交互式设置
- 一键脚本加持后:自动执行安装任务(就算是新机器,也能迅速得到最终效果)
- 一键脚本加持后:可自定义选择需要安装的程序版本
两者搭配后的现实意义:
- 不论新旧服务器、兼容现有环境,不懂docker、不懂代码都没关系
- 交互式操作,每个步骤都有提示说明
- 借助PWD还可以随时随地秒速搭建任意一个web程序
- 将复杂、多变、不同应用的命令,变成交互式可选择的123数字选项,大大简化代码记忆。
总之:如果说以往的docker可以一句话搭建web
(前提条件是你得准备docker环境,也就是说你得属性docker然后才能轻松搭建任意docekr应用。而docker+一键脚本
则基本无需任何前提环境,不论新买的服务器还是已有的服务器,都能自动匹配,关键位置出自动给出输入框、无需记忆各种程序的具体代码,仅仅输入123等数字选项,即可实现原本需要执行的特定的代码。整个过程一气呵成,非常畅快。
开发经历(案例)
案例一:萌化版oneindex (起步模仿篇)
说实话,docker化一个程序的想法,最开始想尝试的是servicestatus
但是多次失败后就耽搁了,后来通过阅读docker书籍,系统性的学习了相关知识后,开始搭建起一个docker应用来。
oneindex的dockerfile是根据hub.docke.com上参考无数个Dockerfile
后开始着手的,重点就是搞明白每个步骤执行的含义,所安装的组件意义等。完成这些之后,想要萌化版的oneindex,就得修改下源码。此时就得用到sed
命令,我也是边做边学,边上google查资料。最开始做比较痛苦,是在自己的专用测试服务器上测试的。

案例二:宝塔面板docker_mini版 (为刚性需求解决问题)
docker run -tid --name baota -p 80:80 -p 8888:8888 --restart always baiyuetribe/baota_mini
制作该镜像,完全是因为接触了PWD(免费公益服务器)后,为了适配其空间只有4GB而开发的mini版宝塔,内涵LNMP基础环境,可直接搭建基于宝塔面板的手动操作。

案例三:云上发卡、ZFAKA、风铃发卡的docekr化 (逐渐熟悉docker后的自由开发)
项目地址:https://hub.docker.com/u/baiyuetribe
熟悉docekr后,实际上手制作多个docker镜像后,就会有种万物皆可docker化的感觉。当然起步还得慢慢来,比如我做的cuteone
用python快速做了镜像,但是当时不太熟悉数据库对接,导致程序运行后仅仅停留在安装界面 :)等到我熟悉后,回过头来,惨剧是vscode本地的代码空白(难道我忘记保存了?)

说到以上这几个发卡程序,首先我们有过在宝塔面板上手动搭建的经历,通过github可查看程序运行的基础环境。云上发卡比较简单,无需复杂依赖,解决伪静态问题、web服务和应用程序、数据库连接即可;但是zfaka需要特殊的yaf扩展插件,为此折腾了两天时间,也顺带熟悉了LNMP的docker模板;风铃发卡涉及到larvae架构,因此就得按此模式寻找可行办法,github的高级搜索起了很大的帮助。
案例四:人人影视+在线播放(一键脚本)
为啥要搭配一键脚本?
这是一个很有意思的尝试,因为构建Dockerfile
的时候,经常用到exec
和shell
格式的命令。而且docker run的时候,必须执行的ENTRYPOINT
可用来自动执行容器启动后的基础命令,还有可被随时覆盖的CMD
命令,这就给了我思考的空间。

但是起初我对shell命令也是一片空白,尤其是编译dockerfile
里的run.sh
脚本的时候,根本不理解为啥正常的命令执行不正确。可能是shell命令太过简单,网上居然没找着入门可靠的书籍,看了一本书籍也是介绍的乱七八糟,无奈求助github,看完别人写的脚本后,才悟出其中的运行逻辑,因此,本站第一个一键脚本
就诞生了
bash <(curl -L -s https://raw.githubusercontent.com/Baiyuetribe/rrshare_docker/master/rrshare.sh)
该脚本自动判定是否安装了docekr,如果没有则执行安装docker环境。完成后才会正式安装人人程序
.我经常借此脚本,在PWD上搭建:随时可在线观看海外人人影视,非常nice.

后来,就是用脚本去控制更复杂的项目了,比如ZFAKA、MeEud系统。这两个除了前面人人影视的基础外,我加入了自定义端口、密码等,Meedu还加入了定时任务、supervisor监听队列。

通过一键脚本,仅仅一条命令就可以完成原本需要输入很多条命令或者在宝塔手动操作无数次的操作,这点非常有意义。因为对新手或者过了很久你再尝试搭建一个程序而言,一键脚本就变得非常有意思,因为你不需要任何准备,执行后按提示操作即可,过程可随时终止或者程序可随时启动停止,不必熟悉太多命令。
开发启示录
1.借助docker容器,快速搭建一个本地开发环境
我们都知道,神奇的docker打通了各种服务器系统(centos、unbuntu、debian等),也打通了我们个人的电脑windos端、mac端、lunnix端都可以安装docker。因此,有了docker后,所有docker化的应用都可以快速部署了。
此时,我们不必去理会开发者究竟是使用了哪些工具开发的程序。
上面是实现前提,下面则讲讲怎么实现代码编辑、实时预览。
- 使用
-v
参数挂载程序文件到本地, - 使用VScode等工具进行编辑
- 浏览器使用定时刷新扩展插件。可自动每几秒刷新,实现实时预览的效果
2. 服务端实现二次开发
上面的解决方案是大多数人的选择。但其实,服务端也可以实现。
- 使用
-v
参数挂载程序文件到服务器某个目录 - 使用docker版的vscode运行该目录
- 浏览器自动刷新插件
总结
本篇算是对最近几天学习的总结。由docker引发的一场自学实践的过程,主要学习了各种系统指令、shell命令、bash脚本编辑、docker系统学习等。熟练掌握了常见程序的docker化,以及一键脚本制作。因此,后期本站几乎不会再推出基于宝塔面板的手动搭建过程,也几乎不会再费述各种多行代码。都会采用基于docker的一键脚本取而代之。