Docker
本文最后更新于 2025年11月3日 上午
学习:
概念
Docker 是一个开源的容器化平台,它允许开发者将应用及其所有依赖(库、配置文件、环境变量等)打包成一个标准化、轻量级、可移植的容器。这个容器可以在任何支持 Docker 的环境中一致地运行。要理解 Docker,必须先理解它的三个核心概念。
镜像
- 是什么:一个只读的模板或“安装包”,包含了运行应用所需的文件系统结构和内容。
- 比喻:像是面向对象编程中的“类”或是安装操作系统用的 ISO 文件。定义了容器运行时的样子。
- 特点:分层存储,每一层都是只读的。
容器
- 是什么:镜像的一个运行实例。它包含了运行的应用程序及其隔离的运行时环境。
- 比喻:像是“类”(镜像)实例化出来的“对象”,或是用 ISO 文件安装好并正在运行的操作系统。
- 特点:容器是可写的,在镜像的只读层之上,有一个专属于该容器的可写层。
仓库
- 是什么:一个集中存储和分发 Docker 镜像的地方,最著名的是 Docker Hub。
- 比喻:像是 GitHub(放代码)或 App Store(放应用),只不过这里存放的是 Docker 镜像。
- 用法:你可以 docker pull 从仓库拉取镜像,也可以 docker push 将自己的镜像推送到仓库。
关系
镜像 –(实例化)–> 容器 | 仓库 <–(上传/下载)–> 镜像
对比
特性
理解 Docker 与传统虚拟机的本质区别,是理解 Docker 为什么“轻量”的关键:
| 特性 | 传统虚拟机 | Docker 容器 |
|---|---|---|
| 虚拟层次 | 硬件级虚拟化 | 操作系统级虚拟化 |
| 包含内容 | 应用 + 依赖库 + 完整操作系统 | 应用 + 依赖库 + 必要进程 |
| 体积 | 非常庞大(通常 GB 级别) | 非常轻量(通常 MB 级别) |
| 启动速度 | 慢(分钟级) | 快(秒级甚至毫秒级) |
| 性能 | 有损耗,需要通过 Hypervisor | 接近原生 |
| 隔离性 | 强(完全隔离) | 弱(内核共享,通过 Namespace/Cgroup 隔离) |
架构
传统虚拟机架构:
1 | |
Docker 容器架构:
1 | |
核心区别:Docker 容器共享宿主机的操作系统内核,而不是每个容器自带一个完整的操作系统。这使得它极其高效。
工作流
假设要用 Docker 运行一个 Nginx 网站。
步骤 1:获取镜像
从 Docker Hub 拉取官方的 Nginx 镜像。
1 | |
步骤 2:运行容器
基于镜像启动一个容器。
1 | |
现在访问 http://localhost 就能看到 Nginx 的欢迎页面。
步骤 3:管理容器
查看运行中的容器:
1 | |
停止容器:
1 | |
启动已停止的容器:
1 | |
进入容器内部(就像 SSH 到一台服务器):
1 | |
步骤 4:构建自定义镜像
假设你的网站文件在 ./html 目录下,创建一个 Dockerfile 文件:
1 | |
构建镜像:
1 | |
运行自己的网站:
1 | |
应用场景
环境标准化与一致性
- 开发者的噩梦:“在我电脑上是好的啊”
- 解决方案:通过 Dockerfile 定义环境,保证从开发、测试到生产,应用运行的环境完全一致
快速部署与扩展
- 容器秒级启动,非常适合弹性伸缩和微服务架构
- 在 Kubernetes 等编排系统中,可以轻松管理成千上万个容器
资源隔离与高效利用
- 一台物理机可以运行数百个容器,而虚拟机可能只能运行几十个
- 为每个应用提供独立的文件系统、网络、进程空间
DevOps 与 CI/CD
- 在持续集成/持续部署流程中,Docker 镜像是标准的交付物
- 构建一次,到处运行
命令
| 组件/命令 | 作用 |
|---|---|
docker run |
从镜像创建并启动一个新容器 |
docker build |
根据 Dockerfile 构建镜像 |
docker pull/push |
拉取/推送镜像到仓库 |
docker ps |
列出容器 |
docker exec |
在运行中的容器内执行命令 |
docker stop/start |
停止/启动容器 |
docker-compose |
用于定义和运行多容器应用的工具 |
| Dockerfile | 构建镜像的脚本文件 |
| Docker Hub | 公共镜像仓库 |
总结
Docker 本质是一个应用打包、分发和运行的标准化工具。它通过容器技术将应用与其运行环境解耦,从而实现了“一次构建,到处运行”的梦想,极大地提升了软件交付的效率和可靠性。
Docker
https://xuekeven.github.io/2025/11/03/Docker/