Skip to content

Docker 全面指南:从入门到项目部署

1 Docker 基础

1.1 Docker 简介

核心问题:为什么需要 Docker?

  • 传统开发运维痛点:环境配置复杂,开发/测试/生产环境不一致
  • 跨环境部署挑战:操作系统差异、运行环境差异、应用配置差异
  • Docker 解决方案:标准化环境打包("一次封装,到处运行")

Docker 解决环境问题

核心特性:

  • 开源应用容器引擎(基于 Go 语言)
  • 轻量级、可移植的容器封装
  • 沙箱机制保障隔离性
  • 性能开销极低(对比传统虚拟机)

核心价值: "Build, Ship and Run Any App, Anywhere"

1.2 Docker 优势

优势说明应用场景
可移植性跨环境一致性开发→测试→生产环境迁移
可伸缩性快速弹性扩缩容应对流量高峰
隔离性进程级资源隔离多应用共存于单主机
高效性秒级启动速度快速迭代部署
版本控制镜像版本化管理回滚与审计

1.3 Docker vs 虚拟机

架构对比图

核心差异:

  • 隔离级别
    • VM:操作系统级虚拟化
    • Docker:进程级隔离
  • 性能表现
    • 启动速度:容器秒级 vs 虚拟机分钟级
    • 资源占用:容器共享内核 vs 虚拟机独立OS
  • 资源利用率
    • 容器 > 虚拟机(轻量级特性)

行业共识:虚拟机已死,容器才是未来

1.4 Docker 架构

C/S 架构:

  • Docker 客户端:CLI / RESTful API
  • Docker 守护进程:管理容器生命周期

Docker 架构

核心组件:

  1. Docker 客户端
  2. Docker 主机(守护进程)
  3. Registry(镜像仓库)

1.5 核心概念

概念说明类比
镜像(Image)只读模板(含运行时环境)安装光盘
容器(Container)镜像的运行实例安装好的软件
仓库(Repository)镜像存储分发中心应用商店

1.6 Docker Hub

官方镜像仓库https://hub.docker.com/

使用指南:

  1. 搜索所需镜像(如 Redis)
  2. 查看可用版本标签
  3. 选择官方镜像(Official Image)
  4. 查看使用文档

Docker Hub 界面

1.7 Docker 安装与卸载

环境要求:CentOS 7.x+(内核版本 3.10+)

卸载旧版本:

bash
sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

安装步骤:

bash
# 1. 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 2. 设置阿里云镜像源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3. 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 4. 启动服务
sudo systemctl start docker
sudo systemctl enable docker

1.8 服务管理命令

bash
# 查看状态
systemctl status docker

# 启停管理
systemctl start docker
systemctl stop docker
systemctl restart docker

1.9 镜像加速器

推荐加速器:

https://registry.dockermirror.com
https://registry.docker-cn.com

配置方法:

bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.dockermirror.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

2 镜像操作

2.1 搜索镜像

bash
docker search [OPTIONS] TERM

示例:

bash
docker search --limit 5 redis

2.2 拉取镜像

bash
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

示例:

bash
docker pull redis:7.0.10

2.3 查看本地镜像

bash
docker images [OPTIONS] [REPOSITORY[:TAG]]

示例:

bash
docker images -q  # 仅显示ID

2.4 删除镜像

bash
docker rmi [OPTIONS] IMAGE [IMAGE...]

示例:

bash
docker rmi -f $(docker images -q)  # 强制删除所有镜像

3 容器操作

3.1 容器类型

类型特点适用场景
交互式容器有输入输出终端
退出自动关闭
临时调试
守护式容器无交互终端
后台持续运行
服务部署

3.2 创建容器

bash
# 交互式容器
docker run -it --name=mycentos centos:7 /bin/bash

# 守护式容器
docker run -di --name=myredis redis:7.0.10

3.3 容器管理

bash
# 启停管理
docker start myredis
docker stop myredis
docker restart myredis

# 删除容器
docker rm -f myredis  # 强制删除运行中容器

3.4 进入容器

bash
docker exec -it myredis /bin/bash

3.5 实用命令

bash
# 查看日志
docker logs -f myredis

# 查看详情
docker inspect myredis

# 文件拷贝
docker cp file.txt myredis:/path/
docker cp myredis:/path/file.txt ./

3.6 容器迁移

bash
# 1. 容器保存为镜像
docker commit mycentos myimage

# 2. 镜像打包
docker save -o myimage.tar myimage

# 3. 恢复镜像
docker load -i myimage.tar

4 数据卷管理

4.1 核心概念

数据卷架构

解决的问题:容器数据持久化

4.2 数据卷操作

bash
# 创建数据卷
docker volume create myvol

# 查看数据卷
docker volume ls

# 查看详情
docker volume inspect myvol

# 删除数据卷
docker volume rm myvol

4.3 数据卷挂载

bash
docker run -d --name=redis \
  -v redis-data:/data \
  redis:7.0.10

4.4 目录挂载

bash
docker run -d --name=nginx \
  -v /host/path:/container/path \
  nginx:latest

5 Spring Boot 项目部署

5.1 Dockerfile 基础

核心指令:

dockerfile
FROM centos:7                  # 基础镜像
MAINTAINER dev@example.com     # 维护者
RUN mkdir -p /app              # 执行命令
ADD app.jar /app/app.jar       # 添加文件
EXPOSE 8080                    # 暴露端口
WORKDIR /app                   # 工作目录
ENTRYPOINT ["java","-jar","app.jar"] # 启动命令

5.2 项目部署流程

1. 准备环境:

bash
# 安装JDK17基础镜像
docker build -t centos7-jdk17 .

2. Dockerfile示例:

dockerfile
FROM centos7-jdk17
EXPOSE 8081
ADD ebuy-app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

3. 构建镜像:

bash
docker build -t ebuy-app:v1.0 .

4. 推送镜像(阿里云):

bash
# 登录仓库
docker login --username=xxx registry.cn-hangzhou.aliyuncs.com

# 标记镜像
docker tag ebuy-app:v1.0 registry.cn-hangzhou.aliyuncs.com/ns/ebuy-app:v1

# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/ns/ebuy-app:v1

5. 运行容器:

bash
docker run -d --name ebuy -p 8081:8081 ebuy-app:v1.0

6 Docker Compose

6.1 核心概念

Compose架构

解决的问题:多容器应用编排

6.2 安装配置

bash
# 安装最新版
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

6.3 编排示例

yaml
version: '3.8'
services:
  mysql:
    image: mysql:8.0.30
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - mysql-data:/var/lib/mysql

  app:
    image: ebuy-app:v1.0
    ports:
      - "8080:8080"
    depends_on:
      - mysql

volumes:
  mysql-data:

6.4 常用命令

bash
# 启动服务
docker compose up -d

# 停止服务
docker compose down

# 查看状态
docker compose ps

# 查看日志
docker compose logs -f

6.5 全栈中间件部署

yaml
services:
  redis:
    image: redis:7.0.10
    ports: ["6379:6379"]

  mysql:
    image: mysql:8.0.30
    ports: ["3306:3306"]
    environment:
      MYSQL_ROOT_PASSWORD: root

  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"

  kafka:
    image: bitnami/kafka:3.4
    ports: ["9092:9092"]

  # 其他中间件配置...

最佳实践指南

镜像优化

  1. 使用多阶段构建减小镜像体积
  2. 合并RUN指令减少镜像层
  3. 使用.dockerignore排除无用文件

安全建议

  1. 使用非root用户运行容器
  2. 定期更新基础镜像
  3. 扫描镜像漏洞(docker scan)

性能调优

  1. 限制容器资源(--cpus, --memory)
  2. 使用tmpfs内存文件系统
  3. 优化存储驱动(overlay2)

监控工具:cAdvisor + Prometheus + Grafana