当前位置: 首页 > news >正文

云原生核心技术 (2/12): Docker 入门指南——什么是容器?为什么它比虚拟机更香?

摘要

本文是云原生核心技术系列的第二篇,旨在为初学者铺平通往容器世界的大道。我们将深入浅出地剖析 Docker 的三大核心概念:镜像 (Image)、容器 (Container) 和仓库 (Repository)。通过生动的比喻和架构对比,你将清晰地理解为什么容器技术相比传统虚拟机(VM)更轻量、更高效。最后,我们会手把手指导你在不同操作系统上完成 Docker 的安装,并通过运行经典的 hello-world 来验证你的第一个容器环境,为你后续的实战之旅打下坚实基础。


引言:从理想到现实的第一步

在上一篇文章中,我们描绘了云原生的宏伟蓝图,理解了它为何是软件开发的未来趋势。而要将这个蓝图变为现实,我们必须掌握其最核心的基石技术——容器化。今天,我们将聚焦于容器技术的代名词:Docker

你可能听过 Docker,但它究竟是什么?它和我们熟悉的虚拟机有什么本质区别?为什么大家都说它“更香”?

别急,这篇文章将为你一一解答。我们将从 Docker 的核心概念入手,为你揭开它的神秘面纱,并带领你完成环境搭建,迈出云原生实践的第一步!


一、Docker 核心三剑客:镜像、容器、仓库

要理解 Docker,首先要搞懂它的三个基本组成部分。我们可以用一个非常贴切的比喻来理解它们:做披萨

  1. 镜像 (Image) - “披萨的配方和面团”

    • 定义: Docker 镜像是一个只读的模板,它包含了运行一个应用所需的一切:代码、运行时库、环境变量和配置文件。
    • 比喻: 镜像就像一个制作披萨的“完美配方”,上面详细记录了需要哪些面粉(基础系统)、蔬菜(依赖库)、肉类(应用代码),以及烤箱的温度和时间(启动命令)。它是一个静态的、不会被改变的模板。
  2. 容器 (Container) - “烤箱里正在烘焙的披萨”

    • 定义: 容器是镜像的一个运行实例。镜像是静态的,而容器是动态的。我们可以从同一个镜像创建出任意多个相互隔离的容器。
    • 比喻: 如果说镜像是配方,那么容器就是根据这个配方,在烤箱里真正运行、烘焙的那个热气腾腾的披萨。你可以用同一个配方(镜像),同时烤出好几个一模一样的披萨(容器),它们之间互不影响。
  3. 仓库 (Repository) - “披萨连锁店的中央厨房”

    • 定义: 仓库是集中存放和分发镜像的地方。
    • 比喻: 仓库就像一个巨大的“披萨配方”存储中心。最著名的公共仓库是 Docker Hub,它像一个全球性的应用商店,你可以在上面找到几乎所有常用软件的官方镜像(如 Nginx, Redis, MySQL)。当然,你也可以搭建自己的私有仓库,存放公司的项目镜像。

三者关系总结: 我们从仓库 (Repository) 下载一个镜像 (Image),然后以这个镜像为模板,运行一个(或多个)容器 (Container)


二、Docker vs. 虚拟机 (VM):一场轻与重的对决

很多人会问:“容器听起来和虚拟机好像,都是隔离环境,它们到底有什么区别?”

区别巨大!一张图就能看懂:

虚拟机 (VM):

  • 架构: 在物理服务器的操作系统之上,安装一个Hypervisor(虚拟化管理程序),然后在其上创建多个虚拟机。每个虚拟机都包含一个完整的、独立的客户机操作系统 (Guest OS)
  • 缺点: 因为每个 VM 都自带一个操作系统,所以它非常“重”。一个典型的 VM 镜像大小可能是几十 GB,启动需要数分钟。

Docker 容器:

  • 架构: 在物理服务器的操作系统之上,安装一个Docker 引擎所有容器共享宿主机的操作系统内核,容器内部只打包应用运行所需的库和二进制文件。
  • 优点: 因为不包含独立的操作系统,所以它极其“轻”。一个 Docker 镜像大小通常只有几十 MB 到几百 MB,启动是秒级的!

简单总结: 虚拟机是硬件级别的隔离,模拟了一整台电脑;而 Docker 是进程级别的隔离,更加轻量和高效。这就像住酒店,虚拟机是给你分了一栋独立别墅(配套齐全但笨重),而 Docker 是给了你一个精装单间(共享酒店设施但拎包入住)。


三、Docker 的工作原理:两大幕后英雄

Docker 如此神奇,它到底是如何实现隔离的呢?这主要归功于 Linux 内核的两个核心技术:

  1. 命名空间 (Namespaces):实现“隔离”

    • 它像给每个容器带上了一副“VR眼镜”。当一个容器启动时,Linux 内核会为它创建一个独立的命名空间。在这个空间里,容器会以为自己拥有独立的进程树(看不到宿主机的其他进程)、网络栈(有自己的IP地址)、挂载点等。它感觉自己就是一台独立的计算机,从而实现了环境的隔离。
  2. 控制组 (Cgroups):实现“限制”

    • 如果说命名空间是“看不见别人”,那么控制组就是“管好自己”。Cgroups 负责限制和审计一个进程组(也就是一个容器)可以使用的资源,比如 CPU 的使用率、内存的上限、磁盘 I/O 的速度等。这确保了单个容器不会因为资源滥用而拖垮整个宿主机。

一句话总结: Namespaces 负责让容器感觉自己是独立的,Cgroups 负责限制这个容器能用多少资源。


四、实践环节:安装你的 Docker 环境

理论讲完了,让我们动手吧!

1. Windows / macOS 用户

对于桌面用户,最简单的方式是安装 Docker Desktop。它是一个集成了 Docker 引擎、Kubernetes 和图形化管理界面的强大工具。

  • 下载地址: https://www.docker.com/products/docker-desktop/
  • 安装要求:
    • Windows: 建议使用 Windows 10/11 Pro 或更高版本,并启用 WSL 2 (Windows Subsystem for Linux 2) 功能。安装程序会自动引导你完成。
    • macOS: 支持较新的 macOS 版本即可。
  • 安装步骤: 下载安装包,双击运行,像安装普通软件一样按提示操作即可。安装完成后,启动 Docker Desktop。
2. Linux 用户 (以 Ubuntu 为例)

对于 Linux 服务器,我们通常安装 Docker Engine

# 1. 卸载旧版本(如果有)
sudo apt-get remove docker docker-engine docker.io containerd runc# 2. 设置 Docker 的 APT 仓库
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg# 3. 添加 Docker 的官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg# 4. 设置仓库
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 5. 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 6. (可选但推荐) 将当前用户添加到 docker 组,避免每次都用 sudo
sudo usermod -aG docker $USER
# 注意:执行此命令后,你需要退出当前终端会话并重新登录才能生效!

五、验证安装:运行你的第一个容器!

无论你使用哪种系统,安装完成后,打开你的终端(Windows 用户可以使用 PowerShell 或 CMD),让我们来验证一下。

第一步:检查 Docker 版本
输入以下命令,如果能看到版本信息,说明 Docker 已成功安装并运行。

docker --version

输出可能类似:Docker version 24.0.5, build ...

第二步:运行 hello-world 容器
这是 Docker 官方提供的一个教学镜像,让我们运行它!

docker run hello-world

当你敲下回车后,会看到类似下面的输出:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
...
Digest: sha256:...
Status: Downloaded newer image for hello-world:latestHello from Docker!
This message shows that your installation appears to be working correctly.
...

发生了什么?
这个简单的命令背后,Docker 帮你做了很多事:

  1. Docker 客户端连接到 Docker 守护进程。
  2. 守护进程在本地查找名为 hello-world 的镜像,发现没有。
  3. 守护进程去公共仓库 Docker Hub 拉取 (pull) 这个镜像。
  4. 下载完成后,守护进程以这个镜像为模板,创建了一个新的容器
  5. 容器启动,执行了镜像中预设的程序,打印出 “Hello from Docker!” 这段信息。
  6. 程序执行完毕,容器自动停止。

总结与预告

恭喜你!你已经成功搭建了 Docker 环境,并亲手运行了你的第一个容器。

今天,我们重点掌握了:

  • Docker 的三大核心组件:镜像(模板)、容器(实例)、仓库(商店)。
  • Docker 相比虚拟机的核心优势:轻量、快速
  • Docker 的安装与基础验证。

现在,你已经不再是 Docker 的门外汉了。但是,运行别人做好的镜像只是第一步,真正的乐趣在于创造属于我们自己的东西。

下一篇预告:【云原生核心技术 (3/12): Docker 实战入门——亲手构建并运行你的第一个 Web 应用容器】

我们将带你把一个简单的 Web 应用,打包成一个属于你自己的 Docker 镜像,并让它在容器中欢快地运行起来。真正的实战即将开始,敬请期待!

相关文章:

  • Docker监控服务部署
  • 【LeetCode】二叉树相关算法题
  • LeetCode--27.移除元素
  • 睡岗检测算法AI智能分析网关V4全场景智能守护,筑牢安全效率防线
  • UE5 学习系列(三)创建和移动物体
  • 【QT】自动更新库QSimpleUpdater使用实例封装
  • 在微服务架构中,怎么搭建Maven私服
  • eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
  • 力扣HOT100之堆:215. 数组中的第K个最大元素
  • docker 安装 milvus standalone 版本 + attu
  • spark数据处理练习题番外篇【下】
  • 空间注意力机制
  • 如何判断一个bug,是前端还是后端的?
  • 积累-Vue.js 开发实用指南:ElementUI 与核心技巧
  • 【动作】动作标签分类的三大模块
  • 如何在看板中体现优先级变化
  • 【沉浸式求职学习day53】【Spring】
  • 3.3.1_1 检错编码(奇偶校验码)
  • 智能呼入系统助力酒店客服服务
  • 立足数字人文,深化历史叙事|科学智能赋能人文社科领域研究
  • wordpress产品图片太大/武汉seo招聘信息
  • 做网站一定要域名嘛/重庆seo代理计费
  • 大厂做网站/谷歌google play下载
  • 营销企业有哪些/百度seo公司电话
  • 宜昌哪里有专业做网站的/泸州网站优化推广
  • 如何做企业网站步骤/网上推广怎么收费