第1章:你好,Docker!—— 容器世界初探

240 阅读8分钟

第1章:你好,Docker!—— 容器世界初探

在前言中,我们聊到了“代码集装箱”的概念。现在,是时候打开第一个集装箱,亲眼看看里面的构造了。本章将为你揭开 Docker 的神秘面纱,从最核心的概念讲起,并带领你完成与 Docker 的第一次“亲密接触”。

1.1 什么是容器?(用“集装箱”的比喻讲透)

让我们再次回到那个绝妙的比喻:集装箱

在没有集装箱的时代,码头上的货物千奇百怪:一袋袋的咖啡豆、一箱箱的电子产品、一捆捆的木材... 工人们需要针对每一种货物,使用不同的工具和方法来搬运,效率低下且极易出错。

后来,集装箱诞生了。它把所有货物都打包进一个标准化的、与世隔绝的铁箱子里。从此,码头工人不再关心里面装的是什么,他们只需要操作同一种吊车,就能高效、安全地处理所有集装箱。

Docker 容器(Container) 就是软件世界的“集装箱”。

它将一个应用程序连同其运行所需的所有依赖(比如特定版本的运行时、库、配置文件等),一起打包到一个隔离的、标准化的环境中。

这个“容器”有几个神奇的特性:

  • 隔离性:容器内的世界与外部(我们称之为主机 Host)是隔离的。容器里的应用,看不到也影响不到主机上的其他进程,反之亦然。这保证了环境的纯净。
  • 一致性:这个打包好的容器,无论是在你的 Windows 电脑、同事的 Mac,还是在云端的 Linux 服务器上,其内部的运行环境都是一模一样的。这就从根本上解决了“在我电脑上明明是好的”这一世纪难题。
  • 轻量级:与后面要讲的虚拟机相比,容器非常轻巧,启动速度可以达到秒级甚至毫秒级。

1.2 容器 vs. 虚拟机:谁更胜一筹?

提到隔离环境,很多同学会立刻想到虚拟机(Virtual Machine, VM)。没错,虚拟机也能解决环境一致性的问题,但它和容器在实现原理上有着天壤之别。

  • 虚拟机:它是在一个操作系统(Host OS)之上,通过 Hypervisor 软件,再模拟一整套硬件(CPU、内存、硬盘),然后在这些虚拟硬件上安装一个完整的客户操作系统(Guest OS),最后在客户操作系统里运行你的应用。它非常“重”,因为你每开一个应用,就要背着一个完整的操作系统。

  • 容器:它更加聪明。它直接运行在主机的操作系统之上,利用操作系统本身提供的内核隔离技术(如 Linux 的 Cgroups 和 Namespaces)来创建隔离环境。所有容器共享主机的内核,它们只是在进程层面被隔离开。它非常“轻”,因为它省去了客户操作系统这个沉重的包袱。

我们可以用一张图来直观对比:

特性虚拟机 (VM)容器 (Container)
隔离级别硬件级隔离,非常彻底进程级隔离,共享主机内核
体积巨大(通常 GB 级别)轻量(通常 MB 级别)
启动速度慢(分钟级)快(秒级甚至毫秒级)
性能损耗较大(因为虚拟化了一层硬件)极小(接近原生性能)
资源占用

结论:对于绝大多数应用部署场景,容器在轻量、快速、高效方面完胜虚拟机。虚拟机更适合需要运行不同操作系统,或需要极高级别安全隔离的场景。

1.3 Docker 的“三驾马车”:镜像、容器与仓库

要真正玩转 Docker,你必须理解这三个核心概念,它们是 Docker 世界的基石。

  1. 镜像 (Image)

    • 是什么:Docker 镜像是一个只读的模板,它包含了创建容器所需的一切指令。你可以把它想象成一个软件的“安装包”,或者更贴切地说,是创建“代码集装箱”的**“模具”或“图纸”**。
    • 特点:镜像是分层的,每一层都是一组文件和目录的变更。这种设计使得镜像的复用、共享和存储变得非常高效。
  2. 容器 (Container)

    • 是什么:容器是由镜像创建出来的、正在运行的实例。如果镜像是图纸,那容器就是根据这张图纸建造出来的、可以住人(运行应用)的“房子”。
    • 特点:容器是可读可写的,你可以在容器内部进行操作。你可以从同一个镜像创建出任意多个相互隔离的容器。
  3. 仓库 (Repository)

    • 是什么:仓库是集中存放和分发镜像的地方。你可以把它理解为代码界的 GitHub,只不过它存放的是 Docker 镜像。
    • 分类:仓库分为公共仓库(如官方的 Docker Hub)和私有仓库(可以自己搭建或使用云服务商提供的)。

三者的关系可以这样概括:

你从 仓库 (Repository) 下载一张 镜像 (Image) 图纸,然后使用这张图纸,建造出一个或多个可以运行应用的 容器 (Container)

1.4 [实战] 在你的电脑上安装 Docker Desktop

理论讲了这么多,是时候动手了!我们将安装 Docker 官方提供的桌面工具——Docker Desktop。它集成了 Docker 引擎、命令行工具等所有你需要的东西,非常方便。

访问官方网站: www.docker.com/products/do…

网站会自动检测你的操作系统(Windows / Mac / Linux),并提供相应的下载链接。

安装步骤 (以 Windows 为例):

  1. 系统要求:确保你的 Windows 10/11 开启了 WSL 2 (Windows Subsystem for Linux 2) 功能。Docker Desktop 依赖它来运行。通常在安装过程中,如果没开启,它会引导你开启。

  2. 下载安装包:点击下载按钮,获取 .exe 安装文件。

  3. 双击运行:像安装普通软件一样双击运行。保持默认配置,一路点击“Ok”或“Next”即可。

  4. 重启电脑:安装完成后,通常需要重启一次电脑来使所有配置生效。

  5. 验证安装:重启后,Docker Desktop 会自动启动。打开你的命令行工具(如 PowerShell, CMD 或 Terminal),输入以下命令:

    docker --version
    

    如果能看到类似 Docker version xx.xx.xx, build 100c701 的输出,恭喜你,安装成功!

1.5 [实战] 运行你的第一个容器:docker run hello-world

激动人心的时刻到了!我们将运行 Docker 官方提供的一个入门镜像 hello-world,来体验一下完整的流程。

在你的命令行中,输入:

docker run hello-world

当你敲下回车后,Docker 在背后为你做了这样几件事:

  1. 检查本地:Docker 引擎首先会检查你的电脑上有没有一个叫做 hello-world 的镜像。
  2. 拉取镜像:发现本地没有,它就会自动去默认的 Docker Hub 仓库中查找并下载 (pull) 这个镜像。
  3. 创建容器:下载完成后,Docker 会以这个镜像为模板,创建并启动 (run) 一个新的容器
  4. 执行命令hello-world 镜像被设计为启动后在容器内执行一个程序,这个程序会打印出一段欢迎信息。
  5. 终止容器:信息打印完毕后,容器内的程序执行结束,这个容器也就自动停止了。

你应该会看到类似下面的输出:

Hello from Docker!
This message shows that your installation appears to be working correctly.

... (后面还有一些更详细的解释)

看到这段话,意味着你已经成功地走通了从“仓库”拉取“镜像”,再到运行“容器”的完整流程!

1.6 本章小结 & 避坑指南

恭喜!你已经成功迈出了容器世界的第一步。

  • 本章回顾

    • 我们理解了容器的核心价值:隔离性一致性
    • 我们对比了容器与虚拟机的区别,明确了容器轻量、高效的优势。
    • 我们掌握了 Docker 的三大核心概念:镜像(图纸)容器(房子)仓库(商店)
    • 我们动手安装了 Docker Desktop,并成功运行了第一个容器
  • 避坑指南:安装过程中的常见问题

    • 问题1:提示需要开启 WSL 2 或 Hyper-V?
      • 原因:Docker Desktop for Windows 强依赖 Windows 的虚拟化技术。
      • 解决:请根据提示,在“启用或关闭 Windows 功能”中,勾选“适用于 Linux 的 Windows 子系统”和“Hyper-V”。或者直接在管理员权限的 PowerShell 中运行 wsl --install
    • 问题2:docker 命令找不到 (command not found)?
      • 原因:安装后,Docker 的路径没有被正确添加到系统的环境变量 PATH 中。
      • 解决:尝试重启你的电脑和命令行工具。如果还不行,需要手动将 Docker 的安装路径(通常是 C:\Program Files\Docker\Docker\resources\bin)添加到系统环境变量中。
    • 问题3:拉取 hello-world 镜像速度很慢或失败?
      • 原因:Docker Hub 的服务器在国外,国内访问可能存在网络问题。

      • 解决:可以配置国内的镜像加速器。打开 Docker Desktop 的设置 (Settings) -> Docker Engine,在右侧的 JSON 编辑器中加入以下内容(以阿里云为例,你需要注册自己的账号获取专属地址):

        {
          "registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
        }
        

        或者使用其它的可用镜像比如:

        {
          "registry-mirrors": [
            "https://docker.m.daocloud.io",
            "https://dockerpull.cn",
            "https://docker.mirrors.ustc.edu.cn",
            "https://hubp.me",
            "https://docker.1panel.live",
          ]
        }
        

        点击 "Apply & Restart" 保存并重启 Docker即可。

现在,你已经有了一个可以工作的 Docker 环境。在下一章,我们将学习如何为自己的应用程序制作专属的 Docker 镜像。