我们需要进行的部署如下:
- next
- nest
- redis
- mongodb
- 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的工作都做完了,我们需要去修改每一个项目访问另一个项目的地址
- 在Next项目中,我们需要修改接口地址HOST为my-nest-app,那么接口url为
http://my-nest-app:3001
- 在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