Docker 学习笔记
一、核心概念
1.1 Docker 是什么
Docker 是一个容器化平台,提供隔离的运行环境。
┌─────────────────────────────────────────────┐
│ Docker │ ← 容器化平台
├─────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐│
│ │ MySQL │ │ JDK │ │ Nginx ││ ← 镜像(模板)
│ │ 镜像 │ │ 镜像 │ │ 镜像 ││
│ └────┬────┘ └────┬────┘ └─────────┘│
│ │ │ │
│ ┌────▼────┐ ┌────▼────┐ │
│ │ MySQL │ │ 你的项目 │ │ ← 容器(运行实例)
│ │ 容器 │ │ 容器 │ │
│ └─────────┘ └─────────┘ │
│ │ │ │
│ ▼ ▼ │
│ 端口 3306 端口 8081 │
└─────────────────────────────────────────────┘
外部可以访问
1.2 镜像 vs 容器
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 (Image) | 类 | 只读模板,包含运行应用所需的一切 |
| 容器 (Container) | 实例 | 镜像运行后的实例,可启动、停止、删除 |
一个镜像 ──启动──► 多个容器
openjdk:17 ──► 容器1 (端口 8080)
──► 容器2 (端口 8081)
──► 容器3 (端口 8082)
1.3 为什么用 Docker
- 环境一致性:不受宿主机环境影响
- 依赖隔离:不同项目可以有不同版本的依赖
- 快速部署:镜像启动秒级
- 易于分发:镜像可以在任何 Docker 环境运行
二、Dockerfile
2.1 什么是 Dockerfile
Dockerfile 是构建镜像的配方文件,定义了镜像如何构建。
2.2 常用指令
# 基础镜像
FROM eclipse-temurin:17-jre
# 工作目录
WORKDIR /app
# 复制文件
COPY target/*.jar app.jar
# 暴露端口
EXPOSE 8081
# 启动命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
2.3 构建流程
Dockerfile → docker build → 镜像 → docker run → 容器
三、常用命令
3.1 镜像相关
# 构建镜像
docker build -t 镜像名:标签 .
docker build -t demo-app:1.0 .
# 查看镜像
docker images
# 删除镜像
docker rmi demo-app:1.0
# 拉取镜像
docker pull mysql:8.4
# 导出/导入镜像
docker save -o app.tar demo-app:1.0
docker load -i app.tar
3.2 容器相关
# 启动容器
docker run -d -p 8081:8081 --name demo-app demo-app:1.0
# 查看运行的容器
docker ps
docker ps -a # 查看所有(包括已停止)
# 停止容器
docker stop demo-app
# 启动已停止的容器
docker start demo-app
# 重启容器
docker restart demo-app
# 删除容器
docker rm demo-app
docker rm -f demo-app # 强制删除
# 查看容器日志
docker logs demo-app
docker logs -f demo-app # 实时跟踪
docker logs --tail 100 demo-app
# 进入容器
docker exec -it demo-app /bin/bash
3.3 Docker Compose 相关
# 启动服务
docker compose up -d
docker compose up -d --build
# 停止服务
docker compose down
docker compose down -v # 删除数据卷
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f app
# 重启服务
docker compose restart app
3.4 清理命令
# 清理停止的容器
docker container prune
# 清理未使用的镜像
docker image prune
# 完全清理
docker system prune
docker system prune -a
四、项目结构示例
demo/
├── Dockerfile # 构建镜像的配方
├── docker-compose.yml # 多容器编排
├── .env # 环境变量
├── src/ # 源代码
├── pom.xml # Maven 配置
└── sql/ # 数据库脚本
五、部署流程
1. 上传代码到服务器
2. 配置 .env 文件
3. 构建镜像: docker compose build
4. 启动容器: docker compose up -d
5. 访问服务: http://服务器IP:端口
六、核心理解总结
| 概念 | 理解 |
|---|---|
| Docker | 容器化平台,提供隔离环境 |
| 镜像 | 只读模板,类似类 |
| 容器 | 运行实例,类似对象 |
| Dockerfile | 构建镜像的配方 |
| docker-compose | 多容器编排工具 |
Dockerfile → 构建镜像 → 运行成容器 → 提供服务
↑ ↓
继承基础镜像 用户访问