Node.js服务Docker容器化应用实践小结

2020-06-17 06:39:08易采站长站整理

本篇不会讲解 Docker 命令的使用、安装等,因为在之前一篇文章一文零基础教你学会 Docker 入门到实践中也已经讲解的很详细了,不清楚的可以点击链接回头在重新看下,本篇重点是介绍 Node.js 项目如何进行 Docker 容器化及一些实践优化,还有一些常见的问题,当然如果还有其它使用上的问题也欢迎大家在评论区进行留言补充。

作者简介:五月君,Nodejs Developer,热爱技术、喜欢分享的 90 后青年,公众号「Nodejs技术栈」,Github 开源项目 www.nodejs.red

通过本篇文章能学到什么?

学会如何用 Docker 容器化一个 Node.js 服务
动态设置环境变量一份 Dockerfile 文件构建不同的版本
Node.js 私有 NPM 包在构建镜像时如何认证
Egg.js 框架 Docker 容器化应该注意的问题
Docker 镜像体积与构建时间的优化

Docker 化一个 Node.js 应用程序

在本篇开始我们先创建一个简单的 Node.js 应用,然后为这个应用创建一个 Docker 镜像,并构建和运行它

创建 Node.js 项目

首先我们需要创建一个 app.js 开启一个 HTTP 服务,后面会借助 Docker 来运行这个程序


const http = require('http');
const PORT = 30010;

const server = http.createServer((req, res) => {
res.end('Hello Docker');
})

server.listen(PORT, () => {
console.log('Running on http://localhost:', PORT, 'NODE_ENV', process.env.NODE_ENV);
});

然后我们创建一个 package.json 文件,这里是描述你的应用程序以及需要的依赖,写过 Node.js 的同学应该会很熟悉的,这里我在 scripts 里面增加了

npm run dev
npm run pro
两个命令,因为我想在这里介绍如何在构建时传入参数来动态设置环境变量。


{
"name": "hello-docker",
"version": "1.0.2",
"description": "",
"author": "May",
"main": "app.js",
"scripts": {
"dev": "NODE_ENV=dev node app.js",
"pro": "NODE_ENV=pro node app.js"
}
}

Dockerfile 文件

这是一个 Dockerfile 文件所包含的信息,这些命令在Docker 入门与实践中也有讲解过


FROM node:10.0-alpine

RUN apk --update add tzdata
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& echo "Asia/Shanghai" > /etc/timezone
&& apk del tzdata

RUN mkdir -p /usr/src/nodejs/

WORKDIR /usr/src/nodejs/

# add npm package
COPY package.json /usr/src/nodejs/package.json
RUN cd /usr/src/nodejs/
RUN npm i

# copy code
COPY . /usr/src/nodejs/

EXPOSE 30010