跳转至

第一章: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. 应用打包与分发

# 一键打包应用及所有依赖
docker build -t myapp:v1.0 .
docker push registry.example.com/myapp:v1.0

2. 微服务架构

# docker-compose.yml
services:
  api:
    image: myapi:latest
    ports:
      - "8000:8000"
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret

3. CI/CD 流水线

# GitLab CI
test:
  image: python:3.11
  script:
    - pip install -r requirements.txt
    - pytest

4. 开发环境标准化

# 所有开发者使用相同环境
docker-compose up -d

安装 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 Desktop
# 下载:https://www.docker.com/products/docker-desktop
# 需要 WSL2 支持
wsl --install

配置 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 ls

# bridge - 默认桥接网络
# host - 使用宿主机网络
# none - 无网络

创建自定义网络

# 创建桥接网络
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 编写和镜像优化。