<返回目录     Powered by claud/xia兄

第1课: Docker基础入门

深入理解容器技术原理,掌握Docker核心概念

什么是Docker?

Docker是一个开源的容器化平台,它彻底改变了应用程序的开发、交付和运行方式。要真正理解Docker,我们需要从它的核心价值开始。

Docker的历史背景

Docker最初由dotCloud公司于2013年发布,它基于Linux容器(LXC)技术,但提供了更简单、更标准化的接口。Docker的成功在于它解决了"在我的机器上可以运行"这一经典问题。

容器技术的核心价值

容器 vs 虚拟机:深入对比

理解容器和虚拟机的区别是掌握Docker的关键。让我们通过技术架构来深入分析:

特性 虚拟机 (Virtual Machine) 容器 (Container)
技术架构 硬件虚拟化,通过Hypervisor模拟完整硬件 操作系统级虚拟化,共享主机内核
启动时间 分钟级(需要启动完整操作系统) 秒级(直接运行在主机内核上)
资源占用 GB级别(每个VM包含完整OS) MB级别(共享主机内核)
性能损耗 较高(硬件虚拟化开销) 极低(接近原生性能)
隔离级别 完全隔离(硬件级别) 进程级别隔离
部署密度 较低(资源消耗大) 较高(资源消耗小)
适用场景 需要完全隔离的不同操作系统环境 微服务、CI/CD、云原生应用
技术原理说明:

虚拟机通过Hypervisor在物理硬件上创建虚拟的硬件环境,每个虚拟机运行完整的操作系统。而容器直接运行在主机操作系统上,通过Linux内核的命名空间(Namespaces)和控制组(Cgroups)实现隔离。

Docker核心概念深度解析

镜像(Image)

定义:镜像是只读的模板,包含运行应用程序所需的所有内容:代码、运行时、库、环境变量和配置文件。

技术原理:镜像采用分层存储(Union File System),每一层都是只读的。这种设计使得镜像可以复用和共享,大大节省存储空间。

关键特性:

容器(Container)

定义:容器是镜像的运行实例,可以启动、停止、移动和删除。

技术原理:容器通过Linux内核的命名空间实现隔离:

仓库(Registry)

定义:仓库是存储和分发Docker镜像的服务。

主要类型:

镜像命名规范: [仓库地址]/[用户名]/[镜像名]:[标签]

Docker架构深度解析

理解Docker的架构对于掌握其工作原理至关重要。Docker采用客户端-服务器架构,主要包含以下核心组件:

Docker架构示意图:

Docker ClientDocker DaemonContainerdContainer

Docker Registry (镜像仓库)

核心组件详解

Docker Client(客户端)

功能:用户与Docker交互的主要接口,通过命令行工具(CLI)发送指令。

通信方式:通过REST API与Docker Daemon通信,支持本地和远程连接。

常用命令: docker run, docker build, docker pull, docker ps 等。

Docker Daemon(守护进程)

功能:Docker的核心引擎,负责管理镜像、容器、网络和存储卷。

工作流程:

  1. 接收来自客户端的请求
  2. 管理镜像的构建、拉取和存储
  3. 创建和运行容器
  4. 管理容器生命周期
  5. 与底层容器运行时(containerd)交互

Containerd(容器运行时)

功能:负责容器的实际运行,是行业标准的容器运行时。

技术栈:Docker Daemon → Containerd → runc(实际创建容器的工具)

优势:模块化设计,符合OCI(开放容器倡议)标准。

注意:在Docker Desktop(macOS/Windows)中,Docker运行在虚拟机中,因为需要Linux内核来运行容器。

安装Docker:详细步骤

根据你的操作系统选择合适的安装方式:

Linux系统安装(以Ubuntu为例)

系统要求:
# 1. 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

# 2. 添加Docker的官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 3. 设置稳定的仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 5. 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 6. 将当前用户添加到docker组(避免每次使用sudo)
sudo usermod -aG docker $USER
# 重新登录或执行以下命令使组更改生效
newgrp docker

macOS系统安装

macOS用户推荐使用Docker Desktop,它提供了完整的Docker环境:

# 方法1:使用Homebrew安装(推荐)
brew install --cask docker

# 方法2:从官网下载安装包
# 访问 https://www.docker.com/products/docker-desktop 下载
Docker Desktop for Mac特点:

Windows系统安装

Windows用户需要满足以下条件:

# 启用WSL 2功能(以管理员身份运行PowerShell)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 重启计算机后,设置WSL 2为默认版本
wsl --set-default-version 2

# 下载并安装Docker Desktop for Windows
# 访问 https://www.docker.com/products/docker-desktop

验证安装和基本操作

安装完成后,通过以下命令验证Docker是否正常工作:

# 检查Docker版本
docker --version
# 输出示例:Docker version 20.10.17, build 100c701

# 查看详细的系统信息
docker info
# 显示容器数量、镜像数量、存储驱动等信息

# 运行经典的hello-world容器
docker run hello-world
# 如果看到欢迎信息,说明安装成功
第一次运行docker run时会发生什么?
  1. Docker客户端发送运行容器的请求到守护进程
  2. 守护进程检查本地是否有hello-world镜像
  3. 如果没有,从Docker Hub拉取镜像
  4. 创建新的容器并执行其中的程序
  5. 输出欢迎信息后容器自动退出

实践练习:巩固学习成果

通过以下练习来巩固本课所学知识,建议按顺序完成:

基础练习

  1. 安装Docker:根据你的操作系统选择合适的安装方式
  2. 验证安装:运行 docker --versiondocker info
  3. 运行第一个容器:执行 docker run hello-world 并观察输出
  4. 探索系统信息:仔细阅读 docker info 的输出,理解各项指标含义

进阶练习

  1. 理解容器生命周期:运行 docker run -it ubuntu:20.04 bash,在容器内执行一些命令,然后退出
  2. 查看运行状态:使用 docker ps -a 查看所有容器状态
  3. 清理容器:使用 docker rm 删除已退出的容器
  4. 镜像管理:使用 docker images 查看本地镜像列表

故障排除指南

常见问题及解决方案:

学习检查清单

完成本课后,你应该能够:

学习建议:

在学习过程中,建议你: