- A+
Docker 是一种开源的容器化平台,用于构建、打包、分发和运行应用程序。它将应用程序及其依赖项(如库、运行时环境、系统工具等)打包到一个独立的容器中,确保应用程序在任何环境中都能以一致的方式运行。
一、核心概念
- Docker 镜像
- 镜像是一个轻量、可执行的独立软件包,包含运行容器所需的文件系统内容、环境变量、程序配置等。
- 采用分层架构,由多个只读层叠加而成,每一层对应一次构建操作(如
RUN
、COPY
)。 - 支持多阶段构建,可显著减小镜像体积。例如,使用
golang:1.17 AS builder
构建应用程序后,仅将二进制文件复制到轻量级镜像(如alpine:latest
)中。
- Docker 容器
- 容器是镜像的运行实例,提供独立、轻量级的运行环境,包含应用程序及其所有依赖项。
- 基于镜像创建,具有可写层,支持隔离性(通过
Namespace
)和资源限制(通过Cgroups
)。 - 生命周期短暂,可被快速创建、启动、停止和删除。
- Docker 仓库
- 存储和分享 Docker 镜像的地方,开发者可从仓库中获取镜像,并将自己的镜像推送到仓库中。
- 分为公共仓库(如 Docker Hub)和私有仓库。
二、底层原理
- Namespace
- 实现资源隔离,为容器创建独立的系统资源视图,包括进程、网络、文件系统、用户等。
- 例如,
PID Namespace
隔离进程 ID,Network Namespace
隔离网络栈。
- Cgroups
- 实现资源限制与管理,用于限制和监控容器的资源使用,包括 CPU、内存、磁盘 I/O 和网络带宽。
- 防止容器耗尽系统资源,影响其他容器或主机系统的正常运行。
- UnionFS(联合文件系统)
- 允许将多个只读镜像层叠加,形成一个统一的文件系统视图。
- 容器启动时,在镜像层之上添加可写层,实现写时复制(Copy-on-Write),保证镜像层只读且容器的文件变更隔离。
三、优势与应用场景
- 优势
- 一致性和可移植性:容器在任何支持 Docker 的平台上都能运行,确保开发和生产环境的一致性。
- 轻量级和高效性:容器共享宿主机的操作系统内核,资源占用少,启动速度快。
- 快速部署和交付:减少开发、测试和生产环境之间的差异,提高应用程序的交付速度。
- 应用场景
- 微服务架构:将应用程序拆分为多个独立的微服务,每个微服务运行在一个容器中。
- 持续集成/持续部署(CI/CD):通过 Docker 实现应用程序的快速构建、测试和部署。
- 多环境部署:确保应用程序在不同的环境中(如开发、测试、生产)以相同的方式运行。
Docker安装过程
安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
配置Docker仓库
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker CE
yum -y install docker-ce docker-ce-cli containerd.io
配置 daemon.json
文件
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"dns": ["8.8.8.8", "8.8.4.4"]
}
EOF
启动并设置开机自启
systemctl start docker
systemctl enable docker
验证安装
docker --version

常用命令
- 镜像管理
docker pull
:从仓库拉取镜像。docker images
:列出本地镜像。docker rmi
:删除本地镜像。docker save
:将镜像保存为 tar 文件。docker load
:从 tar 文件加载镜像。
- 容器管理
docker run
:创建并启动容器。docker ps
:查看容器列表。docker start/stop/restart
:启动、停止、重启容器。docker exec
:在运行中的容器内执行命令。docker attach
:附加到正在运行的容器并与其交互。docker rm
:删除容器。
- 其他命令
docker network
:管理容器网络。docker volume
:管理数据卷。docker-compose
:定义和运行多容器应用。
Docker 与虚拟机的对比
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
资源占用 | 少(共享宿主机内核) | 多(每个虚拟机运行完整操作系统) |
隔离性 | 基于命名空间和 Cgroups | 基于 Hypervisor |
可移植性 | 高(跨平台) | 较低(依赖虚拟化技术) |
适用场景 | 微服务、CI/CD、云原生应用 | 传统应用、需要完整操作系统的场景 |