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

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 --version

    bash

    运行

    复制代码
    # 以 Ubuntu 为例
    apt update && apt install -y docker.io
    systemctl start docker
    systemctl enable docker
    docker --version
  • 开放项目所需端口(如 80、8080、3306 等):

    1. 云服务器控制台配置安全组(关键!):在阿里云 / 腾讯云 / 华为云控制台找到「安全组」,添加入方向规则,开放对应端口(例如 8080 端口,授权对象 0.0.0.0/0)
    2. 服务器本地防火墙开放端口(以 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 (公共仓库,适合公开项目)

  1. 本地登录 Docker Hub(需先注册账号) bash

    运行

    复制代码
    docker login
    # 输入用户名和密码
  2. 给镜像打标签(格式:docker tag 本地镜像名:标签 你的 Docker Hub 用户名 / 镜像名:标签) bash

    运行

    复制代码
    docker tag my-project:v1 your-docker-username/my-project:v1
  3. 推送镜像到 Docker Hub bash

    运行

    复制代码
    docker push your-docker-username/my-project:v1
  4. 云服务器拉取镜像 bash

    运行

    复制代码
    docker pull your-docker-username/my-project:v1

方式 2:通过镜像导出 / 导入(私有项目推荐,无需仓库)

  1. 本地将镜像导出为 tar 包 bash

    运行

    复制代码
    # 格式:docker save -o 导出文件名.tar 镜像名:标签
    docker save -o my-project-v1.tar my-project:v1
  2. 将 tar 包上传到云服务器(使用 scp 命令,Windows 可使用 Xshell/FTP 工具) bash

    运行

    复制代码
    # 格式:scp 本地tar包路径 服务器用户名@服务器IP:服务器保存路径
    scp my-project-v1.tar root@123.45.67.89:/root/
  3. 云服务器导入镜像 bash

    运行

    复制代码
    # 格式:docker load -i 服务器上的tar包路径
    docker load -i /root/my-project-v1.tar
  4. 导入完成后,执行 docker images 验证镜像是否存在

四、最终部署:云服务器启动 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 目录

验证部署成功

  1. 查看容器运行状态 bash

    运行

    复制代码
    # 查看所有运行中的容器
    docker ps
    # 查看所有容器(包括停止的)
    docker ps -a
  2. 访问项目:在本地浏览器输入 http://云服务器IP:宿主端口(如 http://123.45.67.89:8080),能正常访问则部署成功

  3. 查看容器日志(排查问题用) 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

总结

  1. 核心流程:云服务器安装 Docker + 开放端口 → 本地项目打包 + 编写 Dockerfile + 构建镜像 → 镜像传输到云服务器 → 云服务器启动容器(端口映射)
  2. 关键文件:Dockerfile 是镜像构建的核心,需根据项目类型编写对应模板
  3. 关键命令:docker build(构建镜像)、docker run -d -p(后台运行 + 端口映射)、docker ps(查看容器)
  4. 镜像传输:私有项目优先用「导出 / 导入」,公开项目用 Docker Hub
相关推荐
赵文宇(温玉)4 小时前
免费|不限速|不限流量|多架构|容器镜像服务---第1批同步:Docker官方维护的143个library镜像仓库
docker·容器·架构
工具罗某人5 小时前
docker快速部署redis
redis·docker·容器
杨浦老苏6 小时前
轻量级自托管仪表盘Dashlet
docker·群晖·导航
工具罗某人6 小时前
docker快速部署minio
java·nginx·docker
三不原则7 小时前
实战:Docker+K8s 部署 MNIST 模型,实现 API 调用功能
docker·容器·kubernetes
zhanjixun8 小时前
Spring Boot Maven项目构建Docker镜像
spring boot·docker·maven
java_logo11 小时前
Docker 部署 PostgreSQL 数据库教程
数据库·docker·postgresql·postgresql部署·postgresql部署文档·postgresql部署方案·postgresql部署教程
CodeCaptain12 小时前
通过huggingface的hf download下载的Qwen模型,如何使用用Docker 启动 vLLM 服务
docker·ai·vllm
田野里的雨13 小时前
onlyoffice9.2.1 docker容器中突破20限制
运维·docker·容器
人工智能训练13 小时前
冬日“冻”机无解?联想ThinkPad低温保护无法开机,双电池+BIOS放电终极攻略
java·服务器·ubuntu·docker·电脑·开机·电脑维修