前端的Docker。 第1部分。为什么?

哈Ha!


几个月前,我在FrontendConf 2019大会上发表了有关前端Docker报告的演讲,并希望为那些喜欢阅读多于倾听的人制作一份报告的小抄本。



我邀请您来吸引所有Web开发人员,尤其是前端人员。


目录内容


  1. 前端的Docker。 第1部分。为什么?
  2. 前端的Docker。 第2部分。您是什么?
  3. 前端的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映像。 与我们的节点不一样。


什么是码头工人?


我希望我能解释一下,如果您是前端开发人员但仍然不了解该技术,那么为什么您应该仔细研究该技术。 但我从未告诉过它是什么。



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


已更新


Source: https://habr.com/ru/post/zh-CN478932/


All Articles