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 到团队协作