docker总结归纳

📅 2026/7/2 15:41:03
docker总结归纳
一、Docker 核心基础概念1. 核心组件组件本质/定义核心作用镜像 (Image)分层的只读文件包含微型OS无内核、软件、依赖库、配置文件容器的“模板”可重复使用是容器运行的基础容器 (Container)镜像运行后的实例本质是宿主机上的受隔离的进程运行应用程序拥有独立的网络、文件系统、进程空间启停秒级仓库 (Repository)存储镜像的仓库公有/私有镜像的分发渠道官方hub.docker.com国内docker.aityp.com、阿里云ACRDockerfile制作镜像的“配方文件”包含构建镜像的指令序列标准化构建自定义镜像实现镜像构建自动化、可追溯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.*/SELINUXdisabled/ /etc/selinux/config sudo setenforce 02. 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 ar /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-plugin3. 核心组件说明组件核心作用docker-ceDocker 核心守护进程daemon管理容器生命周期、资源隔离docker-ce-cliDocker 命令行客户端用户与 daemon 交互的入口如 docker run/ps[containerd.io](containerd.io)底层容器运行时负责容器的实际创建/启动对接 runcdocker-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、内存、IOdocker inspect 容器/镜像查看容器/镜像的详细元数据docker run 核心参数参数作用-d后台运行容器--name 名称指定容器名称唯一-p 宿主机端口:容器端口端口映射DNAT对外暴露容器服务-e KEYVALUE设置容器环境变量如 MYSQL_ROOT_PASSWORD123456--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/卷名/_datadocker volume rm 卷名删除数据卷docker volume prune删除未使用的所有数据卷4. 网络管理命令作用docker network ls查看所有网络docker network create 网络名创建自定义 bridge 网络docker network inspect 网络名查看网络详情子网、网关、关联容器docker network connect 网络 容器将容器接入指定网络容器网络类型类型特点bridge默认网络容器有独立IP通过宿主机 docker0 网桥实现网络互通SNAT/DNAThost容器共享宿主机网络命名空间无独立IP无需端口映射端口冲突风险null容器无网络仅本地回环overlay跨主机容器网络Docker Swarm/K8s 集群使用四、Docker 底层原理1. 隔离技术Linux NamespaceNamespace 类型隔离内容作用Network网络IP、端口、网卡容器拥有独立的网络栈端口不冲突PID进程ID容器内进程 PID 从 1 开始无法看到宿主机/其他容器进程UTS主机名/域名容器可自定义主机名User用户/组ID容器内 root 不等于宿主机 rootMount文件系统容器有独立的挂载点与宿主机隔离IPC进程间通信信号、共享内存容器间默认无法IPC通信2. 资源限制Linux Cgroup●核心作用限制进程/进程组的 CPU、内存、磁盘 IO、网络带宽等资源●关键特性○可精细化控制如 CPU 核数、内存上限、IO 速率○资源使用可监控docker stats 基于此实现○层级化管理子组继承父组限制3. 镜像分层OverlayFS●核心思想镜像由多个只读层 容器运行时的可写层组成相同层共享存储减少冗余●容器读写规则○读文件从上到下遍历各层找到第一个匹配的文件○写文件Copy-on-WriteCOW先将只读层文件复制到可写层再修改○删除文件在可写层创建“白名单”标记隐藏只读层文件五、Dockerfile 制作自定义镜像1. 核心指令指令作用注意事项FROM指定基础镜像必填如 busybox、python:3.9-slim优先选择轻量级镜像alpine/busybox减小体积WORKDIR设置容器工作目录后续指令的执行目录避免使用 cd 命令建议绝对路径COPY/ADD复制宿主机文件到容器ADD 支持解压压缩包、下载URLCOPY 更安全优先使用RUN构建镜像时执行命令如安装依赖多条命令用 合并减少镜像层数ENV设置环境变量可在容器内使用便于镜像参数化如版本、配置路径EXPOSE声明容器暴露的端口仅文档作用不实际映射需配合 docker run -p 对外暴露CMD/ENTRYPOINT容器启动时执行的命令CMD 可被覆盖ENTRYPOINT 不可覆盖CMD 可作为其参数VOLUME声明数据卷容器启动时自动创建建议运行时通过 -v 挂载更灵活LABEL添加镜像元数据如作者、版本便于镜像管理和检索2. CMD vs ENTRYPOINT特性CMDENTRYPOINT可覆盖性运行容器时可通过命令行参数覆盖不可覆盖需用 --entrypoint 参数用途定义默认启动命令可替换定义容器核心启动命令固定组合使用作为 ENTRYPOINT 的参数接收 CMD 的参数如 [/bin/sh, /script.sh] [arg1]3. 镜像优化技巧1减少层数RUN 指令合并、少用 COPY/ADD 分散复制2选择轻量基础镜像alpine几MB slim 完整版 OS3清理构建缓存RUN 指令最后清理依赖包、日志、缓存如 apt-get clean4多阶段构建编译和运行分离如 Go/C 编译后仅复制二进制文件到 alpine六、Docker 生态与进阶应用1. 多容器编排docker-compose●核心文件docker-compose.ymlYAML 格式定义多个关联容器的配置●核心优势一键启动/停止所有容器自动管理网络、依赖关系●常用命令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 typenfs \ --opt oaddr192.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 nginx3. 私有镜像仓库Harbor核心特性●支持多项目、多用户权限管理●镜像安全扫描、签名验证●兼容 Docker Registry 规范部署关键步骤1解压 Harbor 离线包修改 harbor.yml配置 hostname、关闭 HTTPS2执行 ./install.sh 安装依赖 docker-compose3配置 Docker 信任私有仓库/etc/docker/daemon.json4登录并推送镜像4. 容器监控Prometheus Grafana cAdvisor核心组件组件作用Prometheus时序数据库采集并存储监控指标cAdvisor采集容器/宿主机资源指标CPU、内存、IO、网络node_exporter采集宿主机系统指标补充 cAdvisor 宿主机监控能力Grafana可视化监控数据提供丰富的仪表盘模板部署关键步骤1启动 cAdvisor依赖 Redis2配置 Prometheus 采集 cAdvisor/node_exporter 指标修改 prometheus.yml3启动 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减少安全风险●关键容器设置 --restartalways异常重启●数据持久化优先使用数据卷/外部存储NFS/云存储而非容器内存储2. 镜像管理●镜像版本使用固定标签如 8.4.6而非 latest避免版本混乱●私有仓库开启镜像扫描防范漏洞●定期清理无用镜像/容器/卷docker system prune3. 监控与日志●所有容器日志输出到标准输出便于集中收集●部署 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.localUbuntu 需配置 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 等底层运行时。若有收获就点个赞吧