Appearance
Docker 全面指南:从入门到项目部署
1 Docker 基础
1.1 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 客户端
- Docker 主机(守护进程)
- Registry(镜像仓库)
1.5 核心概念
概念 | 说明 | 类比 |
---|---|---|
镜像(Image) | 只读模板(含运行时环境) | 安装光盘 |
容器(Container) | 镜像的运行实例 | 安装好的软件 |
仓库(Repository) | 镜像存储分发中心 | 应用商店 |
1.6 Docker Hub
官方镜像仓库:https://hub.docker.com/
使用指南:
- 搜索所需镜像(如 Redis)
- 查看可用版本标签
- 选择官方镜像(Official Image)
- 查看使用文档
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 核心概念
解决的问题:多容器应用编排
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"]
# 其他中间件配置...
最佳实践指南
镜像优化
- 使用多阶段构建减小镜像体积
- 合并RUN指令减少镜像层
- 使用.dockerignore排除无用文件
安全建议
- 使用非root用户运行容器
- 定期更新基础镜像
- 扫描镜像漏洞(docker scan)
性能调优
- 限制容器资源(--cpus, --memory)
- 使用tmpfs内存文件系统
- 优化存储驱动(overlay2)
监控工具:cAdvisor + Prometheus + Grafana