写给前端工程师的Docker入门_第1页
写给前端工程师的Docker入门_第2页
写给前端工程师的Docker入门_第3页
写给前端工程师的Docker入门_第4页
写给前端工程师的Docker入门_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

为什么我们要用docker?过去的我们,当业务发展需要部署新的应用时,DevOps小伙伴通常会去买一台服务器,但是却不知道这个新应用具体需要多高的配置,往往都会造成资源浪费。当虚拟机出现后,它可以让我们在一台服务器上运行多个应用,但是却有一个缺陷。每个VM需要运行一整个的操作系统。每个OS又需要CPU,RAM等等,需要打补丁、安装证书,这些反过来又增加了成本和弹性。Google在很久之前就开始使用容器模型来解决VM模式的弊端。简单来说容器模型允许我们在同一台主机上运行多个容器,而且共用主机的CPU、RAM等资源。那么它对开发者来说意味着是么呢?它可以保证对所有的开发者和服务器来说,我们的工作环境都是一致的。比如:生产环境、仿真环境、测试环境。任何人都可以分分钟配置好项目,无需乱搞配置、安装库和设置依赖。简单来说,docker是一个平台,它允许我们使用容器来开发、部署、运行应用程序。让我们退一步来看,容器系统在物理上是什么样子的,以及与VM有什么区别。DOCKERENGINEVirtualMachinosDOCKERENGINEVirtualMachinosHOSTOSINFRASTRUCTUREHOSTOSINFRASTRUCTUREHYPERVISORINFRASTRUCTURE可以看出来,宿主机的资源在容器化的使用后是共享的,但是在VM中却被分割开了。接下来,我们来深入一些。如何使用docker?为此我们需要先熟悉一些术语Dockerimage:它是一个可执行文件,包含了运行一个应用程序的操作系统配置和所有的库。它有多个层叠在一起,并表示为单个对象。dockerimage是通过dockerfile来创建的,我们稍后再讲。DockerContainer:它是dockerimage的一个运行实例。同一个dockerimage可以有多个运行的container。容器化Node.js应用我们来尝试容器化一个简单的node.js应用,然后创建一个image:你的Node.js应用先创建一个My-Mde-app文件夹,kv\kdirkv\y-node-appcdkv\y-node-app然后创建一个index.js来启动一个nodeserver://我们用require引入expressvavexpress=require(/expreS$/)varapp-express。//对根URL做一个响应app.get^/'jfuMtio^.(req,res){resse八4cHeHoWorld!')//让服务器监听8081端口app.listen(8O8,,functionQ{console.logCapp(istecing。八port8082!')!)然后我们创建一■个package.json文件,可以通过呻侬init-y来快速生成:("八〃kwe":"hd/owoHd"」"version11:"1QQ”,“description”:"Dockerized八。dejsappu,"ma""kdexjs",,,autkor":m,,"lice八se":"ISC","dependencies":{"express":"人4.16.4"))到这一步我们甚至不需要express或者npm安装在自己的机器,因为dockerfile可以为我们配置和安装这些依赖。DockerFile让我们创建一个dockerfile,然后保存到^.y-Mde-app文件夹。这个文件没有扩展名,它的名字就叫作Docke*/e,这是里面的内容:#PockerfileFROMn。de:8WORKDIR/appCOPYpackage.jsoia/appRUN叩2in$tallCOPY./appEXPOSE8082cMDnodeindex.”下面解释一下里面的命令:fromnode:8--从dockerhub拉取node,jsdocker镜像,可以在这里找到node的镜像:/_/node/WORKP/R/app—设置镜像中的工作目录,可以与下面的命令一起使用:COPY,RUN和CMDCOPYpackagejso八/即p--将package.json从宿主机的39-node-app目录复制到了镜像中的/app目录runnpwinstall—在镜像中运行此命令来安装node包COPY./app—复制-node-app目录中的所有文件到镜像中的/app目录expose8081—这条命令告诉container要暴露一个端口号,这个端口号正是我们在MWexjs中写的那个。默认情况下,容器会忽略对它所有的请求。构建Docker镜像注意看啦〜打开控制台,到Mg-node-app目录下,执行以下命令:#Buildalinagedockerbuild-t<i^age-na^e>Relative-path-to-your-dockerfile,>dockerbuild-thell。-world.这条命令在我们宿主机创建了一个hello-world镜像-t用来为我们的镜像指定一个名字,这里就是Mlo-^orld.是用来指明dockerfile的路径,由于我们已经在侬g-no4e-app中,所以路径用.就可以了你可以在控制台看到类似于以下的输出:SendingbuildcontexttoDockerdaei^o^4Qq&ld3Step1/7:FROMnode:8——>4ftzLe5”q662Step2/7:WORKDIR/app >Usingcache——>5U7•2c7b7£Step3/7:COPYpackage.json/app >Usingcacke——>ceb27a57fl8eStep4/7:RUN叩haiiastall >Usingcache >clbaafl6SXZaStep5/7:COPY./app——>4〃77。4270808Step6/7:EXPOSE808工 >Ru2uhg,八2b洲工工daffseRemovingintermediatecontainer2b马f工,daffse——>81a7cel4^4OaStep7/7:CMDnodeicdex.js >RumungMReknoW八gintermediatecoiatatMr379idd7f5工49——>c2O^OlfaO7b2.Succe^fullybuiltc2O^OlfaO7b2.Successfullytaggedhell。-woHd:latest可以看到,它根据dockerfile中的命令依次运行,然后输出了一个docker镜像。当你第一次运行的时候可能会需要一些时间,下次就可以使用缓存来加快速度了。现在我们来看下刚才build的镜像:Getalistof加vages。nyourhostdockerimages这个命令会显示在你电脑上存在的docker镜像。其中会有一条:REPOSITORYTAGIMAGEIPCREATED SIZEhell。-worldlatentc8O3OlfaO7b222minutesago8QGMB运行Docker容器既然我们已经创建了镜像,下面我们就从这个镜像运行一个docker容器:defaultcow\w\avuiforthisisdockercontainerrun<ikv\age-Mk^e>dockercontaiMrrun-p4000:8081hell。-world这条命令用来创建和运行一个docker容器-p4000.2081—是一个发布(publish)标识,它将本机的4000端口映射到了容器中的8081端口。现在所有对本机4000端口的访问,都会被容器中的8081端口监听。hello-world—这个名字就是刚才用dockerbuild命令时指定的镜像名称。你将会得到以下输出:applisteningonport8081!如果你需要进入容器并且挂载一个bash终端,可以运行:#Entertheco^taiMrdockerexec-ti<contaiMrid>/bi八/bash为了检查我们的容器是否运行,打开另一个命令行,然后输入:dockerps可以看到以下输出:CONTAINERIDIMAGE COMMAND CREATEDs<con

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论