当前位置: 首页 > news >正文

【Docker】[特殊字符] Docker 部署完全指南 - 从本地开发到云服务器 - 指南

Docker 部署完全指南 - 从本地开发到云服务器

前言

很多开发者在学习 Docker 时,经常会被 docker-compose.ymldocker-compose.production.yml 这两个配置文件搞糊涂。他们看起来很相似,但用途却完全不同。本文将从第一性原理出发,帮你彻底理解 Docker 部署的全过程。


核心问题

为什么需要两个 Docker Compose 配置文件?

这个问题的答案,就是理解 Docker 部署的关键。


第一部分:理解镜像和容器

什么是 Docker 镜像?

Docker 镜像是一个不可变的快照,包含:

  • 操作系统(如 openjdk:21-slim)
  • 应用代码
  • 依赖库
  • 配置文件

类比:镜像就像一个蓝图或模板。

什么是 Docker 容器?

Docker 容器是镜像的运行实例

类比:容器就像根据蓝图建造的房子。

关键区别

镜像(Image)- 蓝图↓docker run↓
容器(Container)- 房子

重要:一个镜像可以启动多个容器,但所有容器都是基于同一个镜像。


第二部分:镜像的两种获取方式

方式 1: 本地构建(build)

backend:
build:
context: ./services/backend
dockerfile: Dockerfile

过程

  1. 读取 Dockerfile
  2. 执行 Dockerfile 中的命令
  3. 生成镜像
  4. 启动容器

时间:2-5 分钟

用途:本地开发

方式 2: 远程拉取(image)

backend:
image: williamdsy/tianyan-backend:latest

过程

  1. 从 Docker Hub 拉取镜像
  2. 启动容器

时间:30 秒

用途:云服务器部署


第三部分:完整的工作流

步骤 1: 本地开发

# 修改代码
# 本地测试
docker-compose up

发生了什么

  • 读取 docker-compose.yml
  • 看到 build: ./services/backend
  • 构建镜像:williamdsy/tianyan-backend:latest
  • 启动容器
  • 挂载本地代码(volumes)
  • 支持热重启

步骤 2: 构建镜像

docker build -t williamdsy/tianyan-backend:latest ./services/backend

发生了什么

  • 读取 ./services/backend/Dockerfile
  • 执行 Dockerfile 中的命令
  • 生成镜像:williamdsy/tianyan-backend:latest

步骤 3: 推送到 Docker Hub

docker login
docker push williamdsy/tianyan-backend:latest

发生了什么

  • 登录 Docker Hub
  • 上传镜像到 Docker Hub
  • 镜像现在可以从任何地方拉取

步骤 4: 云服务器部署

# 云服务器上
docker-compose -f docker-compose.production.yml pull
docker-compose -f docker-compose.production.yml up -d

发生了什么

  • 读取 docker-compose.production.yml
  • 看到 image: williamdsy/tianyan-backend:latest
  • 从 Docker Hub 拉取镜像
  • 启动容器

第四部分:两个配置文件的区别

docker-compose.yml(本地开发)

version: '3.8'
services:
backend:
build:
context: ./services/backend
dockerfile: Dockerfile
container_name: tianyan-backend
ports:
- "8081:8080"
volumes:
- ./services/backend:/app
environment:
- SPRING_PROFILES_ACTIVE=dev

关键特点

  • build: - 本地构建镜像
  • volumes: - 挂载本地代码,支持热重启
  • SPRING_PROFILES_ACTIVE=dev - 开发环境配置

docker-compose.production.yml(云服务器)

version: '3.8'
services:
backend:
image: williamdsy/tianyan-backend:latest
container_name: tianyan-backend
ports:
- "8081:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod

关键特点

  • image: - 使用预先构建的镜像
  • ❌ 没有 volumes: - 不需要挂载本地代码
  • SPRING_PROFILES_ACTIVE=prod - 生产环境配置

第五部分:核心洞察

它们使用的是同一个镜像!

这是最重要的理解:

docker-compose.yml(本地)↓构建镜像:williamdsy/tianyan-backend:latest↓docker push↓Docker Hub↓docker-compose.production.yml(云服务器)↓拉取镜像:williamdsy/tianyan-backend:latest↓启动容器

关键点

  • ✅ 镜像只构建一次(在本地)
  • ✅ 镜像通过 Docker Hub 传输到云服务器
  • ✅ 两个配置文件使用的是同一个镜像
  • ✅ 区别只是如何获取镜像

为什么需要两个配置文件?

方面本地开发云服务器
镜像来源本地构建Docker Hub 拉取
代码挂载有(支持热重启)无(代码已在镜像中)
环境配置devprod
构建时间2-5 分钟0 分钟
启动时间

第六部分:为什么这样设计?

本地开发为什么使用 build?

✅ 频繁修改代码
✅ 需要快速反馈
✅ 支持热重启
✅ 不需要推送到 Docker Hub

云服务器为什么使用 image?

✅ 代码已经在镜像中
✅ 不需要构建工具(Java、Node.js 等)
✅ 部署速度快(只需拉取镜像)
✅ 镜像已经在本地充分测试

第七部分:完整的工作流示例

场景:修改登录功能

# 1. 本地修改代码
# 编辑 services/backend/src/main/kotlin/com/tianyan/api/controller/UserController.kt
# 2. 本地测试
docker-compose up
# 容器启动,代码自动挂载,支持热重启
# 3. 测试完成后,提交代码
git add .
git commit -m "feat: 改进登录功能"
git push origin feature/dev
# 4. 构建镜像
docker build -t williamdsy/tianyan-backend:latest ./services/backend
# 5. 推送到 Docker Hub
docker login
docker push williamdsy/tianyan-backend:latest
# 6. 云服务器部署
ssh root@你的服务器IP
cd /opt/tianyan
git pull origin feature/dev
docker-compose -f docker-compose.production.yml pull
docker-compose -f docker-compose.production.yml up -d
# 7. 验证部署
curl https://api.comettrail.store/api/auth/login

第八部分:常见问题

Q1: 为什么本地开发不需要 Docker Hub?

A: 因为本地开发频繁修改代码,每次修改都需要重新构建。使用 build: 方式更方便,不需要推送到 Docker Hub。

Q2: 为什么云服务器不能直接构建?

A: 可以,但不推荐。原因:

  • ❌ 云服务器需要安装 Java、Node.js 等工具
  • ❌ 部署速度慢(2-5 分钟)
  • ❌ 构建失败会影响生产环境

Q3: 镜像可以在本地和云服务器上同时运行吗?

A: 可以。因为它们使用的是同一个镜像。

Q4: 如何回滚到之前的版本?

A: 使用镜像标签:

# 推送不同版本的镜像
docker build -t williamdsy/tianyan-backend:v1.0 ./services/backend
docker push williamdsy/tianyan-backend:v1.0
# 云服务器回滚
docker-compose -f docker-compose.production.yml pull
# 修改 docker-compose.production.yml 中的镜像标签
# image: williamdsy/tianyan-backend:v1.0
docker-compose -f docker-compose.production.yml up -d

第九部分:总结

核心概念

  1. 镜像是不可变的快照,包含操作系统、代码、依赖等
  2. 容器是镜像的运行实例
  3. 镜像有两种获取方式:本地构建或远程拉取
  4. 两个配置文件使用同一个镜像,区别只是获取方式

工作流

本地开发 → 构建镜像 → 推送到 Docker Hub → 云服务器拉取 → 启动容器

优势

  • ✅ 本地充分测试
  • ✅ 云服务器部署快
  • ✅ 支持版本管理
  • ✅ 支持快速回滚

参考资源


希望这篇文章能帮助你彻底理解 Docker 部署!

http://www.rkmt.cn/news/53376.html

相关文章:

  • Day42(12)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project02\tlias-web-management
  • 详细介绍:Next.JS环境搭建,对接Rust的RESTful API
  • P14510 夜里亦始终想念着你 miss 题解
  • 解码死锁的产生与解决
  • P9846 [ICPC 2021 Nanjing R] Paimons Tree
  • linux audio
  • 透视数字世界:可观测平台如何破解企业智能运维困局
  • 2025 履带厂家最新推荐排行榜:聚焦高性能钢制履带与履带板,权威测评优选榜单履带板/履带钢/钢制履带/钢履带/履带型钢公司推荐
  • linux at 脚本
  • 什么是可观测性?数字化转型时代的企业“透视眼”
  • 深入解析:FPGA开发入门:深入理解计数器——数字逻辑的时序基石
  • 2025年佛山二手房拍卖公司专业推荐指南,佛山二手房拍卖/佛山房屋拍卖全流程服务
  • 2 小时,我搭了一套工单实时跟进系统,让每个工序进度一目了然!
  • linux arp缓存
  • CCS新能源船舶智能监控终端
  • 每日 Emacs Tip:winner-mode —— 窗口布局的“撤销/重做”神器
  • 掌握Ansible:自动化运维全攻略 - 实践
  • Notes about interesting concepts in Linear Algebra (2025 Fall)
  • 2025年闭口塑料罐批发厂家权威推荐榜单:塑料闭口罐/30L闭口罐/5L闭口罐源头厂家精选
  • 2025年成套高低压柜实力厂家权威推荐榜单:高低压成套配电柜/高低压柜厂家成套/高低压开关柜成套源头厂家精选
  • 2025年广东治疗焦虑医院服务权威推荐榜单:广州治疗心理医院/广东治疗癫痫医院/广州心理医院服务精选
  • 2025 最新搅拌机源头厂家推荐排行榜:聚焦纳米级脱泡技术,权威测评脱泡搅拌机/真空搅拌机/锡膏搅拌机/行星式搅拌机/行星式重力搅拌机/离心脱泡搅拌机公司推荐
  • 2025年分子防潮封堵剂制造企业权威推荐榜单:福州高分子防潮封堵剂/南京高分子防潮封堵剂/汨罗高分子防潮封堵剂源头厂家精选
  • 2025年软床企业推荐:优秀企业榜单
  • 2025年软床公司推荐排行榜前十强
  • 实验室氢气传感器选型陷阱:为什么90%的人都选错了
  • 2025 最新推荐分子蒸馏设备厂家权威排行榜,国际协会测评认证 专利技术与进口级品质双优品牌实测推荐工业化/多级/不锈钢/多功能分子蒸馏设备公司推荐
  • 完整教程:PyQt5 入门教程(7万字详解)
  • 2025年山东艺考生文化课机构实力榜:高三艺考生文化课、全日制艺考生文化课、三家特色机构与标杆校的差异化突围​
  • AAAI2025!北理工团队提出FBRT-YOLO:面向实时航拍图像更快更好的目标检测 |计算机视觉|目标检测