Docker 如何部署 Node 应用

图片来源:https://blog.papercut.com/wp-content/uploads/2019/02/docker-logo-1024x597.png

[TOC]

前言

正文

  • Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# node镜像
FROM node:12.18.3

# 这个是容器中的文件目录
RUN mkdir -p /home/admin/doc-node

# 设置工作目录
WORKDIR /home/admin/doc-node

# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样没有必要。
# 所以,正确的顺序是:
# 添加package.json;
# 安装npm模块;
# 添加源代码。
COPY package.json /home/admin/doc-node/package.json

# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm i --production --registry=https://registry.npm.taobao.org

# 拷贝所有源代码到工作目
COPY ./dist /home/admin/doc-node/

# 暴露容器端口
EXPOSE 9423

CMD npm run test
  • 构建镜像
1
docker build -t doc-node .

构建结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
➜  doc-node git:(master) ✗ docker build -t doc-node .    
Sending build context to Docker daemon 546.6MB
Step 1/8 : FROM node:12.18.3-alpine
---> 18f4bc975732
Step 2/8 : RUN mkdir -p /home/admin/doc-node
---> Using cache
---> 4c02163f06fd
Step 3/8 : WORKDIR /home/admin/doc-node
---> Using cache
---> c5028665498d
Step 4/8 : COPY package.json /home/admin/doc-node/package.json
---> e5234ca8c018
Step 5/8 : RUN npm i --production --registry=https://registry.npm.taobao.org
---> Running in 2c0158284144
Removing intermediate container 2c0158284144
---> 1b1c86bca5a9
Step 6/8 : COPY ./dist /home/admin/doc-node/
---> 4fb32124c0dc
Step 7/8 : EXPOSE 9423
---> Running in 7090c27bd6c1
Removing intermediate container 7090c27bd6c1
---> 2a8df7c21c1a
Step 8/8 : CMD npm run test
---> Running in 52b38538ff92
Removing intermediate container 52b38538ff92
---> 9e045ca76af7
Successfully built 9e045ca76af7
Successfully tagged doc-node:latest
  • 运行容器

查看构建的镜像

1
docker images

结果:

使用构建的进行,实例一个容器:

1
docker run --name docNode -p 9423:9423 -d 9e045ca76af7

运行完毕就可以看到容器实例

  • 提交镜像

镜像构建完毕后,可以提交到docker hub上,官网地址:https://hub.docker.com/

提前前需要打一个tag

1
docker tag 6f744b5d6dad zhaowei666/doc-node:v1.0

之后提交镜像

1
docker push zhaowei666/doc-node:v1.0

当出现下面打印时,则表示上传成功

1
2
3
4
5
6
7
8
9
10
The push refers to repository [docker.io/zhaowei666/doc-node]
696f9fe6abcf: Pushed
15bb3400b366: Pushed
7ebf5d8bef67: Pushed
d3eefd1127e9: Pushed
aedafbecb0b3: Mounted from library/node
db809908a198: Mounted from library/node
1b235e8e7bda: Mounted from library/node
3e207b409db3: Mounted from library/node
v1.0: digest: sha256:a18d7b8d4ccd1dbd4fcd0a6f3c2854e7dd0e9480af6c3e679778b2808164f20b size: 1993
  • 下载镜像

镜像上传之后,部署到其他环境时,查询并下载镜像运行容器即可

下载镜像

1
docker pull zhaowei666/doc-node:v1.0