第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 世界的基石。
-
镜像 (Image)
- 是什么:Docker 镜像是一个只读的模板,它包含了创建容器所需的一切指令。你可以把它想象成一个软件的“安装包”,或者更贴切地说,是创建“代码集装箱”的**“模具”或“图纸”**。
- 特点:镜像是分层的,每一层都是一组文件和目录的变更。这种设计使得镜像的复用、共享和存储变得非常高效。
-
容器 (Container)
- 是什么:容器是由镜像创建出来的、正在运行的实例。如果镜像是图纸,那容器就是根据这张图纸建造出来的、可以住人(运行应用)的“房子”。
- 特点:容器是可读可写的,你可以在容器内部进行操作。你可以从同一个镜像创建出任意多个相互隔离的容器。
-
仓库 (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 为例):
-
系统要求:确保你的 Windows 10/11 开启了 WSL 2 (Windows Subsystem for Linux 2) 功能。Docker Desktop 依赖它来运行。通常在安装过程中,如果没开启,它会引导你开启。
-
下载安装包:点击下载按钮,获取
.exe安装文件。 -
双击运行:像安装普通软件一样双击运行。保持默认配置,一路点击“Ok”或“Next”即可。
-
重启电脑:安装完成后,通常需要重启一次电脑来使所有配置生效。
-
验证安装:重启后,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 在背后为你做了这样几件事:
- 检查本地:Docker 引擎首先会检查你的电脑上有没有一个叫做
hello-world的镜像。 - 拉取镜像:发现本地没有,它就会自动去默认的 Docker Hub 仓库中查找并下载 (pull) 这个镜像。
- 创建容器:下载完成后,Docker 会以这个镜像为模板,创建并启动 (run) 一个新的容器。
- 执行命令:
hello-world镜像被设计为启动后在容器内执行一个程序,这个程序会打印出一段欢迎信息。 - 终止容器:信息打印完毕后,容器内的程序执行结束,这个容器也就自动停止了。
你应该会看到类似下面的输出:
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)添加到系统环境变量中。
- 原因:安装后,Docker 的路径没有被正确添加到系统的环境变量
- 问题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即可。
-
- 问题1:提示需要开启 WSL 2 或 Hyper-V?
现在,你已经有了一个可以工作的 Docker 环境。在下一章,我们将学习如何为自己的应用程序制作专属的 Docker 镜像。