Docker镜像与容器管理
2025/9/17大约 4 分钟
Docker镜像与容器管理
前置知识
在开始本教程之前,建议您具备以下基础知识:
- Docker基础概念
- Linux基本命令
- Dockerfile语法基础
Docker镜像详解
什么是Docker镜像?
Docker镜像是一个只读的模板,包含了运行应用程序所需的所有文件和配置。镜像具有以下特点:
- 分层结构:每一层都是只读的,可以被多个容器共享
- 增量更新:只需要更新变化的层,提高效率
- 缓存机制:构建时可以复用已有的层
镜像的组成
graph TB
A[基础镜像层] --> B[应用代码层]
B --> C[依赖库层]
C --> D[配置层]
D --> E[启动命令层]
镜像管理实战
1. 镜像的获取与删除
# 搜索镜像
docker search mysql
# 拉取指定版本
docker pull mysql:8.0
# 查看镜像详情
docker inspect mysql:8.0
# 删除镜像
docker rmi mysql:8.0
# 强制删除
docker rmi -f mysql:8.0
2. 镜像的导入导出
# 导出镜像
docker save mysql:8.0 > mysql.tar
# 导入镜像
docker load < mysql.tar
# 标记镜像
docker tag mysql:8.0 my-mysql:latest
3. 构建自定义镜像
基础Dockerfile
# 使用多阶段构建
FROM maven:3.8.4-openjdk-11 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
构建命令
# 基本构建
docker build -t myapp:1.0 .
# 使用缓存构建
docker build --cache-from myapp:1.0 -t myapp:1.1 .
# 不使用缓存构建
docker build --no-cache -t myapp:1.0 .
容器生命周期管理
1. 容器的创建与运行
# 创建容器
docker create --name myapp -p 8080:8080 myapp:1.0
# 运行容器
docker run -d \
--name myapp \
-p 8080:8080 \
-v /data:/app/data \
-e SPRING_PROFILES_ACTIVE=prod \
myapp:1.0
# 启动已有容器
docker start myapp
2. 容器状态管理
# 暂停容器
docker pause myapp
# 恢复容器
docker unpause myapp
# 重启容器
docker restart myapp
# 停止容器
docker stop myapp
3. 容器资源管理
# 查看容器资源使用情况
docker stats myapp
# 更新容器资源限制
docker update \
--cpus 2 \
--memory 2G \
myapp
# 查看容器进程
docker top myapp
数据管理
1. 数据卷(Volumes)
# 创建数据卷
docker volume create mydata
# 使用数据卷
docker run -d \
--name mysql \
-v mydata:/var/lib/mysql \
mysql:8.0
# 备份数据卷
docker run --rm \
-v mydata:/source \
-v $(pwd):/backup \
alpine tar cvf /backup/backup.tar /source
2. 绑定挂载(Bind Mounts)
# 挂载本地目录
docker run -d \
--name nginx \
-v /local/path:/usr/share/nginx/html \
nginx
网络管理
1. 网络类型
- bridge:默认网络,容器间可以通信
- host:共享主机网络
- none:无网络
- overlay:跨主机网络
2. 网络操作
# 创建网络
docker network create mynet
# 连接容器到网络
docker network connect mynet myapp
# 断开网络连接
docker network disconnect mynet myapp
# 查看网络详情
docker network inspect mynet
监控与日志
1. 容器日志
# 查看实时日志
docker logs -f myapp
# 查看最近的100行日志
docker logs --tail 100 myapp
# 查看特定时间段的日志
docker logs --since 2023-01-01T00:00:00 myapp
2. 容器监控
# 查看容器详细信息
docker inspect myapp
# 查看容器端口映射
docker port myapp
# 查看容器变更
docker diff myapp
最佳实践
注意事项
镜像管理
- 使用具体的标签而不是latest
- 定期清理未使用的镜像
- 使用多阶段构建减小镜像大小
容器管理
- 设置资源限制
- 使用健康检查
- 合理设置重启策略
数据管理
- 使用数据卷而不是绑定挂载
- 定期备份重要数据
- 注意数据权限设置
性能优化
镜像优化
- 合并RUN命令
- 使用.dockerignore
- 选择合适的基础镜像
容器优化
- 合理分配资源
- 使用数据卷
- 优化网络配置
常见问题
1. 容器日志占用空间过大?
解决方案:
- 配置日志轮转
- 使用外部日志收集系统
- 定期清理日志
- 限制日志大小
2. 容器启动很慢?
排查步骤:
- 检查镜像大小
- 查看启动命令
- 检查资源限制
- 优化应用配置
- 使用性能分析工具
3. 数据卷权限问题?
解决方案:
- 检查用户映射
- 调整文件权限
- 使用正确的挂载选项
- 设置适当的SELinux上下文
总结
本教程详细介绍了Docker镜像和容器的管理,包括:
- ✅ 镜像管理:构建、获取、导入导出
- ✅ 容器生命周期:创建、运行、状态管理
- ✅ 数据管理:数据卷、绑定挂载
- ✅ 网络配置:网络类型、连接管理
- ✅ 监控日志:日志查看、容器监控
下一步学习
- 学习Dockerfile的高级特性
- 探索Docker Compose的使用
- 了解Docker网络的高级配置
- 实践容器编排和集群管理