news 2026/7/2 15:40:49

docker总结归纳

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 等底层运行时。

若有收获,就点个赞吧

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 15:40:49

北京华恒智信为电子制造行业解决研发工艺部门合并融合难题

一、行业痛点&#xff1a;部门简单合并引发研发工艺专业壁垒问题众多处于OEM向ODM转型阶段的电子制造企业&#xff0c;为优化组织架构、整合技术资源&#xff0c;普遍会将研发部与工艺技术部合并为统一的技术中心&#xff0c;同时压缩人员编制。企业管理层的核心初衷是依托技术…

作者头像 李华
网站建设 2026/7/2 15:36:03

6DoF IMU与嵌入式系统的运动跟踪技术实践

1. 从6DoF IMU到嵌入式运动跟踪系统的技术跃迁在工业自动化、消费电子和医疗设备领域&#xff0c;精确的运动跟踪技术正经历着从实验室走向量产的革命。作为这场变革的核心组件&#xff0c;STMicroelectronics的ASM330LHH 6DoF惯性测量单元(IMU)与Microchip的PIC18F8722微控制器…

作者头像 李华
网站建设 2026/7/2 15:29:59

ASM330LHH与STM32F407ZG高精度运动跟踪系统设计

1. 为什么选择ASM330LHH与STM32F407ZG组合 在运动跟踪领域&#xff0c;传感器与处理器的选型直接决定了系统性能上限。ASM330LHH作为STMicroelectronics推出的6DoF惯性测量单元(IMU)&#xff0c;其核心优势在于0.025s/√Hz的陀螺仪噪声密度和0.065mg/√Hz的加速度计噪声密度。这…

作者头像 李华
网站建设 2026/7/2 15:29:23

petalinux 2024.2 config hw-description XSA vs SDT

一、问题petalinux-config -D --get-hw-description ../../prebuild/design_1_wrapper.xsa [INFO] Getting hardware description [ERROR] This Project was configured with "sdt", you may see issues if you use the same project for "xsa" flowzcu208…

作者头像 李华
网站建设 2026/7/2 15:28:15

13DOF传感器与PIC32MZ微控制器的嵌入式导航系统设计

1. 13DOF传感器与PIC32MZ2048EFH100微控制器的技术解析在嵌入式定位导航系统中&#xff0c;13DOF&#xff08;13自由度&#xff09;传感器模块通常由以下核心组件构成&#xff1a;三轴加速度计&#xff08;3DOF&#xff09;三轴陀螺仪&#xff08;3DOF&#xff09;三轴磁力计&a…

作者头像 李华