前言
docker是一个开源的应用容器引擎,可以为我们提供安全、可移植、可重复的自动化部署的方式。docker采用虚拟化的技术来虚拟化出应用程序的运行环境。如上图一样。docker就像一艘轮船。而轮船上面的每个小箱子可以看成我们需要部署的一个个应用。使用docker可以充分利用服务器的系统资源,简化了自动化部署和运维的繁琐流程,减少很多因为开发环境中和生产环境中的不同引发的异常问题。从而提高生产力。
docker三个核心概念如下:
镜像(images):一个只读的模板,可以理解为应用程序的运行环境,包含了程序运行所依赖的环境和基本配置。相当于上图中的每个小箱子里面装的东西。 仓库(repository):一个用于存放镜像文件的仓库。可以看做和gitlab一样。 容器(container):一个运行应用程序的虚拟容器,他和镜像最大的区别在于容器的最上面那一层是可读可写的。 相当于上图中的每个小箱子里。本文主要是教大家了解如何在Docker容器中设置Node JS:
有一个可运行工作的NodeJS应用程序
通过确保进程在出错时不退出,使节点应用程序具有弹性
通过在代码更改时自动重新启动服务器,使Node应用程序易于使用
利用Docker:
先决条件
Docker已经安装好了
至少入门级节点知识和NPM
1.获取一个简单的Node应用程序
我们将使用Express,因为它的设置是容易的。
在一个干净的目录中,让我们从初始化NPM开始,继续运行此命令并按照提示进行操作:
npm init
安装Express:
npm install --save-prod express
编制代码src/index.js
<b>const</b> express = require('express')<b>const</b> app = express()<b>const</b> port = 3000app.get('/', (req, res) => res.send('Hello World!'))app.listen(port, () => {console.log(`Example app listening on port ${port}!`))
启动一个侦听端口3000并使用Hello World响应的"/"这个URL路由。
2.设置Docker以运行我们的Node应用程序
我们将使用docker-compose.yml文件来启动和停止我们的Docker容器,而不是键入长长的Docker命令。您可以将此文件视为多个Docker容器的配置文件。
docker-compose.yml:
version: "3"services: app: container_name: app # How the container will appear when listing containers from the CLI image: node:10 # The <container-name>:<tag-version> of the container, in this case the tag version aligns with the version of node user: node # The user to run as in the container working_dir: "/app" # Where to container will assume it should run commands and where you will start out if you go inside the container networks: - app # Networking can get complex, but for all intents and purposes just know that containers on the same network can speak to each other ports: - "3000:3000" # <host-port>:<container-port> to listen to, so anything running on port 3000 of the container will map to port 3000 on our localhost volumes: - ./:/app # <host-directory>:<container-directory> this says map the current directory from your system to the /app directory in the docker container command: "node src/index.js" # The command docker will execute when starting the container, this command is not allowed to exit, if it does your container will stopnetworks: app:
新闻热点
疑难解答