docker核心概念
1.传统应用部署的痛点与docker的解决方案
传统的应用部署中会经常遇到一下问题
- 环境不一致:应用在开发环境运行正常,但在测试或生产环境出现问题
- 依赖管理复杂:不同应用需要不同版本的运行时、库文件等
- 资源利用率低:传统虚拟机需要完整的操作系统,占用大量资源
- 部署复杂:需要手动配置环境、安装依赖,容易出错
docker恰恰解决了这些问题,使用docker可以
- 环境标准化:将应用及其依赖打包在一起,确保在任何环境中都能一致运行
- 轻量级:容器共享宿主机的操作系统内核,比虚拟机更轻量
- 快速部署:容器可以在几秒内启动,大大提高了部署效率
- 可移植性:一次构建,到处运行
docker的理念将遵循容器化不可变基础设施
- 应用和环境被打包成不可变的镜像
- 每次部署都使用相同的镜像
- 配置通过环境变量或配置文件注入
- 问题修复通过重新构建镜像而非修改运行中的容器
2.镜像
镜像是一个只读的模板,包含了运行应用所需的所有内容。简单来说就是一个压缩包,压缩包内包含了应用的所有环境(包括应用本身),解压就直接能用
镜像的特点
- 分层存储:镜像由多个层组成,每一层代表一次修改
- 只读性:镜像本身是只读的,不能直接修改
- 可复用:同一个镜像可以创建多个容器
- 版本管理:通过标签(tag)进行版本管理
3.容器
容器是镜像的运行实例,是一个轻量级,可移植的执行环境。简单来说镜像就是压缩包,解压出来的东西就是容器
容器主要通过 Linux内核提供的两大核心技术 来实现隔离:Namespace(命名空间) 和 Cgroups(控制组)。
容器的特点
- 隔离性:每个容器都有自己的文件系统、网络和进程空间
- 临时性:容器可以被创建、启动、停止、删除
- 可写层:容器在镜像基础上添加了一个可写层
- 进程级:容器内通常运行一个主进程
4.仓库
仓库是存储和分发镜像的地方
仓库的分类
- 公共仓库:如 Docker Hub,任何人都可以使用
- 私有仓库:企业内部搭建,用于存储私有镜像
- 官方仓库:由软件官方维护的镜像仓库
5.docker和虚拟机的区别
虚拟机是完整的硬件和操作系统的
docker是运行在本身操作系统之上的应用运行环境
| 特性 | 虚拟机 | Docker容器 |
|---|---|---|
| 隔离级别 | 硬件级别虚拟化 | 操作系统级别虚拟化 |
| 操作系统 | 每个VM需要完整OS | 共享宿主机OS内核 |
| 资源占用 | 重量级,占用较多资源 | 轻量级,资源占用少 |
| 启动时间 | 分钟级别 | 秒级别 |
| 性能开销 | 较大 | 接近原生性能 |
| 镜像大小 | GB级别 | MB级别 |
docker的优势
1.环境一致性
减少环境相关的bug和部署问题
2.轻量级和高效
比虚拟机占用更少资源,秒级启动时间,单机可运行更多应用实例
3.可移植性
Linux、Windows、macOS都支持,在各种云平台间迁移,本地开发,云端部署
4.版本控制和回滚
每个版本都有对应的镜像,出问题时快速回到上一版本,同时运行不同版本进行对比
5.扩展性
快速创建更多容器实例,根据负载自动调整容器数量,服务拆分和独立部署
docker操作
获取镜像
docker pull 镜像名
#拉取指定架构镜像,如ARM64
docker pull --platform linux/amd64 nginx
查找镜像
# 列出本地所有镜像
docker images
# 显示镜像详细信息
docker image inspect nginx
# 查看镜像历史
docker history nginx
#删除镜像
docker rmi 镜像名字 #镜像里的容器要全部删除
运行容器
# 运行容器
docker run 镜像名字 # 前台运行
docker run -d nginx # 后台运行
docker run -d --name my-nginx nginx # 指定名称
docker run -it ubuntu /bin/bash # 交互式运行
# 查看容器
docker ps # 运行中的容器
docker ps -a # 所有容器
docker ps -l # 最近创建的容器
# 启动/停止/重启容器
docker start name #启动容器
docker stop name #停止容器
docker restart name #重启容器
docker pause name
docker unpause name #更新容器
# 删除容器
docker rm container_name
docker rm -f container_name # 强制删除运行中的容器
docker container prune # 删除所有停止的容器