容器化技术是一种轻量级的操作系统虚拟化方法,它允许你在一个隔离的环境中打包和运行应用程序及其所有依赖项(Web应用、数据库、消息队列)。这个隔离环境被称为容器。
容器化技术与虚拟机
虚拟机:在你的物理机上,通过一个叫 Hypervisor 的虚拟化管理软件,模拟出 CPU、内存、硬盘等硬件,然后在这些虚拟硬件上安装一个完整的客户操作系统
容器化技术:不需要模拟任何硬件,也不需要安装独立的操作系统。它直接共享宿主机的操作系统内核,仅仅在进程级别通过 Linux 的Namespace(命名空间)和Cgroups(控制组)技术实现了隔离。
- 容器里只包含你的代码、Python 解释器和必要的第三方库。它认为自己在一个独立的系统里,但实际上它只是宿主机上的一个受保护的"特殊进程"
也就是说,容器是在操作系统之上完成环境隔离,每个容器拥有自己的工具和库但是同一台主机的容器共享操作系统内核。
| 特性 | 容器化技术 | 传统虚拟化技术 |
|---|---|---|
| 共享内核 | 所有容器共享宿主机操作系统内核 | 每个虚拟机都有独立的操作系统内核 |
| 启动速度 | 毫秒级到秒级(如同启动一个进程) | 分钟级(如同启动一台电脑) |
| 资源占用 | 非常小,只有程序及其依赖(MB级) | 很大,包含整个操作系统(GB级) |
| 性能损耗 | 接近原生性能,损耗极小 | 有相当的性能损耗(Hypervisor和Guest OS) |
| 隔离级别 | 进程级别隔离(安全性较低) | 硬件级别隔离(安全性较高) |
主流容器化工具:
-
Docker:目前最流行、最核心的容器化平台。它极大地简化了容器的创建、打包、分发和运行过程,是事实上的行业标准。
-
Podman:一个与Docker命令兼容但无守护进程的替代方案,安全性更高。
-
containerd:一个更底层的工业级容器运行时,Docker和Kubernetes都在底层使用它。
Docker核心组件:
-
Dockerfile:一个纯文本文件,里面写好了制作容器环境的一系列步骤和指令(比如基于什么系统、安装什么软件、复制什么代码)。
-
Image(镜像) :相当于 "可执行的安装包" 或 "快照" 。它是按照Dockerfile这个文档制作出来的一个只读的、静态的文件包。这个包里面已经包含了运行某个应用所需的所有内容(代码、库、环境变量等)。镜像可以分发、存储、复用。
-
Container(容器) :相当于 "运行中的进程实例" 。当你把这个"安装包"(镜像)用docker run命令启动 起来,它就在操作系统中变成了一个动态的、可读写的 运行环境,这就是容器。可以把它理解为"镜像跑起来之后的样子"。
Dockerfile 里装的是一大段指令,而image里面装的是运行所需要的文件和启动命令。
Docker工作流:
-
编写代码和依赖:开发你的应用(比如一个Python Web应用)。
-
创建Dockerfile:这是一个文本文件,像一个"配方",描述了如何构建容器镜像
-
构建镜像 (Image) :运行
docker build命令,Docker会按照Dockerfile的指令一步步执行,最终生成一个镜像。镜像是一个只读的、可移植的包,包含了运行应用所需的一切。 -
运行容器 (Container) :运行
docker run命令,Docker会基于镜像创建一个可写的容器实例,此时应用就在隔离环境中真正运行起来了。 -
分发镜像 :你可以把镜像上传到镜像仓库(如 Docker Hub),其他人或服务器可以轻松拉取这个镜像并运行出完全一致的环境。
容器编排工具K8S:
虽然单个容器很方便,但当容器数量增多(比如几十个微服务)、需要跨多台服务器运行时,手动管理就变得非常繁琐; K8S能自动管理成百上千个容器,完成自动部署、弹性伸缩、服务发现、负载均衡、自动恢复(例如某个容器挂了就重启一个)等任务
为什么需要Docker
- 环境一致性 :开发环境、测试环境、生产环境之间存在差异(比如开发电脑:Python3.9、MySQL5.7、依赖包版本 1.2;测试服务器:Python3.8、MySQL8.0、依赖包版本 2.0),这种差异使得程序在本地运行良好,但是一上线就会出现各种报错、兼容问题。
解决方案:Docker 允许你把代码和它运行所需要的整个环境(包括操作系统微核、Python 解释器、第三方库、配置文件)全部打包在一起。
-
简化环境配置 :假设你入职了一家新公司,你需要安装 MySQL 8.0、配置 Redis、安装特定版本的 Python 3.10、处理各种因为系统不兼容报的error。有了 Docker :如果你需要一个标准的 MySQL 8.0 数据库,你不再需要下载和配置,只需要在终端输入一行命令即可;不需要去各官网下载安装包,解决配环境变量、端口冲突等问题
-
每个容器独立运行,互不干扰,提高安全性
Docker安装(Windows)
在window系统中安装docker比linux系统上要麻烦很多,原因是Docker容器技术是Linux独有的,因此理论上如果你想在windows系统上安装docker需要在windows上安装一个Linux虚拟机。

WSL 2是微软给 Windows 内置了一个轻量级 Linux 内核,Docker 可以直接在 WSL 2 的 Linux 内核里原生运行
Docker 本质是 Linux 技术,Windows 没有 Linux 内核,所以必须装 WSL 2 来提供 Linux 内核,否则 Docker 根本跑不起来
首先下载docker desktop(官网下载)
https://www.docker.com/products/docker-desktop/r
如果没有梯子,可以使用国内的镜像源
安装好docker desktop过后,还需要安装WSL 2,否则docker无法使用
安装WSL 2
打开PowerShell,输入以下命令
wsl --install
-
启用所需的 WSL 和虚拟机平台可选功能。
-
下载并安装最新的 Linux 内核。
-
将 WSL 2 设置为默认版本。
-
默认下载并安装 Ubuntu 发行版。
命令行提示完成后,需要重启计算机以使更改生效
重启电脑后,系统会自动弹出一个新的 Ubuntu 命令行窗口,它会要求你设置用户名和密码。
-
Linux用户名:随意设置
-
密码:由于Linux的安全机制,输入密码时,屏幕上不会显示任何字符(相当于盲输)
安装完成后可以输入下面语句检测一下
docker --version
确保 Docker 对接 WSL2
-
点击 Docker Desktop 界面右上角的Settings/设置。
-
在左侧菜单选择 General ,确认 "Use the WSL 2 based engine" 这一项是勾选上的。
-
接着在左侧菜单切换到 Resources(资源) -> WSL integration(WSL 集成)
-
点击右下角的 **Apply & restart,**重启后说明Linux环境已经打通。