Docker入门指南

122 阅读5分钟

本文翻译自我的英文博客,最新修订内容可随时参考:​​Docker入门指南​

Docker 是日常开发中非常实用的工具,和 ​​Git​​ 一样,你可以在 30 分钟内快速掌握它的核心概念和用法。

一、为什么需要 Docker?

传统软件开发测试完成后,输出的是程序或可执行文件(如 Java 字节码)。为了让程序顺利运行,开发团队需要准备完整的部署文件和运行环境,这给运维部署带来了诸多麻烦。而 Docker 的出现,使得我们可以将应用运行所需的系统环境(除操作系统内核外)自底向上地打包成镜像(Image),彻底解决了环境配置的一致性问题。

二、Docker 核心概念

Docker 是一个容器运行时载体和管理引擎,基于 Go 语言开发的开源项目,目标是实现“Build, Ship and Run Any App, Anywhere”,解决软件容器化的环境配置难题。

1. 镜像(Image)

  • 定义:只读模板,用于创建容器,类似面向对象中的“类”。
  • 特点:多层只读文件系统叠加而成,支持版本化管理(如 ​​ubuntu:22.04​​ 表示特定版本的 Ubuntu 镜像)。

2. 容器(Container)

  • 定义:基于镜像创建的运行实例,可看作轻量级的 Linux 环境,包含独立的进程空间、网络空间和文件系统。
  • 特点:共享宿主机内核,启动速度毫秒级,资源占用远低于传统虚拟机。

3. 仓库(Repository)

  • 定义:集中存储镜像的服务,类似 Maven 仓库或 GitHub 代码仓库。
  • 分类
  • 公共仓库:如官方的 ​​Docker Hub​​,提供海量基础镜像。
  • 私有仓库:企业内部使用的镜像存储服务(如 Harbor),保障镜像安全。

三、Docker 工作流程

Docker 采用 C/S(客户端/服务器)架构,核心组件包括:

  1. Docker 客户端(Docker Client) :用户通过命令行或图形界面(如 Docker Desktop)发送操作指令(如拉取镜像、启动容器)。
  2. Docker 守护进程(Docker Daemon) :运行在宿主机后台,接收客户端请求,负责镜像构建、容器管理等底层操作。
  3. Docker 引擎(Docker Engine) :执行具体任务(如创建容器、网络配置),通过驱动模块与操作系统交互。
  4. 镜像仓库(Docker Registry) :存储和管理镜像,支持从公共仓库(Docker Hub)或私有仓库拉取/推送镜像。

工作流程示意图

四、Docker 技术底层原理

1. Linux 基础概念

  • bootfs(引导文件系统) :包含内核和引导加载程序(如 GRUB),系统启动后会卸载,释放内存。
  • rootfs(根文件系统) :包含操作系统的根目录(如 ​​/bin​​、​​/etc​​),启动时以只读模式挂载,启动后转为读写模式。
  • UnionFS(联合文件系统)
  • 将多个文件系统分支透明叠加,形成单一文件系统(如镜像的多层只读层 + 容器的可写层)。
  • 采用 写时复制(Copy-on-Write) :修改只读层文件时,会先复制到可写层再修改,避免直接修改底层镜像。

2. 镜像分层机制

  • 每个镜像由多层只读文件系统组成,例如 ​​FROM ubuntu​​ 会加载 Ubuntu 基础镜像的多层文件。
  • Dockerfile 最佳实践
# 合并多条 RUN 命令减少层数  
RUN apt-get update && apt-get install -y \  
    python3 \  
    python3-pip && \  
    rm -rf /var/lib/apt/lists/*  # 清理缓存减小镜像体积
  • 最大层数限制:UnionFS 最多支持 127 层,需避免冗余操作。

五、Docker vs 传统虚拟机

维度传统虚拟机(VM)Docker 容器
虚拟化层次硬件级虚拟化(模拟完整硬件)内核级虚拟化(共享宿主机内核)
启动速度分钟级毫秒级
资源占用数十 GB(含操作系统)数十 MB(仅应用和依赖)
隔离性操作系统级隔离进程级隔离(通过 Namespace/Cgroups)
典型场景多操作系统共存(如开发测试环境)单应用容器化(如微服务部署)

六、Docker 安装与配置

1. 安装前提

  • 系统要求:仅支持 Linux 内核(Windows/macOS 需通过 Docker Desktop 运行虚拟机)。
  • 验证命令
docker run hello-world  # 首次运行会自动拉取测试镜像并验证安装

2. 权限配置(Linux)

将当前用户加入 ​​docker​​ 组,避免每次命令使用 ​​sudo​​:

sudo usermod -aG docker $USER  
newgrp docker  # 重新加载用户组权限

3. 镜像加速(国内用户)

使用阿里云镜像加速器提升拉取速度:

  1. 创建配置文件:
mkdir -p /etc/docker  
vim /etc/docker/daemon.json
  1. 添加镜像地址(替换 ​​your-aliyun-id​​ 为阿里云账号 ID):
{  
  "registry-mirrors": ["https://your-aliyun-id.mirror.aliyuncs.com"]  
}
  1. 重启 Docker 服务:
sudo systemctl daemon-reload  
sudo systemctl restart docker

七、快速上手命令

操作场景命令示例说明
拉取镜像​docker pull ubuntu:22.04​从 Docker Hub 拉取 Ubuntu 镜像
启动容器​docker run -it --name my-ubuntu ubuntu:22.04​以交互模式启动容器
查看运行中容器​docker ps​列出所有运行中容器
停止容器​docker stop my-ubuntu​停止指定容器
构建自定义镜像​docker build -t my-app .​根据当前目录的 Dockerfile 构建
推送镜像到仓库​docker push my-app:v1​推送镜像到 Docker Hub 或私有仓库

更多命令参考:​​Docker 命令速查表​

总结

Docker 通过镜像分层、内核级虚拟化和容器隔离,解决了传统部署中的环境一致性难题,显著提升了开发、测试和部署效率。掌握 Docker 的核心概念(镜像、容器、仓库)和常用命令,即可快速开启容器化之旅。如需深入学习 Docker Compose、Kubernetes 等进阶内容,欢迎访问博客获取最新资源。