Docker 是什么
Docker 是用 Go 语言开发的开源容器引擎,通过容器化技术实现轻量级虚拟化。
与传统虚拟机的核心区别:Docker 容器共享宿主机内核,不需要运行完整的操作系统,因此启动速度快(秒级)、资源占用少。
为什么选择容器化
- 灵活性:复杂应用可以拆分为多个独立容器
- 轻量级:共享内核,资源占用远低于虚拟机
- 快速部署:秒级启动,镜像一次构建到处运行
- 可移植性:开发、测试、生产环境完全一致
- 易扩展:水平扩展只需增加容器实例
三个核心概念
镜像(Image)
只读模板,包含应用代码、运行时、依赖库和配置。类比:镜像是「模具」,容器是用模具生产的「产品」。
容器(Container)
镜像的运行实例,相互隔离,共享宿主机内核。容器本质上是宿主机上的一个进程,通过 namespace 实现隔离,通过 cgroups 限制资源。
仓库(Registry)
存储和分发镜像的服务。Docker Hub 是公共仓库,企业通常搭建私有仓库(Harbor)。
安装 Docker
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加阿里云镜像源(国内推荐)
yum-config-manager --add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker CE
yum install docker-ce -y
# 启动服务
systemctl start docker
systemctl enable docker
常用命令速查
镜像操作
docker pull nginx:latest # 拉取镜像
docker images # 列出本地镜像
docker rmi nginx:latest # 删除镜像
docker save nginx > nginx.tar # 导出镜像
docker load < nginx.tar # 导入镜像
容器操作
# 运行容器
docker run -d -p 80:80 --name web nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 进入容器
docker exec -it web /bin/bash
# 停止/启动/删除容器
docker stop web
docker start web
docker rm web
# 查看容器日志
docker logs -f web
Docker vs 虚拟机
| 对比项 | Docker | 虚拟机 |
|---|---|---|
| 启动时间 | 秒级 | 分钟级 |
| 内存占用 | MB 级 | GB 级 |
| 隔离性 | 进程级 | 完全隔离 |
| 性能损耗 | 接近原生 | 较大 |
| 镜像大小 | MB 级 | GB 级 |