我们为什么要用docker?以往,当业务开发需要部署新的应用时,DevOps伙伴通常会购买一台服务器,但他们并不知道这个新应用对配置的要求有多高,往往会造成资源的浪费。当虚拟机出来的时候,它允许我们在一台服务器上运行多个应用程序,但是它有一个缺陷。每个VM都需要运行整个操作系统。每个OS都需要CPU、RAM等,需要打补丁,安装证书,进而增加成本和弹性。Google很早就开始使用容器模型来解决VM模型的弊端。简单的说,容器模型可以让我们在同一台主机上运行多个容器,共享主机的CPU、RAM等资源。那么这对开发人员意味着什么?它确保我们的工作环境在所有开发人员和服务器之间保持一致。例如:生产环境、模拟环境、测试环境。任何人都可以在几分钟内配置项目,而无需搞乱配置、安装库和设置依赖项。简单的说,docker就是一个让我们可以使用容器来开发、部署和运行应用程序的平台。让我们退后一步,看看容器系统在物理上是什么样子,以及它与VM有何不同。可以看出,宿主机的资源在容器化之后是共享的,但是在VM中是划分的。接下来,让我们再深入一点。如何使用泊坞窗?为此,我们需要先熟悉一些术语。Docker镜像:它是一个可执行文件,包含操作系统配置和运行应用程序的所有库。它有多层叠加在一起并表示为单个对象。dockerimage是通过dockerfile创建的,后面会讲到。Docker容器:它是docker镜像的运行实例。同一个docker镜像可以有多个正在运行的容器。容器化的Node.js应用程序让我们尝试容器化一个简单的node.js应用程序,然后创建一个图像:您的Node.js应用程序首先创建一个my-node-app文件夹,mkdirmy-node-appcdmy-node-app然后创建一个index.js来启动一个nodeserver://我们使用require导入expressvarexpress=require('express')varapp=express()//对根URL做出响应app.get('/',function(req,res){res.send('HelloWorld!')})//让服务器监听8081端口app.listen(8081,function(){console.log('app监听8081端口!')})然后我们创建一个package.json文件,可以通过npminit-y快速生成:{"name":"helloworld","version":"1.0.0","description":"Dockerizednode.jsapp","main":"index.js","author":"","license":"ISC","dependencies":{"express":"^4.16.4"}}此时我们甚至不需要在自己的机器上安装Express或npm,因为dockerfile可以为我们配置和安装这些依赖项。DockerFile让我们创建一个dockerfile并将其保存到my-node-app文件夹。这个文件没有扩展名,名字叫做Dockerfile,里面的内容是:#DockerfileFROMnode:8WORKDIR/appCOPYpackage.json/appRUNnpminstallCOPY。/appEXPOSE8081CMDnodeindex.js让我解释一下里面的命令:FROMnode:8--从dockerhub中拉取node.jsdocker镜像,你可以在这里找到节点镜像:https://hub.docker.com/_/node/WORKDIR/app--设置镜像中的工作目录,可与以下命令一起使用:COPY、RUN和CMDCOPYpackage.json/app--从主机的my-node-app目录复制package.json到图像中的/app目录RUNnpminstall--在图像中运行此命令以安装节点包COPY。/app--将my-node-app目录下的所有文件复制到镜像中的/app目录下EXPOSE8081--这个命令告诉容器暴露一个端口号,也就是我们在index.js中写的.默认情况下,容器会忽略对它的所有请求。构建Docker镜像并观看~打开控制台,进入my-node-app目录,执行以下命令:#构建镜像dockerbuild-t
