一、Docker 是什么
Docker是一种"容器化(Containerization)平台"。
它的核心作用:
把应用程序 + 运行环境 + 依赖库 打包到一个容器里,然后在任何机器上稳定运行。
你可以把 Docker 理解成:
VM(虚拟机)的轻量版
程序运行的"标准集装箱"
"一次打包,到处运行"
二、为什么会有 Docker
先看传统开发的问题。
1. 环境不一致问题
比如:
你开发了一个 C++ 后端程序:
本地 Ubuntu 20 能跑
测试服务器 Ubuntu 22 崩了
同事电脑缺少某个库
Python 版本不一致
OpenSSL 版本不同
于是经典问题出现:
"我电脑上是好的啊!"
Docker 就是解决:
"环境一致性"
三、Docker 的核心思想
Docker 的思想非常简单:
把程序运行所需的一切:
代码
库
配置
运行环境
系统工具
全部打包。
形成:
Container(容器)
容器启动后:
无论在哪台机器:
云服务器
公司服务器
个人电脑
测试环境
结果都一样。
四、Docker 和虚拟机区别
虚拟机:
每个 VM 都有:
自己的操作系统
内核
驱动
非常重
例如:
一个 Ubuntu VM:
几 GB
启动几十秒
Docker 容器:
共享宿主机内核
不需要完整 OS
非常轻量
特点:
MB 级别
秒级启动
可同时运行大量容器
五、Docker架构
Docker 采用客户端-服务器架构。Docker 客户端与 Docker 守护进程,负责构建、运行和 分发你的 Docker 容器。Docker 客户端和守护进程可以 运行在同一台系统上,或者你可以将 Docker 客户端连接到远程 Docker 戴蒙。Docker 客户端和守护进程通过 REST API 在 UNIX 上通信 套接字或网络接口。另一个 Docker 客户端是 Docker Compose, 这样你就能处理由一组容器组成的应用程序。
六、Docker的核心组成
| 名称 | 类比 |
|---|---|
| Image(镜像) | 安装包 |
| Container(容器) | 正在运行的软件 |
| Repository(仓库) | 应用商店 |
七、Image(镜像)
镜像:
是一个只读模板
里面包含:
程序
环境
依赖
例如:
Ubuntu 镜像
MySQL 镜像
Redis 镜像
Nginx 镜像
你可以理解:
镜像 = 类(class)
容器 = 对象(object)
查看镜像
docker images
拉取镜像
例如:
docker pull ubuntu
意思:
从 Docker Hub 下载 Ubuntu 镜像。
八、Container(容器)
容器:
是镜像运行后的实例
例如:
docker run ubuntu
会:
创建容器
启动容器
查看容器
docker ps
查看运行中的容器
docker ps -a
查看所有容器
九、Docker 的底层原理
这是核心。
Docker 本质上:
不是虚拟机
它依赖 Linux 内核特性:
1. Namespace(命名空间)
作用:
隔离
让容器觉得:
自己有独立进程
独立网络
独立文件系统
实际上:
只是 Linux 隔离机制。
2. Cgroups
作用:
资源限制
限制容器:
CPU
内存
IO
例如:
docker run -m 512m ubuntu
限制最大内存:
512MB。
3. UnionFS(联合文件系统)
Docker 镜像是:
分层的
例如:
Ubuntu层
Python层
依赖层
代码层
优点:
节省空间
复用层
增量更新