Docker 快速部署一个 node App

Docker 快速部署一个 node App

⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅

用 Docker 快速部署 node App 须要以下几个步骤:前端

  • 安装 Docker 和 VSCode Docker 插件(方便操做 Docker)
  • 建立 node 应用
  • 建立 Dockerfile 并将应用打包成 image
  • 事例化 image 建立 Container

首先安装 Docker

Docker 的安装看官方文档,文档很详细了 https://docs.docker.com/docker-for-mac/install/node

而后安装 Docker 的 VSC 插件,安装这个插件仅仅是为了方便操做 Docker。nginx

安装完毕后打开 Docker 服务执行命令检查是否安装完毕:git

$ docker -v
Docker version 18.09.2, build 6247962

最后使用国内的镜像源:docker

https://registry.docker-cn.comexpress

建立 node App

咱们的目的是要在 nginx 的 Container 中对外暴露一个端口,Container 中是咱们打包后的 node App,外部可经过这个端口访问咱们的服务。npm

npm init
npm install -S express

安装完成后建立一个简单的 node App:json

// app.js
const express = require('express')
const url = require('url')
const execa = require('execa') 

const app = express()

app.use((req, res, next) => {
    console.log(url.resolve(req.url))
    res.end('hello world')
})

app.listen(8888, () => {
    console.log('listening at port: 8888')
})

建立 Dockerfile

而后 VSC 调用 >dockerfile 经过 docker 插件建立一个新的 dockerfile,在选项中选择 nodeapp

插件自动在当前目录下建立 Dockerfile, docker-compose.yml, docker-compose.debug.yml, .dockerignorecurl

目录结构以下:

.
├── Dockerfile
├── app.js
├── docker-compose.debug.yml
├── docker-compose.yml
├── node_modules
├── package.json
└── yarn.lock

在 Docker image 中咱们确定是只将必要的文件打包进去,像 .dockerignore .gitignore 这种文件是确定不能被打包的。

Docker 插件自动建立的 .dockerignore 中自动帮咱们写好了配置文件:

node_modules
npm-debug.log
Dockerfile*
docker-compose*
.dockerignore
.git
.gitignore
.env
*/bin
*/obj
README.md
LICENSE
.vscode

最后咱们来编辑一下 Dockerfile

FROM node
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 8888
CMD node app.js
  • FROM 指定基础镜像
  • ENV 配置环境变量
  • WORKDIR 指定工做目录
  • COPY 拷贝 package.json 等配置文件到工做目录
  • RUN 执行命令安装依赖
  • COPY 拷贝项目文件 app.js 等到指定工做目录
  • EXPOSE 对外暴露 8888 端口
  • CMD 执行命令启动项目
RUN 和 CMD 的区别见这篇文章 https://stackoverflow.com/questions/37461868/difference-between-run-and-cmd-in-a-docker-file

打包成 image

Dockerfile 和项目文件建立完毕了,紧接着咱们就须要经过 Docker 打包项目成 iamge:

>dockerbuild

填入指定的 image 别名便可:

20190714225154.png

或使用以下 docker build 命令

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .

最后建立容器

最后建立容器便可经过暴露的端口访问到应用

>dockerrun

或执行 docker run 命令:

$ docker run --rm -d -p 8888:8888/tcp test:latest
265575b6dc2866a6fa778ee74ad71d823554e1d96f577b31034ba544177204cb

20190714225501.png

使用 curl 验证一下:

$ curl localhost:8888
hello world%
docker container ls # 获取全部正在运行中的 container
docker images # 获取全部 images

done 🔥

JS 菌公众帐号

请关注个人订阅号,不按期推送有关 JS 的技术文章,只谈技术不谈八卦 😊

相关文章
相关标签/搜索