源本科技 | 码上会

什么是 Docker

2025/12/24
112
0

Build once, run anywhere.

课程目标

通过本课,你将掌握:

  1. Docker 的基本定义与核心价值

  2. Docker 与传统虚拟机(VM)的本质区别

  3. Docker 的关键组件及其作用

  4. 镜像(Image)与容器(Container)的关系

  5. 常用 Docker 命令及实际应用场景


Docker 是什么

Docker 是一个操作系统级虚拟化(容器化)

  • 使用 Go 语言 编写

  • 支持 Windows、macOS 和 Linux(Docker Engine 原生运行于 Linux)

  • 解决经典难题:“在我机器上能跑!”

  • 与 VMware 等硬件级虚拟化不同,Docker 在 OS 层面实现隔离

传统部署的痛点

  • 依赖冲突(如 Python 版本、库版本)

  • 配置不一致(开发 vs 生产环境)

  • 操作系统差异导致部署失败

  • “能在我电脑跑,但上线就崩”

Docker 的解决方案

应用程序 + 所有依赖 + 配置 打包进一个标准化单元——容器

优势

说明

可移植性

本地、云、物理服务器均可运行

一致性

开发、测试、生产行为完全一致

轻量高效

共享宿主机内核,无需完整 OS

快速启动

容器秒级启动,资源占用低

微服务友好

天然适配 Kubernetes、Docker Swarm 等编排工具


Docker 核心组件

组件

说明

Docker Engine

核心运行时,负责构建和管理容器

Docker Image

只读模板,包含应用代码与依赖

Docker Container

镜像的运行实例,动态、可执行

Dockerfile

定义如何构建镜像的文本指令文件

Docker Hub

官方公共镜像仓库(类似 GitHub for 容器)

Docker Registry

镜像存储与分发系统(支持公有 / 私有)


深入理解关键概念

Docker 引擎

采用 客户端 - 服务器架构

  • Docker Daemon (dockerd):后台服务,管理镜像、容器、网络、卷

  • Docker CLI:用户通过 docker 命令与 Daemon 交互

  • REST API:CLI 与 Daemon 通信的桥梁(通过 Unix socket 或 TCP)

没有 Docker Engine,就无法构建镜像或运行容器。


Dockerfile

  • 使用 DSL(领域特定语言)编写

  • 指令按从上到下顺序执行

  • 示例:

    FROM python:3.11
    COPY . /app
    RUN pip install -r /app/requirements.txt
    CMD ["python", "/app/app.py"]
  • 构建命令:docker build -t my-app .


镜像 vs 容器

镜像(Image)

容器(Container)

状态

静态、只读

动态、可运行

类比

蓝图 / 类

实例 / 对象

关系

容器由镜像创建

镜像运行后成为容器

nginx 镜像 → docker run nginx → 启动一个运行 Nginx 服务的容器


Docker Hub

  • 官方公共镜像仓库

  • 可拉取(pull)公共镜像(如 redis, mysql, ubuntu

  • 可推送(push)自己的镜像(设为公开或私有)

  • DevOps 团队常用作镜像分发中心

地址:https://hub.docker.com


Docker 架构图解

+------------------+
|   Docker CLI     | ← 用户输入 docker run/build 等命令
+--------+---------+
         |
         | (REST API via Unix socket / TCP)
         v
+--------+---------+
| Docker Daemon    | ← 管理镜像、容器、网络、存储卷
| (dockerd)        |
+--------+---------+
         |
         v
+--------+---------+
| Host OS Kernel   | ← 所有容器共享此 Linux 内核
+------------------+

注意:Docker Engine 原生仅支持 Linux。Windows/macOS 上通过 WSL2 或轻量 VM 模拟 Linux 环境。


常用命令速查表

命令

作用

docker run <image>

从镜像启动容器

docker pull <image>

从仓库下载镜像

docker build -t name .

构建镜像

docker ps

查看运行中的容器

docker ps -a

查看所有容器(含已停止)

docker stop/start <container>

停止 / 启动容器

docker rm/rmi

删除容器 / 镜像

docker logs <container>

查看容器日志

docker login

登录镜像仓库(如 Docker Hub)


Docker 版本对比

版本

特点

适用人群

Community Edition (CE)

免费、开源、社区维护

个人开发者、学生、初创团队

Enterprise Edition (EE)

付费、企业级安全、认证支持

大型企业、金融、政府等

绝大多数学习和开发场景使用 Docker CE 即可。


重点总结

  • Docker 通过容器化实现环境一致性,彻底解决“在我机器上能跑”问题。

  • 容器轻量、快速、可移植,共享宿主机内核,不运行完整操作系统。

  • 镜像是静态蓝图,容器是动态实例

  • 核心组件包括:Engine、Image、Container、Dockerfile、Hub、Registry。

  • 掌握基础命令是使用 Docker 的第一步,动手实践才是掌握关键。


思考题

  1. 为什么 Docker 容器比虚拟机更节省资源?它依赖哪些 Linux 内核机制(如 cgroups、namespaces)?

  2. 如果两个容器都基于相同的 Ubuntu 镜像,它们是否会各自占用完整的 Ubuntu 系统磁盘空间?为什么?

  3. 在没有互联网的环境中,如何将本地构建的 Docker 镜像迁移到另一台服务器?