Docker 部署项目到云服务器完整步骤

你需要一套从本地准备到云服务器落地的完整流程,以下步骤涵盖环境准备、项目打包、镜像构建 / 传输、容器运行全链路,适配绝大多数 Web 项目(Java、Python、Node.js 等)。
一、前置准备:国内国外云服务器与本地环境
1. 云服务器环境配置
首先确保云服务器满足基础要求:
- 操作系统:推荐 CentOS 7/8 或 Ubuntu 18.04+(主流云厂商均提供)
- 安装 Docker 环境(核心依赖):
bash
运行
# 以 CentOS 为例
# 1. 卸载旧版本(如有)
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3. 添加 Docker 软件源
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4. 安装 Docker CE
yum install -y docker-ce docker-ce-cli containerd.io
# 5. 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker
# 6. 验证安装成功
docker –versionbash
运行
# 以 Ubuntu 为例
apt update && apt install -y docker.io
systemctl start docker
systemctl enable docker
docker –version - 开放项目所需端口(如 80、8080、3306 等):
- 云服务器控制台配置安全组(关键!):在阿里云 / 腾讯云 / 华为云控制台找到「安全组」,添加入方向规则,开放对应端口(例如 8080 端口,授权对象 0.0.0.0/0)
- 服务器本地防火墙开放端口(以 CentOS 为例):
bash
运行
firewall-cmd –zone=public –add-port=8080/tcp –permanent
firewall-cmd –reload
2. 本地环境准备
- 安装 Docker(与服务器一致,用于本地构建镜像或测试)
- 项目代码已完成调试,确保本地可正常运行
- 准备好 Dockerfile(核心配置文件,用于构建镜像)
二、核心步骤:项目打包与 Docker 镜像构建
1. 项目打包(按项目类型区分)
先将项目打包为可执行文件 / 部署包,示例如下:
- Java 项目(Spring Boot):使用 Maven/Gradle 打包为 jar 包
bash
运行
# Maven
mvn clean package -Dmaven.test.skip=true
# 打包后在 target 目录下生成 xxx.jar 文件 - Python 项目(Flask/Django):无需打包(需携带 requirements.txt 依赖文件)
- Node.js 项目:打包为 dist 目录(前端项目)或携带 package.json(后端项目)
- PHP 项目:直接携带完整项目目录(需搭配 Nginx/Apache)
2. 编写 Dockerfile
在项目根目录下创建 Dockerfile(无后缀名),以下是 3 个主流项目的示例模板:
示例 1:Java Spring Boot 项目
dockerfile
# 基础镜像(对应项目的 JDK 版本,如 JDK 8)
FROM openjdk:8-jdk-alpine
# 作者信息(可选)
MAINTAINER yourname <your@email.com>
# 将本地 jar 包复制到容器内(左侧为本地 jar 包路径,右侧为容器内路径)
COPY target/xxx.jar /app.jar
# 暴露项目运行端口(与项目配置的端口一致,如 8080)
EXPOSE 8080
# 容器启动命令(运行 jar 包)
ENTRYPOINT ["java", "-jar", "/app.jar"]
示例 2:Python Flask 项目
dockerfile
# 基础镜像
FROM python:3.9-alpine
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt /app/
# 安装依赖
RUN pip install –no-cache-dir -r requirements.txt
# 复制项目所有文件
COPY . /app/
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
示例 3:前端 Vue/React 项目(Nginx 部署)
dockerfile
# 阶段 1:构建项目
FROM node:16-alpine as build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . ./
RUN npm run build
# 阶段 2:使用 Nginx 部署
FROM nginx:alpine
# 复制构建后的 dist 目录到 Nginx 静态资源目录
COPY –from=build /app/dist /usr/share/nginx/html
# 复制自定义 Nginx 配置(可选)
# COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露 80 端口
EXPOSE 80
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
3. 本地构建 Docker 镜像
在项目根目录(Dockerfile 所在目录)执行构建命令:
bash
运行
# 格式:docker build -t 镜像名称:标签 .
# 示例:构建名为 my-project,标签为 v1 的镜像
docker build -t my-project:v1 .
- 命令末尾的 . 表示「当前目录」(Dockerfile 所在目录)
- 构建完成后,执行 docker images 可查看本地镜像列表
三、镜像传输:本地镜像推送到云服务器
有两种常用方式,按需选择:
方式 1:通过 Docker Hub (公共仓库,适合公开项目)
bash
运行
docker login
# 输入用户名和密码
bash
运行
docker tag my-project:v1 your-docker-username/my-project:v1
bash
运行
docker push your-docker-username/my-project:v1
bash
运行
docker pull your-docker-username/my-project:v1
方式 2:通过镜像导出 / 导入(私有项目推荐,无需仓库)
bash
运行
# 格式:docker save -o 导出文件名.tar 镜像名:标签
docker save -o my-project-v1.tar my-project:v1
bash
运行
# 格式:scp 本地tar包路径 服务器用户名@服务器IP:服务器保存路径
scp my-project-v1.tar root@123.45.67.89:/root/
bash
运行
# 格式:docker load -i 服务器上的tar包路径
docker load -i /root/my-project-v1.tar
四、最终部署:云服务器启动 Docker 容器
在云服务器上执行容器启动命令,运行项目:
bash
运行
# 核心命令:docker run(后台运行+端口映射+容器命名)
# 格式:docker run -d –name 容器名称 -p 宿主端口:容器端口 镜像名:标签
# 示例:
# -d:后台运行容器
# –name my-app-container:给容器命名为 my-app-container
# -p 8080:8080:将服务器的 8080 端口映射到容器的 8080 端口(宿主端口:容器端口)
# my-project:v1:要运行的镜像名称和标签
docker run -d –name my-app-container -p 8080:8080 my-project:v1
关键参数说明
| -d | 后台运行容器(守护进程模式),避免终端关闭后容器停止 |
| –name | 给容器指定唯一名称,方便后续管理(如启动 / 停止 / 删除) |
| -p | 端口映射(核心!):将云服务器的「宿主端口」映射到容器的「应用端口」,外部可通过「服务器 IP: 宿主端口」访问项目 |
| -v | 数据卷挂载(可选,用于持久化数据,如数据库文件、配置文件):docker run -d –name my-app -p 8080:8080 -v /root/data:/app/data my-project:v1表示将服务器的 /root/data 目录挂载到容器的 /app/data 目录 |
验证部署成功
bash
运行
# 查看所有运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
bash
运行
# 格式:docker logs 容器名称/容器ID
docker logs my-app-container
# 实时查看日志
docker logs -f my-app-container
常用容器管理命令
bash
运行
# 停止容器
docker stop my-app-container
# 启动已停止的容器
docker start my-app-container
# 重启容器
docker restart my-app-container
# 删除容器(需先停止容器)
docker rm my-app-container
# 删除镜像(需先删除依赖该镜像的容器)
docker rmi my-project:v1







