第一章:Docker 简介¶
什么是 Docker?¶
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。容器可以在任何支持 Docker 的环境中一致地运行,解决了"在我机器上能跑"的问题。
核心概念¶
- 镜像(Image):只读模板,包含运行应用所需的一切(代码、运行时、库、配置文件)
- 容器(Container):镜像的运行实例,相互隔离的进程
- 仓库(Registry):镜像的存储和分发中心
- Dockerfile:定义镜像构建过程的文本文件
Docker vs 虚拟机¶
| 特性 | Docker 容器 | 传统虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | MB 级 | GB 级 |
| 隔离性 | 进程级隔离 | 系统级隔离 |
| 性能 | 接近原生 | 有损耗 |
| 可移植性 | 极高 | 较低 |
| 操作系统 | 共享宿主机内核 | 独立内核 |
Docker 架构¶
┌─────────────────────────────────────────────────────────────┐
│ Docker Client │
│ (docker 命令) │
└─────────────────────────┬───────────────────────────────────┘
│ REST API
▼
┌─────────────────────────────────────────────────────────────┐
│ Docker Daemon │
│ (dockerd 守护进程) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Images │ │ Containers │ │ Networks │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Volumes │ │ BuildKit │ │ Plugins │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Container Runtime │
│ (containerd / runc) │
└─────────────────────────────────────────────────────────────┘
Docker 应用场景¶
1. 应用打包与分发¶
2. 微服务架构¶
# docker-compose.yml
services:
api:
image: myapi:latest
ports:
- "8000:8000"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
3. CI/CD 流水线¶
4. 开发环境标准化¶
安装 Docker¶
Ubuntu/Debian¶
# 方法一:官方脚本(推荐)
curl -fsSL https://get.docker.com | bash
# 方法二:手动安装
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
CentOS/RHEL¶
# 安装依赖
sudo yum install -y yum-utils
# 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动
sudo systemctl start docker
sudo systemctl enable docker
macOS¶
# 方法一:Docker Desktop(推荐)
# 下载:https://www.docker.com/products/docker-desktop
# 方法二:Homebrew
brew install --cask docker
Windows¶
配置 Docker¶
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录后生效
newgrp docker
# 配置 Docker 镜像加速(国内)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
验证安装¶
# 查看版本
docker --version
docker compose version
# 查看详细信息
docker info
# 运行测试容器
docker run hello-world
# 运行交互式容器
docker run -it ubuntu:22.04 bash
Docker 基本命令¶
镜像命令¶
# 查看本地镜像
docker images
docker image ls
# 搜索镜像
docker search nginx
docker search --filter=stars=1000 nginx
# 拉取镜像
docker pull nginx
docker pull nginx:1.24
docker pull nginx:alpine
docker pull --platform linux/arm64 nginx
# 删除镜像
docker rmi nginx:latest
docker image prune # 删除悬空镜像
docker image prune -a # 删除所有未使用镜像
# 查看镜像详情
docker inspect nginx:latest
# 查看镜像历史
docker history nginx:latest
# 导出/导入镜像
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar
# 标记镜像
docker tag nginx:latest myregistry.com/nginx:latest
容器命令¶
# 创建并运行容器
docker run nginx
docker run -d nginx # 后台运行
docker run -d -p 8080:80 nginx # 端口映射
docker run -d --name web nginx # 指定名称
docker run -it ubuntu bash # 交互式运行
docker run --rm ubuntu echo "hello" # 运行后删除
# 查看容器
docker ps # 运行中的容器
docker ps -a # 所有容器
docker ps -q # 只显示 ID
# 容器生命周期
docker start container_name
docker stop container_name
docker restart container_name
docker kill container_name
docker rm container_name
docker rm -f container_name # 强制删除运行中的容器
# 容器操作
docker exec -it container_name bash # 进入容器
docker logs container_name # 查看日志
docker logs -f container_name # 实时日志
docker logs --tail 100 container_name # 最后 100 行
# 复制文件
docker cp file.txt container_name:/path/
docker cp container_name:/path/file.txt ./
# 查看资源使用
docker stats
docker stats container_name
# 查看容器详情
docker inspect container_name
# 查看容器进程
docker top container_name
# 查看容器端口映射
docker port container_name
清理命令¶
# 清理停止的容器
docker container prune
# 清理未使用的镜像
docker image prune -a
# 清理未使用的卷
docker volume prune
# 清理未使用的网络
docker network prune
# 一键清理(慎用)
docker system prune -a --volumes
Docker 组件详解¶
containerd¶
containerd 是 Docker 的核心容器运行时,负责:
- 管理容器生命周期
- 拉取/推送镜像
- 存储管理
# 查看 containerd 状态
sudo systemctl status containerd
# 使用 ctr 命令(containerd CLI)
ctr images ls
ctr containers ls
runc¶
runc 是 OCI(Open Container Initiative)标准的容器运行时实现,负责:
- 创建容器
- 管理容器命名空间
- 资源隔离
Docker BuildKit¶
BuildKit 是新一代镜像构建引擎:
# 启用 BuildKit
DOCKER_BUILDKIT=1 docker build -t myapp .
# 或配置为默认启用
# /etc/docker/daemon.json
{
"features": {
"buildkit": true
}
}
Docker 网络基础¶
默认网络¶
创建自定义网络¶
# 创建桥接网络
docker network create mynet
# 创建指定子网的网络
docker network create --subnet=172.20.0.0/16 mynet
# 容器连接网络
docker run -d --name web --network mynet nginx
# 查看网络详情
docker network inspect mynet
# 删除网络
docker network rm mynet
Docker 存储基础¶
数据卷¶
# 创建卷
docker volume create mydata
# 查看卷
docker volume ls
docker volume inspect mydata
# 使用卷
docker run -d -v mydata:/data nginx
# 删除卷
docker volume rm mydata
绑定挂载¶
# 挂载宿主机目录
docker run -d -v /host/path:/container/path nginx
# 只读挂载
docker run -d -v /host/path:/container/path:ro nginx
小结¶
本章学习了:
- ✅ Docker 概念和架构
- ✅ Docker 与虚拟机的区别
- ✅ Docker 安装和配置
- ✅ 基本命令(镜像、容器、网络、存储)
- ✅ Docker 核心组件
下一章¶
第二章:镜像管理 - 深入学习 Dockerfile 编写和镜像优化。