Docker 容器化部署实战:从安装到上线全流程

一、为什么每个开发者都该会 Docker

“在我机器上能跑”是开发圈最大的谎言。Docker 把应用和它依赖的环境打包成一个不可变的镜像,从开发到生产环境完全一致。本文带你从零走完一次完整部署。

二、安装与基础概念

  • 镜像(Image):只读模板,类似安装包。
  • 容器(Container):镜像的运行实例。
  • 仓库(Registry):存镜像的地方,如 Docker Hub。
# 安装(Ubuntu)
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
# 验证
docker run hello-world

三、写第一个 Dockerfile

以 Spring Boot 应用为例:

FROM eclipse-temurin:17-jdk
WORKDIR /app
COPY target/app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

多阶段构建能大幅减小体积:

FROM maven:3.9 AS build
COPY . /src && RUN mvn -f /src/pom.xml package
FROM eclipse-temurin:17-jre
COPY --from=build /src/target/app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

四、用 docker-compose 编排多服务

version: "3.8"
services:
  app:
    build: .
    ports: ["8080:8080"]
    depends_on: [mysql, redis]
  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: pwd123
    volumes: ["mysql-data:/var/lib/mysql"]
  redis:
    image: redis:7
volumes:
  mysql-data:

一条 docker compose up -d 拉起整套环境。

五、上线到服务器

  1. 把镜像推到仓库:docker tag app:1.0 registry.com/app:1.0 && docker push
  2. 服务器拉取并运行:docker run -d -p 8080:8080 registry.com/app:1.0
  3. 前面挂 Nginx 做反向代理和 HTTPS。

六、常见坑

  • 容器里时间不对:挂载 /etc/localtime 或设 TZ 环境变量。
  • 日志写满磁盘:配 --log-opt max-size=10m。
  • 数据不持久:务必用 volume 挂载,别写进容器层。

结语

Docker 是现代后端的基本功。先会用,再理解原理,慢慢你就离不开它了。

上一篇 SQL Server 性能优化:10 个实战技巧(附脚本)
下一篇 LangGraph 多智能体编排实战:从单 Agent 到团队协作
最新评论
Docker 网络模式详解:bridge/host 生产选型 - FSData
Docker 网络模式详解:bridge/host 生产选型 - FSData
8月20日
[…] 注意最后那条:把端口绑定到 127.0.0.1,再由宿主机上的 Nginx 反代进来,比直接 -p 80:80 暴露安全得多,也方便统一做
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
8月20日
[…] Pinia 的工程化用法,可以参考我们之前的实战文章 《Vue3 组合式 API + Pinia:状态管理从入门到实战》,那里覆盖了 Sto
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
8月19日
[…] 状态,点一下就能起停容器,配合我们讲过的 Docker Compose 编排 […]
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
8月19日
[…] 缓存三大坑的本质都是”缓存失效导致请求穿透到数据库”。记住口诀:穿透用布隆、击穿用锁、雪崩用错峰。配合合理的过期策略
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
8月19日
[…] Docker 镜像部署。结合我们之前写的 Docker Compose 一键编排实战,可以在 CI […]