docker总结归纳
一、Docker 核心基础概念
1. 核心组件
|
组件 |
本质/定义 |
核心作用 |
|
镜像 (Image) |
分层的只读文件,包含微型OS(无内核)、软件、依赖库、配置文件 |
容器的“模板”,可重复使用,是容器运行的基础 |
|
容器 (Container) |
镜像运行后的实例,本质是宿主机上的受隔离的进程 |
运行应用程序,拥有独立的网络、文件系统、进程空间,启停秒级 |
|
仓库 (Repository) |
存储镜像的仓库(公有/私有) |
镜像的分发渠道(官方:hub.docker.com;国内:docker.aityp.com、阿里云ACR) |
|
Dockerfile |
制作镜像的“配方文件”,包含构建镜像的指令序列 |
标准化构建自定义镜像,实现镜像构建自动化、可追溯 |
2. 容器核心特性
●轻量级:共享宿主机内核,仅封装应用及依赖,体积远小于虚拟机
●隔离性:通过 Linux Namespace 实现网络、进程、用户、文件系统等隔离
●资源可控:通过 Linux Cgroup 限制 CPU、内存、磁盘 IO 等资源
●可移植性:镜像可在任意支持 Docker 的环境运行(跨服务器/操作系统)
●单进程思想:一个容器仅运行一个核心程序(便于资源管控和故障定位)
二、Docker 环境部署
1. CentOS 安装 Docker
# 1. 安装系统工具
sudo yum install -y yum-utils
# 2. 添加阿里云软件源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 安装 Docker 核心组件
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 4. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 5. 关闭防火墙/SELinux(生产环境建议按需开放端口,而非直接关闭)
sudo systemctl stop firewalld && sudo systemctl disable firewalld
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config && sudo setenforce 0
2. Ubuntu 安装 Docker
# 1. 更新系统并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# 2. 信任 Docker GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 3. 添加软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3. 核心组件说明
|
组件 |
核心作用 |
|
docker-ce |
Docker 核心守护进程(daemon),管理容器生命周期、资源隔离 |
|
docker-ce-cli |
Docker 命令行客户端,用户与 daemon 交互的入口(如 docker run/ps) |
|
[containerd.io](containerd.io) |
底层容器运行时,负责容器的实际创建/启动,对接 runc |
|
docker-buildx-plugin |
增强镜像构建能力(多平台构建、缓存优化) |
|
docker-compose-plugin |
多容器编排工具,通过 docker-compose.yml 管理关联容器 |
三、Docker 核心操作命令
1. 镜像管理
|
命令 |
作用 |
|
docker images |
查看本地镜像 |
|
docker pull <镜像名:版本> |
拉取镜像(国内建议用阿里云/华为云镜像源) |
|
docker tag <原镜像> <新标签> |
为镜像打标签(用于推送私有仓库) |
|
docker build -t <镜像名:版本> . |
基于 Dockerfile 构建镜像 |
|
docker save -o <文件名.tar> <镜像> |
导出镜像为 tar 包 |
|
docker load -i <文件名.tar> |
导入 tar 包为镜像 |
|
docker rmi <镜像ID/名称> |
删除本地镜像(需先删除依赖该镜像的容器) |
2. 容器管理
|
命令 |
作用 |
|
docker run [参数] <镜像> |
创建并启动容器(核心参数见下表) |
|
docker ps [-a] |
查看运行中(-a 包含已停止)的容器 |
|
docker start/stop/restart <容器> |
启动/停止/重启容器 |
|
docker exec -it <容器> bash/sh |
进入容器交互式终端 |
|
docker rm [-f] <容器> |
删除容器(-f 强制删除运行中的容器) |
|
docker logs [-f] <容器> |
查看容器日志(-f 实时跟踪) |
|
docker stats <容器> |
查看容器资源占用(CPU、内存、IO) |
|
docker inspect <容器/镜像> |
查看容器/镜像的详细元数据 |
docker run 核心参数
|
参数 |
作用 |
|
-d |
后台运行容器 |
|
--name <名称> |
指定容器名称(唯一) |
|
-p <宿主机端口>:<容器端口> |
端口映射(DNAT),对外暴露容器服务 |
|
-e <KEY=VALUE> |
设置容器环境变量(如 MYSQL_ROOT_PASSWORD=123456) |
|
--network <网络> |
指定容器所属网络(默认 bridge) |
|
--cpu-shares <值> |
设置 CPU 权重(相对值,默认1024) |
|
-m <大小> |
限制内存(如 500M、1G) |
|
-v <卷/宿主机路径>:<容器路径> |
挂载数据卷/目录(持久化数据) |
|
--link <容器>:<别名> |
容器间网络互通(已被自定义网络替代,不推荐) |
3. 数据卷管理
|
命令 |
作用 |
|
docker volume create <卷名> |
创建自定义数据卷 |
|
docker volume ls |
查看所有数据卷 |
|
docker volume inspect <卷名> |
查看数据卷详细信息(存储路径:/var/lib/docker/volumes/卷名/_data) |
|
docker volume rm <卷名> |
删除数据卷 |
|
docker volume prune |
删除未使用的所有数据卷 |
4. 网络管理
|
命令 |
作用 |
|
docker network ls |
查看所有网络 |
|
docker network create <网络名> |
创建自定义 bridge 网络 |
|
docker network inspect <网络名> |
查看网络详情(子网、网关、关联容器) |
|
docker network connect <网络> <容器> |
将容器接入指定网络 |
容器网络类型
|
类型 |
特点 |
|
bridge |
默认网络,容器有独立IP,通过宿主机 docker0 网桥实现网络互通(SNAT/DNAT) |
|
host |
容器共享宿主机网络命名空间,无独立IP,无需端口映射(端口冲突风险) |
|
null |
容器无网络(仅本地回环) |
|
overlay |
跨主机容器网络(Docker Swarm/K8s 集群使用) |
四、Docker 底层原理
1. 隔离技术:Linux Namespace
|
Namespace 类型 |
隔离内容 |
作用 |
|
Network |
网络(IP、端口、网卡) |
容器拥有独立的网络栈,端口不冲突 |
|
PID |
进程ID |
容器内进程 PID 从 1 开始,无法看到宿主机/其他容器进程 |
|
UTS |
主机名/域名 |
容器可自定义主机名 |
|
User |
用户/组ID |
容器内 root 不等于宿主机 root |
|
Mount |
文件系统 |
容器有独立的挂载点,与宿主机隔离 |
|
IPC |
进程间通信(信号、共享内存) |
容器间默认无法IPC通信 |
2. 资源限制:Linux Cgroup
●核心作用:限制进程/进程组的 CPU、内存、磁盘 IO、网络带宽等资源
●关键特性:
○可精细化控制(如 CPU 核数、内存上限、IO 速率)
○资源使用可监控(docker stats 基于此实现)
○层级化管理(子组继承父组限制)
3. 镜像分层:OverlayFS
●核心思想:镜像由多个只读层 + 容器运行时的可写层组成,相同层共享存储,减少冗余
●容器读写规则:
○读文件:从上到下遍历各层,找到第一个匹配的文件
○写文件:Copy-on-Write(COW),先将只读层文件复制到可写层,再修改
○删除文件:在可写层创建“白名单”标记,隐藏只读层文件
五、Dockerfile 制作自定义镜像
1. 核心指令
|
指令 |
作用 |
注意事项 |
|
FROM |
指定基础镜像(必填,如 busybox、python:3.9-slim) |
优先选择轻量级镜像(alpine/busybox)减小体积 |
|
WORKDIR |
设置容器工作目录(后续指令的执行目录) |
避免使用 cd 命令,建议绝对路径 |
|
COPY/ADD |
复制宿主机文件到容器(ADD 支持解压压缩包、下载URL) |
COPY 更安全,优先使用 |
|
RUN |
构建镜像时执行命令(如安装依赖) |
多条命令用 && 合并,减少镜像层数 |
|
ENV |
设置环境变量(可在容器内使用) |
便于镜像参数化,如版本、配置路径 |
|
EXPOSE |
声明容器暴露的端口(仅文档作用,不实际映射) |
需配合 docker run -p 对外暴露 |
|
CMD/ENTRYPOINT |
容器启动时执行的命令 |
CMD 可被覆盖,ENTRYPOINT 不可覆盖(CMD 可作为其参数) |
|
VOLUME |
声明数据卷(容器启动时自动创建) |
建议运行时通过 -v 挂载,更灵活 |
|
LABEL |
添加镜像元数据(如作者、版本) |
便于镜像管理和检索 |
2. CMD vs ENTRYPOINT
|
特性 |
CMD |
ENTRYPOINT |
|
可覆盖性 |
运行容器时可通过命令行参数覆盖 |
不可覆盖(需用 --entrypoint 参数) |
|
用途 |
定义默认启动命令(可替换) |
定义容器核心启动命令(固定) |
|
组合使用 |
作为 ENTRYPOINT 的参数 |
接收 CMD 的参数,如 ["/bin/sh", "/script.sh"] + ["arg1"] |
3. 镜像优化技巧
1减少层数:RUN 指令合并(&&)、少用 COPY/ADD 分散复制
2选择轻量基础镜像:alpine(几MB)> slim > 完整版 OS
3清理构建缓存:RUN 指令最后清理依赖包、日志、缓存(如 apt-get clean)
4多阶段构建:编译和运行分离(如 Go/C 编译后仅复制二进制文件到 alpine)
六、Docker 生态与进阶应用
1. 多容器编排:docker-compose
●核心文件:docker-compose.yml(YAML 格式),定义多个关联容器的配置
●核心优势:一键启动/停止所有容器,自动管理网络、依赖关系
●常用命令:
docker compose up [-d] # 启动(-d 后台)
docker compose down # 停止并删除容器/网络
docker compose logs # 查看所有容器日志
2. 跨主机数据共享:NFS
部署步骤(服务端)
# 1. 安装 NFS 服务
yum install -y nfs-utils # CentOS
# apt install -y nfs-kernel-server # Ubuntu
# 2. 创建共享目录
mkdir /web && chown nobody:nobody /web
# 3. 配置共享规则
echo "/web 192.168.152.0/24(rw,sync,all_squash)" >> /etc/exports
# 4. 启动服务并生效配置
systemctl start nfs-server && systemctl enable nfs-server
exportfs -arv
客户端挂载并创建 Docker 卷
# 1. 安装 NFS 客户端
yum install -y nfs-utils # CentOS
# 2. 创建本地挂载目录
mkdir /nfs-web
# 3. 挂载 NFS 目录
mount 192.168.152.134:/web /nfs-web
# 4. 创建 Docker NFS 卷
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.152.134,nolock,soft,rw \
--opt device=:/web \
nfs-web
# 5. 启动容器挂载卷
docker run -d -p 8058:80 -v nfs-web:/usr/share/nginx/html nginx
3. 私有镜像仓库:Harbor
核心特性
●支持多项目、多用户权限管理
●镜像安全扫描、签名验证
●兼容 Docker Registry 规范
部署关键步骤
1解压 Harbor 离线包,修改 harbor.yml(配置 hostname、关闭 HTTPS)
2执行 ./install.sh 安装(依赖 docker-compose)
3配置 Docker 信任私有仓库(/etc/docker/daemon.json)
4登录并推送镜像
4. 容器监控:Prometheus + Grafana + cAdvisor
核心组件
|
组件 |
作用 |
|
Prometheus |
时序数据库,采集并存储监控指标 |
|
cAdvisor |
采集容器/宿主机资源指标(CPU、内存、IO、网络) |
|
node_exporter |
采集宿主机系统指标(补充 cAdvisor 宿主机监控能力) |
|
Grafana |
可视化监控数据,提供丰富的仪表盘模板 |
部署关键步骤
1启动 cAdvisor(依赖 Redis)
2配置 Prometheus 采集 cAdvisor/node_exporter 指标(修改 prometheus.yml)
3启动 Grafana,导入模板(如 8919 监控 node_exporter),关联 Prometheus 数据源。
5. 云原生镜像仓库:阿里云 ACR
核心操作
# 1. 登录阿里云 ACR
docker login --username=<阿里云账号> registry.cn-heyuan.aliyuncs.com
# 2. 为镜像打标签
docker tag nginx:latest registry.cn-heyuan.aliyuncs.com/<命名空间>/nginx:latest
# 3. 推送镜像
docker push registry.cn-heyuan.aliyuncs.com/<命名空间>/nginx:latest
# 4. 拉取镜像
docker pull registry.cn-heyuan.aliyuncs.com/<命名空间>/nginx:latest
七、生产环境最佳实践
1. 容器部署
●避免使用 --privileged 特权模式(降低隔离性)
●容器运行用户非 root(减少安全风险)
●关键容器设置 --restart=always(异常重启)
●数据持久化优先使用数据卷/外部存储(NFS/云存储),而非容器内存储
2. 镜像管理
●镜像版本使用固定标签(如 8.4.6),而非 latest(避免版本混乱)
●私有仓库开启镜像扫描(防范漏洞)
●定期清理无用镜像/容器/卷(docker system prune)
3. 监控与日志
●所有容器日志输出到标准输出(便于集中收集)
●部署 Prometheus + Grafana 监控核心指标(CPU、内存、磁盘、服务可用性)
●关键服务配置告警(如容器退出、资源使用率超阈值)
4. 开机自启
容器自启
# 方法1:创建启动脚本
cat > /usr/local/bin/start_docker_containers.sh << 'EOF'
#!/bin/bash
docker start sc-nginx-1 sc-mysql-1 sc-redis-1
EOF
chmod +x /usr/local/bin/start_docker_containers.sh
# 方法2:添加到 rc.local(Ubuntu 需配置 rc.local 可执行)
echo "/usr/local/bin/start_docker_containers.sh" >> /etc/rc.local
chmod +x /etc/rc.local
八、核心知识点总结
1.Docker 本质:基于 Linux Namespace/Cgroup/OverlayFS 技术,将应用及依赖封装为镜像,运行时创建隔离的容器进程,实现“一次构建、到处运行”。
2.核心操作:镜像构建(Dockerfile)、容器启停(run/start/stop)、数据持久化(volume/NFS)、网络管理(bridge/自定义网络)是日常使用的核心。
3.生产关键:数据持久化、资源限制、监控告警、镜像安全、容器自启是生产环境落地的核心要点,需重点关注。
4.生态延伸:Docker 是云原生基础,向上对接 docker-compose(单机编排)、K8s(集群编排),向下依赖 containerd/runc 等底层运行时。
若有收获,就点个赞吧
更多推荐


所有评论(0)