docker 部署nestjs项目总结
使用AI工具构建docker镜像
如使用腾讯的WorkBuddy根据分析项目工程目录生成构建docker镜像的相关文件,并顺利启动本地容器服务,如下图所示:(注:在启动容器服务的时候需要翻墙,下载相关依赖镜像,否者有可能失败) 问AI “D:\nest-projects\bpmn-nest-be 把这个项目页构建docker镜像并在本地启动”
D:\nest-projects\bpmn-nest-be 目录
docker compose up -d-d:后台守护模式启动容器,执行完释放终端。- 逻辑:读取当前目录
docker-compose.yml,对比现有容器配置,只更新发生变更的服务;无变更则直接启动已停止容器。

查看镜像
执行下面命令可以看构建的镜像
docker images
将本地镜像上传 阿里云容器镜像服务仓库中
由于仓库中已经有 mysql:8.0,redis:7-alpine的镜像,这里就不再上传了,只上传bpmn-nest-be-app:latest举例;
步骤
1、在镜像服务先创建一个命名空间,类似项目名称,可以随便起最好与当前项目相关便于记忆;

2、在创建的命名空间里创建仓库并选择本地仓库


点击创建镜像仓库 bpmn-nest-be-app
上传镜像
进入bpmn-nest-be-app仓库镜像页面 如下图

上传镜像参考上图第3步
1、命令行登录阿里云 Container Registry
docker login --username=xxxxxx crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com
2、替换镜像 ID 和版本号打标签
# docker tag [ImageId] crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:[镜像版本号]
docker tag bpmn-nest-be-app:latest crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:v0.0.13、将镜像推送到Registry
#docker push crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:[镜像版本号]
docker push crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:v0.0.1
上传成功的话在镜像版本中可以查看到具体镜像信息,如下图:

云服务器docker部署镜像
1、修改docker-compose.yml并上传云服务器,主要修改 mysql:image, redis:image,新增app:image;注意端口是否有冲突, 所需文件是否存在:db,docker,upload,public与docker-compose.yml文件在同一个目录下:
- ./db/init.sql,
- ./docker/dev.yml,
- ./upload:/app/upload
- ./public:/app/public
services:
mysql:
image: crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/data-project/data-project-mysql:8.0
container_name: bpmn-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root123456
# 与 docker/dev.yml 中 db.mysql 的账号保持一致
MYSQL_DATABASE: fuleiyang
MYSQL_USER: fuleiyang
MYSQL_PASSWORD: 198819880210Qazxc
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --default-time-zone=+08:00
ports:
- '3307:3306' # 宿主机 3307 -> 容器 3306,避免与本机已有 MySQL 冲突
volumes:
# 首次启动自动导入建表数据(来自 MySQL 5.7 导出的 db/init.sql)
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
- mysql-data:/var/lib/mysql
healthcheck:
test: ['CMD', 'mysqladmin', 'ping', '-h', '127.0.0.1', '-uroot', '-proot123456']
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
redis:
image: crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/data-project/data-projrct-redis:7-alpine
container_name: bpmn-redis
restart: unless-stopped
# 与 docker/dev.yml 中 redis.password 保持一致
command: ['redis-server', '--requirepass', '123456']
ports:
- '6380:6379' # 宿主机 6380 -> 容器 6379,避免与本机已有 Redis 冲突
volumes:
- redis-data:/data
healthcheck:
test: ['CMD', 'redis-cli', '-a', '123456', 'ping']
interval: 10s
timeout: 5s
retries: 10
app:
image: crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:v0.0.1
build:
context: .
dockerfile: Dockerfile
# 大体积 deb 包(chromium/fonts-noto-cjk)在宿主机断点续传预下载,
# 通过额外构建上下文传入本地安装,避免容器内 apt 下载大文件断流
additional_contexts:
debs: C:/Users/Y780S_SIT_I_N/WorkBuddy/2026-08-27-09-36-13/debs
container_name: bpmn-app
restart: unless-stopped
ports:
- '8080:8080'
environment:
TZ: Asia/Shanghai
volumes:
# 覆盖镜像内配置,改为连接 compose 内的 mysql / redis
- ./docker/dev.yml:/app/dist/config/dev.yml:ro
# 静态资源与上传文件持久化到宿主机
- ./upload:/app/upload
- ./public:/app/public
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
volumes:
mysql-data:
redis-data:2、云服务命令工具进入docker-compose.yml所在目录执行拉去所需镜像目录,mysql和redis镜像有的话不用拉,没有可重新拉取
# app 镜像
#docker pull crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:[镜像版本号]
docker pull crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/bpmn-project/bpmn-nest-be-app:v0.0.1
# mysql 镜像
#docker pull crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/data-project/data-project-mysql:[镜像版本号]
docker pull crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/data-project/data-project-mysql:8.0
# redis 镜像
#docker pull crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/data-project/data-projrct-redis:[镜像版本号]
docker pull crpi-8btglk4y57n9tk9c.cn-beijing.personal.cr.aliyuncs.com/data-project/data-projrct-redis:7-alpine3、镜像拉取完成后,执行 docker compose up -d 命令启动容器即可
docker compose up -d第一次如有报错执行下面命令:
docker compose down -v #删除容器所有资源
docker compose up -d #重新启动所有容器
部署完成
Docker 安装及常用命令
使用 rpm 存储库安装
在新主机上首次安装 Docker 引擎之前,需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。
设置存储库
安装 yum-utils 软件包(提供 yum-config-manager 实用程序)并设置存储库。
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo- 安装 Docker 引擎 : Docker Engine、containerd 和 Docker Compose:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin- 启动 Docker
sudo systemctl start docker- docker 常用命令
sudo service docker start // 启动docker服务
sudo service docker stop //停止docker服务
sudo docker info // 查看docker相关信息
sudo docker stats // 检查docker 守护进程是否在运行
sudo docker ps -a // 列出所有容器
sudo docker ps -l //最后一次运行的容器
sudo docker start/stop/restart 容器名(也可以使用容器ID) // 启动/停止/重新启动容器
sudo docker images // 列出镜像
sudo docker pull 镜像名 // 拉取镜像
sudo docker rm $(docker ps -a -q) // 删除所有容器
sudo docker rm 容器名 // 删除单个容器
# 通过仓库名:版本删除
#docker rmi crpi‑8btglk4y57n9tk9c.cn‑beijing.personal.cr.aliyuncs.com/bpmn‑project/bpmn‑nest‑be‑app:[镜像版本号]
docker rmi crpi‑8btglk4y57n9tk9c.cn‑beijing.personal.cr.aliyuncs.com/bpmn‑project/bpmn‑nest‑be‑app:v1.0.0
# down 删除容器,不删镜像
docker compose down
# down 删容器及其容器相关数据,除不删镜像
docker compose down -v