docker 部署 nestjs项目

2,007 阅读2分钟

一.服务器目录设置及项目文件上传

1. 在腾讯云中选择系统镜像

创建完成后在服务器根目录新建一个/projects/server文件夹 mkdir -p /projects/server

image.png

2.编辑Dockerfile文件

在server根目录下创建 Dockerfile文件

FROM node:18.16.0

# 设置时区
ENV TZ=Asia/Shanghai \
  DEBIAN_FRONTEND=noninteractive

# 创建工作目录
RUN mkdir /app
# 指定工作目录
WORKDIR /app
#复制package到工作目录
COPY package*.json ./
#设置npm下载源
RUN npm config set registry https://registry.npm.taobao.org/
#install
RUN npm install


# 复制当前所有代码到/app工作目录
COPY . .
#暴露端口3000(与服务启动端口一致)
EXPOSE 3000


# 启动服务
CMD [ "npm", "run", "start:test" ]


3.编辑docker-compose文件

version: "3.0"

services: 
    mysql01:
        container_name: mysql01
        image: daocloud.io/library/mysql:8.0.20 # 使用官方镜像
        ports: 
            - 3306:3306 # 本机端口:容器端口
        restart: on-failure
        environment: 
            MYSQL_DATABASE: blog
            MYSQL_ROOT_PASSWORD: 123456
            MYSQL_USER: lio
            MYSQL_PASSWORD: 123456
            MYSQL_ROOT_HOST: '%'
        volumes:
            - /home/mysql/db:/var/lib/mysql # 用来存放了数据库表文件
            - /home/mysql/conf/my.cnf:/etc/my.cnf # 存放自定义的配置文件
            # 我们在启动MySQL容器时自动创建我们需要的数据库和表
            # mysql官方镜像中提供了容器启动时自动docker-entrypoint-initdb.d下的脚本的功能
            - /home/mysql/init:/docker-entrypoint-initdb.d/ # 存放初始化的脚本
        networks: 
            - mysql01_bridge

    server_demo: # nestjs服务
        container_name: server_demo
        build: # 根据Dockerfile构建镜像
            context: .
            dockerfile: Dockerfile
        ports: 
            - 3000:3000
        restart: on-failure # 设置自动重启,这一步必须设置,主要是存在mysql还没有启动完成就启动了node服务
        networks: 
            - mysql01_bridge
        depends_on: # node服务依赖于mysql和redis
            - mysql01

# 声明一下网桥  mysql01_bridge。
# 重要:将所有服务都挂载在同一网桥即可通过容器名来互相通信了
# 如nestjs连接mysql可以通过容器名来互相通信
networks:
    mysql01_bridge:

4将这两个文件上传到server文件夹下

#开始构建
docker-compose -d up