安装 Docker(服务器)
curl -fsSL https://get.docker.com | bash
下载报错
先把 CentOS 8 的 repo 切换到 vault 源
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
更新缓存:
dnf clean all
dnf makecache
然后重新安装 Docker:
curl -fsSL https://get.docker.com | bash
启动:
systemctl start docker
systemctl enable docker
查看:
docker info
版本过低解决办法
使用国内镜像
wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-24.0.6.tgz
-
然后解压、移动到 /usr/local/bin:
tar xzvf docker-24.0.6.tgz
sudo mv docker/* /usr/local/bin/
dockerd &
docker run hello-world
部署
明白了,我帮你写一个 完整的一键部署脚本,适配你现在的目录结构(后端 /usr/www/,前端 /usr/local/nginx/,Nginx 配置在前端目录下
一键部署脚本示例
- 保存为 /usr/deploy.sh:
#!/bin/bash
# 一键部署脚本 - NestJS + 前端 + MySQL + Redis + Nginx
# 适配目录:
# 后端:/usr/www
# 前端:/usr/local/nginx
# Nginx 配置:/usr/local/nginx/default.conf
set -e
echo "===== 开始部署 Docker 环境 ====="
# 1️⃣ 创建 docker-compose.yml
cat > /usr/docker-compose.yml << 'EOF'
version: '3'
services:
backend:
build: /usr/www
container_name: backend
ports:
- "3000:3000"
depends_on:
- mysql
- redis
frontend:
build: /usr/local/nginx
container_name: frontend
ports:
- "5173:5173"
mysql:
image: mysql:8
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis
container_name: redis
ports:
- "6379:6379"
nginx:
image: nginx:stable
container_name: nginx
ports:
- "80:80"
volumes:
- /usr/local/nginx:/etc/nginx/conf.d
- /usr/local/nginx/dist:/usr/share/nginx/html
depends_on:
- frontend
- backend
volumes:
mysql_data:
EOF
echo "✅ docker-compose.yml 创建完成"
# 2️⃣ 构建镜像
echo "===== 构建后端镜像 ====="
docker-compose -f /usr/docker-compose.yml build backend
echo "===== 构建前端镜像 ====="
docker-compose -f /usr/docker-compose.yml build frontend
# 3️⃣ 启动全部服务
echo "===== 启动所有服务 ====="
docker-compose -f /usr/docker-compose.yml up -d
# 4️⃣ 显示容器状态
echo "===== 当前容器状态 ====="
docker ps
echo "===== 部署完成 ====="
echo "访问前端: http://<服务器IP>/"
echo "后端 API: http://<服务器IP>:3000/"
echo "MySQL: 3306, Redis: 6379"
使用方法
-
保存脚本:
sudo nano /usr/deploy.sh
粘贴上面的脚本,保存
-
给脚本加可执行权限:
sudo chmod +x /usr/deploy.sh
-
运行部署脚本:
sudo /usr/deploy.sh
-
部署完成后,访问:
前端页面:http://服务器IP/
后端 API:http://服务器IP:3000/
MySQL 3306
Redis 6379
脚本特点
- 完全一键:创建 docker-compose.yml → 构建镜像 → 启动容器
- 自动挂载你的前端和 Nginx 配置
- 数据库持久化使用 Docker volume
- 可随时 docker-compose down 停止服务
可能报错
root@iZ2vc2rdyl4yp4nt4hlnpkZ usr\]# ls -l /usr/deploy.sh -rwxr-xr-x 1 root root 1836 3月 11 15:14 /usr/deploy.sh
转换为 Unix 格式
sudo dos2unix /usr/deploy.sh
如果提示 command not found,先安装 dos2unix:
sudo dnf install -y dos2unix
确认可执行权限(你已经有了,确认无误):
sudo chmod +x /usr/deploy.sh
执行脚本
sudo /usr/deploy.sh
或者切换到 /usr/:
cd /usr
sudo ./deploy.sh
-
root@iZ2vc2rdyl4yp4nt4hlnpkZ usr\]# sudo chmod +x deploy.sh \[root@iZ2vc2rdyl4yp4nt4hlnpkZ usr\]# sudo ./deploy.sh ===== 开始部署 Docker 环境 ===== ✅ docker-compose.yml 创建完成 ===== 构建后端镜像 ===== ./deploy.sh:行69: docker: 未找到命令 \[root@iZ2vc2rdyl4yp4nt4hlnpkZ usr\]# 说明 脚本执行时找不到 docker 命令,虽然你在终端输入 docker version 可以看到版本,但在 sudo ./deploy.sh 里,root 环境的 PATH 里可能没有 Docker 的安装路径。 确认 Docker 路径 which docker 在脚本开头强制设置 PATH 也就是which 显示的路径 在 deploy.sh 开头加一行: #!/bin/bash # 一键部署脚本 export PATH=$PATH:/usr/bin
docker compose version
如果提示:
docker: 'compose' is not a docker command
说明没有安装。mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64
-o ~/.docker/cli-plugins/docker-composechmod +x ~/.docker/cli-plugins/docker-compose
然后测试:
docker compose version
如果出现:
Docker Compose version v2.xx
就成功了。
再运行你的脚本:sudo ./deploy.sh 就能正常运行
制作镜像
前后端各一个 Dockerfile ⭐推荐
/usr/project
│
├─ backend
│ ├─ Dockerfile
│ ├─ package.json
│ └─ src
│
├─ frontend
│ ├─ Dockerfile
│ ├─ package.json
│ └─ src
│
└─ docker-compose.yml
backend/Dockerfile(NestJS)
FROM node:20
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node","dist/main.js"]
frontend/Dockerfile(Vue / React / Vite)
FROM node:20 as build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
FROM nginx:stable
COPY --from=build /app/dist /usr/share/nginx/html
docker-compose.yml
services:
backend:
build: ./backend
ports:
- "3000:3000"
depends_on:
- mysql
- redis
frontend:
build: ./frontend
ports:
- "80:80"
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: 123456
redis:
image: redis:7
启动
docker compose up -d --build
如何完全本地构建(不用拉国外数据)
方法一:先把基础镜像拉到本地(国内源或提前下载)
在有网络的机器上拉:
docker pull node:20
docker pull nginx:stable
docker pull mysql:8
docker pull redis:7
保存成 tar 包:
docker save node:20 -o node20.tar
docker save nginx:stable -o nginx.tar
拷贝到 离线服务器,加载镜像:
docker load -i node20.tar
docker load -i nginx.tar
构建你的镜像时就不需要联网了:
docker build -t my-backend .
完全自定义基础镜像
- 比如你不想用 node:20,自己做一个最小 Linux + Node:
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl gnupg
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
RUN apt-get install -y nodejs
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "dist/main.js"]
esc ---:wq ---回车
使用国内镜像加速器(最简单)
sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}