Docker本机部署完整next和nest项目

69 阅读3分钟

我们需要进行的部署如下:

  1. next
  2. nest
  3. redis
  4. mongodb
  5. python

next项目

首先需要知道我们使用的是哪个node版本

node -v

然后我们编辑Dockerfile文件

# 使用官方 Node.js 运行时镜像作为基础镜像
FROM node:20.5.0-alpine AS build

# 设置工作目录
WORKDIR /app

# 复制项目文件到容器
COPY . .

# ARG ENV_NAME

# 设置 npm 和 yarn 镜像源
RUN npm config set registry https://registry.npmmirror.com/
RUN yarn config set registry https://registry.npmmirror.com/

RUN mkdir -p /usr/src/app/node-sass
COPY binding.node /usr/src/app/node-sass
ENV SASS_BINARY_PATH /usr/src/app/node-sass/binding.node

# 安装依赖
RUN npm install --frozen-lockfile

# 构建 Next.js 应用
# RUN npm run build:${ENV_NAME}
RUN npm run build:stage

# 运行时暴露端口
EXPOSE 3000

# 启动 Next.js 应用
CMD ["npm", "run", "start"]

nest项目

创建Dockerfile文件

# 使用官方 Node.js 运行时镜像作为基础镜像
FROM node:20.5.0-alpine AS build

# 设置工作目录
WORKDIR /app

# 复制项目文件到容器
COPY . .

# ARG ENV_NAME

# 设置 npm 和 yarn 镜像源
RUN npm config set registry https://registry.npmmirror.com/
RUN yarn config set registry https://registry.npmmirror.com/

# 安装依赖
RUN npm install --frozen-lockfile

# 构建 Nest.js 应用
# RUN npm run build
RUN npm run build

# 运行时暴露端口
EXPOSE 3001

# 启动 Next.js 应用
CMD ["npm", "run", "start:prod"]

redis

创建redis.conf文件

# 监听地址
bind 0.0.0.0

# 数据目录
dir /data

# 日志文件路径
logfile /data/redis.log

# 数据持久化
appendonly yes

# 密码(可选)
# requirepass yourpassword

Dockerfile

# 使用官方 Redis 镜像作为基础
FROM redis:latest

# 设置工作目录
WORKDIR /usr/local/etc/redis

# 将自定义的 Redis 配置文件复制到镜像中
COPY redis.conf /usr/local/etc/redis/redis.conf

# 暴露 Redis 默认端口
EXPOSE 6379

# 启动 Redis 服务
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]

mongodb

mongo.conf

# 监听所有 IP 地址
bindIp = 0.0.0.0

# 日志文件路径
logPath = /data/db/mongo.log

# 数据目录
storage.dbPath = /data/db

# 启用身份验证(可选)
# security.authorization = enabled

Dockerfile

# 使用官方 MongoDB 镜像作为基础
FROM mongo:latest

# 设置工作目录
WORKDIR /data/db

# 将自定义的 MongoDB 配置文件复制到镜像中(可选)
# COPY mongo.conf /etc/mongo.conf

# 暴露 MongoDB 默认端口
EXPOSE 27017

# 启动 MongoDB 服务
# 如果使用了自定义配置文件,可以指定配置文件路径
CMD ["mongod", "--bind_ip_all"]

# COPY mongo.conf /etc/mongo.conf
# CMD ["mongod", "--config", "/etc/mongo.conf"]


# docker buildx build -t <image-name>:<image-tag> .
# docker buildx build -t my-mongodb:latest .
# docker run -d -p 27017:27017 --name my-mongo-container <image-name>:<image-tag>

# 创建一个名为 "my_database" 的数据库
# RUN mongo --eval "db.createDatabase('my_database')"

# 创建一个名为 "my_collection" 的集合
# RUN mongo my_database --eval "db.createCollection('my_collection')"

# 在 "my_collection" 中插入一些测试数据
# RUN mongo my_database --eval "db.my_collection.insert({ name: 'John', age: 30 })"

好了,现在我们的Dockerfile的工作都做完了,我们需要去修改每一个项目访问另一个项目的地址

  1. 在Next项目中,我们需要修改接口地址HOST为my-nest-app,那么接口url为http://my-nest-app:3001
  2. 在Nest项目中,我们需要修改mongo的链接地址http://my-mongo:27017,修改redis的链接地址http://my-redis:6379

在docker中如果想要使上面的地址可用我们需要给他们创建同一个网络,并运行在这个网络中

docker create network my-network

docker build -t my-next-app:latest .
docker build -t my-nest-app:latest .
docker build -t my-mongo:latest .
docker build -t my-redis:latest .

docker run -d --name my-redis --network my-network -p 6379:6379 my-redis
docker run -d --name my-mongo --network my-network -p 6379:6379 my-mongo
docker run -d --name my-nest-app --network my-network -p 6379:6379 my-nest-app
docker run -d --name my-next-app --network my-network -p 6379:6379 my-next-app

然后我们就可以使用我们部署的项目了

注意:

容器间互相访问是用运行的container的名称加上服务原本的port,而不是映射到主机的port

附上docker常用命令

# 查看my-next-app的运行信息
docker inspect my-next-app

# 让某个container执行命令
# docker exec -it <container-name> <cmd>
docker exec -it ping my-nest-app:3001

# 查看所有运行进程
docker ps

# 查看网络信息
# docker network inspect <network-name>
docker network inspect my-network