哈Ha!
几个月前,我在FrontendConf 2019大会上发表了有关前端的Docker报告的演讲,并希望为那些喜欢阅读多于倾听的人制作一份报告的小抄本。
我邀请您来吸引所有Web开发人员,尤其是前端人员。
目录内容
- 前端的Docker。 第1部分。为什么?
- 前端的Docker。 第2部分。您是什么?
- 前端的Docker。 第3部分。一些食谱
攀登Docker
Docker并不是一个新工具,它于2013年3月首次发布,从那时起,它的受欢迎程度一直在增长。

在这里,我们看到对Node.js的请求频率已经达到平稳状态,并且没有任何变化,而对Docker的请求却继续增加。

该玩具在Dev ++部分的RIT ++ 2019大会上。 以我的经验,没有一个DevOps会议没有关于Docker的报告,就像前端会议也没有关于比较框架 , 设置Webpack和专业倦怠的报告一样 。
让我们在前端聚会中也开始谈论这项技术。

这是网站站长路线图 。 左侧是任何开发路径所需的技能。 确实,很难想象有一个不了解Git,终端或不了解HTTP的优秀Web开发人员。
Docker也出现在这里,但是在DevOps开发分支的肠子中,它位于基础结构中,作为代码-> Containers块。
但是我们知道, Docker不仅是开发工具,还是开发工具。 而且,我认为,过了一会儿,他就有机会进入任何路径的必填部分,并成为许多前端开发人员空缺中的强制性要求。
可以说我们现在生活在Docker时代 。 因此,如果您是前端开发人员并且尚未见过他,那么我将告诉您为什么这样做。
怎么了
案例1.提升后端
我们可以考虑的第一个也是最有用的情况是在舒适的Macbook上启动API。 是的,我们非常了解我们的技术,但是部署第三方软件始终不是一项容易的测试。
在我们的一个项目中,前端开发人员需要在计算机上安装这样的套件,以便API可以工作:
* go1.11 * MySQL * Redis * Elasticsearch * Capistrano * syslog * PostgreSQL
幸运的是,我们有使用README文件部署项目的说明。 他们看起来像这样:
1. GVM (https://github.com/moovweb/gvm) 2. `gvm install go1.11.13 --binary` 3. `gvm use go1.11.13 --default` 4. golang (`gvm linkthis`) 5. `gb` `go get github.com/constabulary/gb/...` 6. `git config --global url."git@git.example.com:".insteadOf "https://git.example.com/"` 7. `gb vendor restore` 8. 9. `npm run build` (`npm run build:dev` ) 10. `npm start`
像这样:
## Elasticsearch 1. Elasticsearch `brew install elasticsearch` - macOS ( java) 2. * https://github.com/imotov/elasticsearch-analysis-morphology , `/usr/local/Cellar/elasticsearch/2.3.3/libexec/bin/plugin install http://dl.bintray.com/content/imotov/elasticsearch-plugins/org/elasticsearch/elasticsearch-analysis-morphology/2.3.3/elasticsearch-analysis-morphology-2.3.3.zip` - * `brew services restart elasticsearch` 3. `rake environment elasticsearch:import:model CLASS='Tag' FORCE=y ` `rake environment elasticsearch:import:model CLASS='Post' FORCE=y` , ## Postgres comments db 1. `psql -U postgres -h localhost` 2. `create database comments_dev;` ## Redis install and start 1. `brew install redis` 2. `brew services start redis`
您如何看待,新手开发人员花了多长时间部署项目并开始执行任务?
大约一个星期。
自然地,并不是所有的终端命令都是第一次通过,很多时候指令变得过时了。
它被认为是正常的,适合所有人。 也就是说,要在1小时的工作时间内完成一项功能,首先需要花费40个小时在本地部署所有组件。
现在,带有所有开发服务的项目部署看起来像这样,并且冷启动大约需要10分钟 。
$ docker-compose up api ... Listening localhost:8080
所有服务部署命令都是在Docker映像组装期间执行的。 它们是自动化的,不能过时。
情况2.稳定性
第二种情况是我们工作计算机系统的稳定性。
谁喜欢在自己喜欢的计算机上安装一些第三方软件 ? 谁喜欢安装几个不同的数据库 , 新的编译器 , 解释器 ?
当我们部署本地第三方API时,必须完成此操作。
此外,您可能会破坏系统并花几个小时来恢复它。

使用Docker进行开发可以很好地解决这个问题。 所有第三方软件都在绝缘的容器中旋转,如有必要,可以轻松删除 。
$ docker rm --volumes api $ docker system prune --all
案例3.我们控制操作
我要谈的第三种情况是前端开发人员控制其服务操作的能力。 由您决定他的服务在生产中的工作方式。
我知道将项目投入运营通常看起来像这样。
前线: 伙计们,我做了一切。 萝卜中的代码。 推出,PLIZ!
管理员: 如何推广?
前面: 您收集节点并由Web服务器从/build
文件夹分发静态信息
管理员: 收集哪个版本的节点? 什么是构建命令? 要分发哪个Web服务器?
结果,对于管理员来说,您的项目部署变成了同样令人振奋的任务 ,就像您在先前情况下在本地计算机上部署API一样。
即使该项目可以在您的计算机上运行,也完全没有必要在生产环境中运行所有项目。 我们得到了经典的问题“ 它可以在我的机器上工作” 。

Docker为此提供了帮助。 解决方案很简单,如果我们将项目打包在Docker中,从而自动执行其组装并设置启动,那么它将在支持Docker的所有服务器上均能正常工作。

管理员指南可归纳为:
前线: 伙计们,我做了一切。 为您收集了一个Docker映像。 推出,PLIZ!
管理员: 好的
好吧,无论如何,管理员都应该能够使用Docker映像。 与我们的节点不一样。
什么是码头工人?
我希望我能解释一下,如果您是前端开发人员但仍然不了解该技术,那么为什么您应该仔细研究该技术。 但我从未告诉过它是什么。

我计划在本文的以下部分中对此进行撰写,并为前端开发人员提供一些有用的食谱。
已更新