Docker 详细介绍

2 阅读4分钟

Docker 是一款基于 Go 语言开发的开源容器化平台,核心是将应用及其依赖、配置打包为独立、可移植的容器,实现“一次构建,处处运行”,彻底解决跨环境运行不一致的痛点,是 DevOps、微服务、云原生的核心基础设施。

一、核心概念(铁三角)

1. 镜像(Image)

  • 定义只读模板,包含应用代码、运行时、库、环境变量、配置等所有运行所需内容。
  • 特性分层存储(UnionFS),每层只读,修改仅新增层,体积小、复用性强、构建快。
  • 类比:相当于“软件安装包/只读光盘”或“食谱”。

2. 容器(Container)

  • 定义:镜像的可运行实例,是隔离、轻量的独立运行环境。
  • 特性:共享宿主机内核,拥有独立进程、网络、文件系统;运行时加可写层,删除容器数据消失。
  • 类比:相当于“运行中的软件/虚拟机”或“按食谱做出的菜”。

3. 仓库(Repository/Registry)

  • 定义:集中存储、分发镜像的服务。
  • 分类
    • 公开:Docker Hub(最大公共仓库)、阿里云镜像库。
    • 私有:企业自建(Harbor),保障安全与合规。
  • 类比:相当于“应用商店/代码仓库”。

二、Docker 架构(C/S 模式)

采用**客户端 - 服务器(C/S)**架构,组件协同完成容器全生命周期管理:

1. Docker Client(客户端)

  • 用户交互入口(docker 命令行/API),发送 build/run/pull 等指令。

2. Docker Daemon(守护进程 dockerd)

  • 后台服务,监听 API 请求,管理镜像、容器、网络、卷。

3. Docker Registry(仓库)

  • 镜像存储分发中心(Docker Hub 等)。

4. Container Runtime(运行时)

  • 底层执行引擎,默认 containerd + runC(OCI 标准),负责容器创建、运行。

三、底层核心技术(Linux)

Docker 依托 Linux 内核三大技术实现轻量隔离与资源管控

1. Namespace(命名空间)

  • 实现资源隔离:PID(进程)、NET(网络)、MNT(文件系统)、IPC、UTS、USER,让容器似独立 OS。

2. Cgroups(控制组)

  • 限制/统计资源:CPU、内存、磁盘 I/O、带宽,防止资源争抢、保障稳定性。

3. UnionFS(联合文件系统)

  • 分层存储:镜像多层只读,容器顶加可写层,修改不影响底层,共享层、体积小、启动快。

四、Docker vs 传统虚拟机(VM)

特性Docker 容器虚拟机(VM)
底层共享宿主机 OS 内核独立 Guest OS
体积轻量(MB 级)厚重(GB 级)
启动秒级分钟级
性能接近原生有 Hypervisor 损耗
密度单机数十/百个单机数个
隔离性进程级(弱)硬件级(强)
移植性极强(跨 Linux/Windows)弱(与 Hypervisor 绑定)

五、核心优势

  1. 环境一致:开发→测试→生产完全一致,根除“在我电脑能跑”问题。
  2. 极致轻量:秒级启动、资源占用低,硬件利用率大幅提升。
  3. 跨平台移植:本地、物理机、虚拟机、各类云平台无缝运行。
  4. 高效 CI/CD:快速构建、测试、部署,适配敏捷与 DevOps 流程。
  5. 微服务支撑:服务独立容器化,独立扩缩、升级、维护,耦合度低。
  6. 版本与复用:镜像版本化,基础镜像(Nginx/MySQL)高度复用。

六、主流应用场景

  1. 开发环境标准化:团队共用镜像,一键搭建环境,无配置差异。
  2. 持续集成/持续部署(CI/CD):Jenkins/GitLab CI 流水线自动构建、测试、部署。
  3. 微服务架构:单体拆分为多容器微服务,独立迭代、弹性扩缩。
  4. 混合/多云部署:应用跨云迁移、统一管理,无厂商锁定。
  5. 快速环境复制:测试、预发、沙箱环境秒级复制、销毁。
  6. 遗留应用迁移:老旧应用容器化,平滑上云、降低改造难度。
  7. 大数据/AI:统一算法、依赖环境,跨机器可复现训练结果。

七、常用核心命令

# 镜像操作
docker pull nginx        # 拉取镜像
docker images           # 查看本地镜像
docker build -t app .   # Dockerfile 构建镜像
docker rmi nginx        # 删除镜像

# 容器操作
docker run -d -p 80:80 nginx  # 后台运行并映射端口
docker ps               # 查看运行容器
docker exec -it 容器ID bash    # 进入容器
docker stop/start 容器ID       # 停止/启动
docker rm 容器ID        # 删除容器

# 仓库
docker push 用户名/镜像名  # 推送镜像到仓库
docker login            # 登录仓库

八、Docker 生态

  • Docker Compose:单文件(YAML)定义多容器应用,一键启动/停止。
  • Docker Swarm:Docker 原生容器集群管理(轻量)。
  • Kubernetes (K8s):主流容器编排,大规模容器集群调度、高可用、弹性扩缩。
  • Harbor:企业级私有镜像仓库,安全、权限、漏洞扫描。

九、总结

Docker 以容器化重构软件交付,核心价值是标准化、一致性、轻量、可移植,打通开发 - 测试 - 部署全流程,是现代 IT 架构(微服务、云原生、DevOps)的基石。掌握 Docker 已成为研发、测试、运维的必备技能。