Docker部署nodejs应用帮助

使用字节跳动的Trae Solo CN编写了一个两个参与者的博弈类小游戏,该游戏使用 nodejs 加 expressjs 加 socket.io 实现。开发完毕后,将该应用部署到互联网,记录一下部署过程。

申请云主机

选择阿里云免费申请一个云主机,使用ubuntu 22.04操作系统,默认安装docker服务。

上传应用

远程登录阿里云主机,上传nodejs应用。

部署应用

因为需要在Docker中运行 npm install 构建 nodejs 应用部署环境,因此无法直接使用默认的 nodejs 镜像,需要自定义 nodejs 镜像。

创建一个高效的 Dockerfile

在项目的根目录下,创建一个名为Dockerfile的文件,并写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 选择一个基础镜像,比如 Node.js 20
FROM node:20-alpine

# 在容器中创建并设置工作目录
WORKDIR /usr/src/app

# 先复制依赖管理文件(这是为了利用 Docker 的缓存,避免每次代码变动都重新安装依赖)
COPY package*.json ./

# 安装项目依赖
RUN npm install
# 如果是生产环境,推荐使用 npm ci 以获得更快、更可靠的安装
# RUN npm ci --only=production

# 复制所有应用源代码到工作目录
COPY . .

# 应用运行的端口
EXPOSE 8080

# 指定容器启动时运行的命令
CMD ["node", "server.js"]

构建与运行

  • 构建镜像

在包含上述Dockerfile的目录下,运行以下命令来构建镜像:

1
2
3
4
5
# 构建镜像
docker build -t my-node-app .

# 查看镜像
docker image ls
  • 运行容器

构建成功后,使用docker run命令启动容器,并将宿主机的端口映射到容器内的端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 后台运行docker镜像
docker run -d -p 80:8080 -d my-node-app

# 交互式运行docker镜像
docker run -it -p 80:8080 -d my-node-app

# 查看容器
docker container ls

# 查看docker进程
docker ps

# 访问nodejs应用
curl http://localhost:80

# 删除容器
docker container rm container_id

# 删除镜像
docker image rm image_id

远程访问

在阿里云主机的管理界面上,设置防火墙,允许外部主机访问云主机的web服务端口。

打开浏览器,输入网址访问 http://ip ,其中ip为云主机的公网ip 。

参考链接

  1. Docker使用帮助,by huangwang.