前端的Docker。 第2部分。您是什么?


我将继续FrontendConf 2019大会解密前端的Docker报告。


在上一部分中,我试图回答为什么前端开发人员可能需要Docker的问题 。 今天,我将尝试用一种简单的语言来说明它是一种什么样的工具,它是如何工作的,并将其与前端中已知的其他概念进行比较。


目录内容


  1. 前端的Docker。 第1部分。为什么?
  2. 前端的Docker。 第2部分。您是什么?
  3. 前端的Docker。 第3部分。一些食谱

你是什​​么


谁不知道Docker是什么,他们却有不同的看法。



有人认为这是将容器安装在机器上的一种方法。



在本文前面的VK中声明下,出现了一些喜剧性评论。



而且只有系统管理员似乎知道一些知识。



Docker,Inc的员工通过营销口号向我们介绍了此工具:


调试您的应用程序,而不是您的环境
在任何地方安全地收集,共享和运行任何应用程序

她有点狡猾。 确实可以收集,共享和发布。 但是对于“安全”“随处可见”,情况并非如此。


例如,您可以在本文中找到有关安全性问题的信息,但有关“任何地方”的信息,我都会进一步讨论。


虚拟化


虚拟化的可能性很久以前就出现了。


当我在2012年进行开发时,我的团队进行了Ruby on Rails项目。 我需要在笔记本电脑上运行RubyMySQLPostgreSQL之类的东西。 在Windows下,这一切都表现不佳,因此我不得不使用虚拟化。


然后是诸如VirtualBoxVMware WorkstationVagrant之类的解决方案。 整个工作环境已转移到虚拟机,只有IDEGit浏览器保留在主机系统中。



该图取自Docker文档,仅显示了虚拟机( VM )的工作方式。


我们拥有基础架构 (我们的计算机)和虚拟机监控程序 (VMWare,VirtualBox或其他)。 为此,我们运行了一个虚拟机,其中包括来宾操作系统( Guest OS ),必要的库( Bins / Libs )和我们的应用程序( App )。


自然,虚拟机本身变得非常大且缓慢。 维护虚拟机的开销很高。 我的笔记本电脑几乎没花光。



Docker,Inc建议不要将来宾操作系统放入虚拟容器中,而应使用主机系统并通过Linux中cgroups机制获得进程隔离。


这大大减小了图像的尺寸。 例如,一个alpine:3.11.0映像 (专注于安全性,轻便性和低资源要求的Linux发行版)仅重2.5 MB ,而带有node:alpine的docker映像仅重27 MB


即 我们的网站/应用程序可以打包成30 MB的映像,足以在Docker中运行,并且可以在任何地方使用? 是的,但是有细微差别。


安装Docker


Docker分为两个版本: 社区版(CE)企业版(EE) 。 我们需要Docker CE ,因为 它是免费的,可以解决我们需要的所有问题。


Docker也是DesktopServer



伺服器


服务器版本设计为安装在Linux上 ,仅支持4个发行版和某些体系结构。 因此,您可以“在任何地方”运行docker容器的说法并不完全正确。


台式机


桌面版本供开发人员在计算机上安装。 这将在开发出色的应用程序期间为我们提供帮助。 特别是,我使用Docker Desktop for Mac


对于Mac用户,在计算机上进行安装看起来越熟悉。



或者,如果您喜欢Homebrew。


brew cask install docker 

之后,该应用程序将在顶部状态栏中和控制台中变为可用。



需要注意的是,在MacWindows上缺少Linux控制组( cgroups )(感到惊讶),因此Docker Desktop分别使用Mac OS Hypervisor框架Microsoft Hyper-V



也就是说,要支持虚拟化,必须放弃大约4 GB的RAM。 但是,如果工作容器在单独的虚拟机上运行,​​它们所占用的空间将大大减少。


docker stats的输出:


 CONTAINER ID NAME MEM USAGE e4941ea92ce7 nginx_1 3.16MiB 1b023bfff38f api_1 351.5MiB e07c6958e378 pg_1 18.64MiB 1fa783f5fdbc terminal-front_1 14.89MiB 72e9dfa0805a adminer_1 11.19MiB e9ce9f965867 admin-front_1 1.312MiB 3edacc59a77b certbot_1 1.547MiB 

我们看到数据库占用了19 MB ,而Java API占用了352 MB


Docker Desktop中包含什么


Docker被设计为模块化架构,因此,当您安装Docker Desktop时 ,您会一次获得多个程序。


Docker引擎


Docker Engine包括容器构建工具,容器注册表,编排工具,运行时等。 这是用Go编写的开源项目 。 它以守护程序启动,该守护程序提供了用于执行命令的RESTful API


该解决方案使您几乎可以从任何地方管理容器,例如,从浏览器Node.js甚至从Minecraft



Docker CLI客户端


Docker Engine API的控制台客户端。


也是用Go编写的一个开源项目


Docker撰写


用于描述和启动多容器应用程序的工具。 开发中非常有用的东西。


感觉像一个SRE 。 自然地用Python编写。


Docker机器


一种用于管理安装了Docker的远程主机的工具 。 我们没有在开发中使用过,但其余都附带了。


风筝


JavaScript(Electron)编写的开源 Docker Engine API GUI。


对于不喜欢控制台甚至GIT的人,使用图形界面非常理想。


该工具非常粗糙,但是可以正常工作( v0.17.9> 800个未解决的问题 )。



Docker不仅适合管理员


现在为前端开发人员提供了一些免费的类比,以表明该工具与我们前端开发人员熟悉的事物(例如Node.js和NPM)有很多共同点。


图片


Docker映像。 我们可以将其发布在某个地方,例如,在DockerHub中。 我们还可以发布NPM-


Docker文件


图像的配方。 我们没有食谱,但是有一个包/应用程序清单package.json


码头工人


将docker映像放在一起。 好吧,在前端,我们正在构建应用程序npm run build


Dockerhub



不要与另一个流行的中心相混淆。 这是docker映像的注册表。 我们有自己的注册表NPM Registry


docker运行


启动容器的控制台命令。 与前端世界最接近的模拟是npm start命令。


该项目开始为专有开发


Docker项目于2008年作为dotCloud的内部专有开发而开始,直到20133月才以开源形式发布。


我们拥有Node.js ,尽管它最初是开源的,但直到20152月io.js的丑闻故事才由Joyent负责。


用于一切


我们都知道NPMNode Package Manager 。 它曾经是,但是现在不仅有针对Node.js的软件包,而且还有针对浏览器的软件包。


而且那里可能没有包裹。 如果愿意,您可以在其中放置一组字体甚至电影。


DockerHub相同。 您可以在那里发布任何内容。 没有预先审核。


有替代品可以替代


我们都知道,如果您不喜欢NPM ,可以使用其他软件包管理器。 这是Yarnpnpmjspm


Docker也可以被替代品替代。 例如, PodmadBuildah


一些食谱


我希望我能够概述一下该工具。


在下一部分中,我计划展示前端使用Docker的秘诀和具体案例。

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


All Articles