第一章:Docker日常操作概述
Docker 作为现代应用开发与部署的核心工具,广泛应用于构建、分发和运行容器化应用。掌握其日常操作是提升运维效率与开发体验的基础。
镜像管理
镜像是 Docker 容器的模板,通常由 Dockerfile 构建而成。常用操作包括拉取、列出和删除镜像:
docker pull nginx:latest:从远程仓库拉取最新版 Nginx 镜像docker images:列出本地所有镜像docker rmi nginx:删除指定镜像
# 拉取 Ubuntu 镜像并查看 docker pull ubuntu:22.04 docker images | grep ubuntu # 输出将显示本地存在的 Ubuntu 镜像信息
容器生命周期管理
容器是镜像的运行实例,可通过以下命令控制其状态:
docker run:创建并启动容器docker stop:停止正在运行的容器docker start:启动已停止的容器docker rm:删除容器(需先停止)
# 启动一个后台运行的 Nginx 容器 docker run -d --name my-nginx -p 8080:80 nginx:latest # 停止并删除该容器 docker stop my-nginx docker rm my-nginx
资源使用概览
通过表格可清晰对比常用命令的功能:
| 命令 | 作用 | 适用对象 |
|---|
| docker ps | 查看运行中的容器 | 容器 |
| docker logs | 查看容器日志输出 | 容器 |
| docker exec | 在运行容器中执行命令 | 容器 |
graph TD A[Pull Image] --> B[Run Container] B --> C{Running?} C -->|Yes| D[Exec Commands] C -->|No| E[Start Container] D --> F[Maintain & Monitor]
第二章:镜像管理核心命令详解
2.1 镜像的拉取与推送实战
在容器化开发中,镜像的拉取与推送是日常协作的核心操作。通过 Docker CLI 与镜像仓库(如 Docker Hub 或私有 Registry)交互,实现镜像的分发与共享。
镜像拉取基础命令
docker pull nginx:latest
该命令从公共仓库拉取最新版 Nginx 镜像。`nginx` 是镜像名称,`latest` 为标签,标识特定版本。拉取后镜像存储于本地镜像层,供后续容器启动使用。
镜像推送流程
推送前需先打标签并登录仓库:
- 执行
docker tag myapp:1.0 registry.example.com/team/myapp:1.0添加仓库地址与命名空间; - 使用
docker login registry.example.com认证身份; - 运行
docker push registry.example.com/team/myapp:1.0将镜像上传。
常见镜像仓库对比
| 仓库类型 | 公网访问 | 认证方式 |
|---|
| Docker Hub | 支持 | 用户名/密码 |
| Harbor | 可配置 | RBAC/OIDC |
2.2 镜像构建原理与Dockerfile应用
镜像的分层结构
Docker镜像由多个只读层组成,每一层对应Dockerfile中的一条指令。当构建镜像时,Docker会逐层执行指令并缓存结果,提升后续构建效率。
Dockerfile基础语法
以下是一个典型的Dockerfile示例:
FROM ubuntu:20.04 LABEL maintainer="dev@example.com" RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
-
FROM:指定基础镜像; -
LABEL:添加元数据信息; -
RUN:在镜像中执行命令; -
EXPOSE:声明服务监听端口; -
CMD:容器启动时运行的默认命令。
构建过程优化策略
- 将不变的指令放在前面以利用缓存
- 合并多个RUN指令减少镜像层数
- 使用.dockerignore避免无关文件进入上下文
2.3 镜像查看与元信息分析技巧
基础镜像查看命令
使用
docker images可列出本地所有镜像,包含仓库名、标签、镜像ID、创建时间及大小等基本信息。
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
该命令通过格式化输出增强可读性,
--format参数自定义列项,便于快速识别资源占用情况。
深入元信息解析
利用
docker inspect获取镜像详细元数据,包括架构、层数、环境变量和依赖关系。
docker inspect nginx:latest
返回的JSON结构中,
RootFS显示分层构成,
Config包含启动指令与网络配置,适用于安全审计与构建溯源。
- 关注
Created字段识别镜像新鲜度 - 检查
Labels获取构建者与版本信息
2.4 镜像标签管理与版本控制策略
在容器化开发中,镜像标签是区分不同版本的关键标识。合理的标签策略能有效避免部署混乱,提升系统可维护性。
语义化标签规范
推荐采用
主版本.次版本.修订号的语义化命名方式,例如:
v1.2.0 v1.2.1-rc.1 latest
其中
v1.2.0表示稳定版本,
rc代表发布候选,
latest仅用于开发测试环境。
多标签并行策略
为同一镜像打多个标签,兼顾灵活性与安全性:
app:v1— 指向当前主版本app:v1.2— 指向次版本app:v1.2.0— 精确指向构建版本
标签生命周期管理
| 标签类型 | 适用环境 | 保留策略 |
|---|
| latest | 开发 | 定期清理 |
| beta | 测试 | 保留最近3个 |
| release | 生产 | 永久归档 |
2.5 镜像删除与存储优化实践
在容器化环境中,镜像的频繁构建与更新容易导致磁盘资源浪费。合理管理镜像生命周期是提升系统效率的关键。
镜像清理策略
定期删除无用镜像可有效释放存储空间。使用以下命令可清除悬空镜像:
docker image prune -f
该命令强制移除所有未被任何容器引用的中间层镜像,
-f参数避免交互式确认,适合自动化脚本集成。
批量删除标签镜像
对于已废弃的特定版本镜像,可通过标签匹配批量清理:
docker rmi $(docker images 'myapp*' -q)
此命令移除所有以
myapp开头的镜像,
-q仅输出ID,确保操作精准高效。
- 优先清理长期未使用的镜像(dangling)
- 结合CI/CD流水线自动触发镜像回收
- 设置存储配额防止突发增长
第三章:容器生命周期操作精讲
3.1 容器启动、运行与交互式操作
在容器化技术中,启动和管理容器是日常运维的核心操作。通过 `docker run` 命令可快速创建并启动容器实例。
基本启动命令
docker run -it ubuntu /bin/bash
该命令中,
-i保持标准输入打开,
-t分配伪终端,实现与容器的交互式会话。镜像
ubuntu被拉取后将执行
/bin/bash,进入 shell 环境。
常用参数说明
--name:为容器指定名称,便于管理-d:后台运行容器-p:映射主机端口到容器-v:挂载本地目录作为数据卷
运行中的容器操作
使用
docker exec可在已运行的容器中执行新命令:
docker exec -it mycontainer ls /data
此命令进入名为
mycontainer的容器,列出
/data目录内容,适用于调试和文件检查。
3.2 容器暂停、重启与状态管理
容器生命周期控制命令
Docker 提供了对容器运行状态的精细控制。通过
pause、
unpause和
restart命令可实现运行中的暂停与恢复。
# 暂停容器(冻结进程) docker pause my_container # 恢复容器(解冻进程) docker unpause my_container # 重启容器(停止并重新启动) docker restart my_container
上述命令分别向容器内所有进程发送 SIGSTOP/SIGCONT 信号或执行完整重启流程,适用于不同维护场景。
容器状态查询
使用
docker ps可查看容器实时状态,包括运行、暂停或退出等。
| 状态 | 含义 |
|---|
| Up | 容器正在运行 |
| Paused | 容器进程被冻结 |
| Exited | 容器已停止 |
3.3 容器停止与资源释放最佳实践
优雅终止与信号处理
容器在停止时应优先接收
SIGTERM信号,给予应用合理时间完成清理任务,如关闭连接、保存状态。避免直接发送
SIGKILL导致数据丢失。
lifecycle: preStop: exec: command: ["/bin/sh", "-c", "sleep 10"]
上述配置通过
preStop钩子延迟容器终止,确保流量已从服务注册中心摘除,并完成正在进行的请求处理。
资源释放检查清单
- 关闭网络监听端口,释放绑定IP与端口
- 清理临时文件与挂载卷,防止存储泄漏
- 注销服务发现注册项,避免流量误转
- 提交或回滚未完成的事务操作
终止超时策略
Kubernetes 默认等待 30 秒后强制终止,可通过
terminationGracePeriodSeconds调整:
terminationGracePeriodSeconds: 60
适用于需长时间停机清理的应用,如大数据处理节点。
第四章:网络与数据卷配置实战
4.1 自定义网络模式与容器通信
在 Docker 中,自定义网络模式能有效提升容器间通信的安全性与效率。通过创建独立的用户定义桥接网络,容器可在私有子网中通过服务名称直接通信。
创建自定义网络
docker network create --driver bridge my_network
该命令创建名为 `my_network` 的桥接网络,容器加入后可通过 DNS 解析彼此名称,无需手动映射端口或链接容器。
容器加入网络示例
- 启动第一个容器:
docker run -d --name web --network my_network nginx - 启动第二个容器并通信测试:
docker run -it --network my_network alpine ping web
上述配置使容器在隔离环境中高效通信,同时避免与默认网络的冲突。
4.2 数据卷创建与持久化存储应用
在容器化环境中,数据卷(Volume)是实现数据持久化的关键机制。通过将宿主机目录或专用存储挂载至容器,可避免因容器生命周期结束而导致的数据丢失。
创建并使用数据卷
使用 Docker CLI 创建命名数据卷:
docker volume create app-data
该命令创建一个名为 `app-data` 的持久化卷,独立于任何容器存在,支持跨容器共享和备份。
挂载数据卷到容器
启动容器时挂载数据卷:
docker run -d --name web-container -v app-data:/usr/share/nginx/html nginx
参数 `-v app-data:/usr/share/nginx/html` 将数据卷挂载至 Nginx 的静态文件目录,实现网站内容持久化。
数据卷管理对比
| 特性 | 绑定挂载 | 命名数据卷 |
|---|
| 管理方式 | 手动指定路径 | Docker 管理 |
| 可移植性 | 低 | 高 |
| 适用场景 | 开发调试 | 生产环境 |
4.3 绑定挂载与主机目录共享技巧
数据同步机制
绑定挂载(Bind Mount)允许将主机文件系统中的特定目录或文件直接映射到容器内部,实现数据的实时共享与持久化。该机制绕过存储驱动,直接以原生文件系统形式访问,性能更优。
常用操作示例
docker run -d \ --name web-container \ -v /host/data:/container/data \ nginx:latest
上述命令将主机
/host/data目录挂载至容器的
/container/data。参数说明:
-v指定卷映射,格式为“主机路径:容器路径”,路径需为绝对路径,否则会触发命名卷而非绑定挂载。
权限与安全控制
- 挂载时添加
:ro标志可设置只读权限,如-v /host/config:/etc/config:ro; - 使用
:z或:Z标注SELinux上下文,确保容器可访问主机目录。
4.4 网络排查与常见问题诊断方法
基础连通性检测
网络故障排查通常从基础连通性开始。使用
ping和
traceroute可快速判断目标主机是否可达及路径延迟。
ping -c 4 example.com traceroute example.com
-c 4表示发送4个ICMP请求,避免无限阻塞;
traceroute显示数据包经过的每一跳,有助于识别中间网络节点异常。
端口与服务状态验证
当主机可达但服务不可用时,需检查端口监听状态。使用
telnet或
nc测试目标端口:
nc -zv example.com 80
-z表示仅扫描不传输数据,
-v提供详细输出,可确认TCP连接是否成功建立。
常见问题对照表
| 现象 | 可能原因 | 排查命令 |
|---|
| 无法访问网站 | DNS解析失败 | dig example.com |
| 连接超时 | 防火墙拦截 | iptables -L |
| 间歇性丢包 | 网络拥塞 | mtr example.com |
第五章:一键导出PDF与命令合集实用指南
自动化生成技术文档PDF
在持续集成流程中,将Markdown文档一键转换为PDF可极大提升交付效率。使用Pandoc结合LaTeX引擎,可实现格式统一的PDF输出。以下命令将README.md转换为专业排版的PDF文件:
# 安装依赖(Ubuntu/Debian) sudo apt-get install pandoc texlive-latex-base texlive-fonts-recommended # 转换Markdown为PDF,嵌入中文字体支持 pandoc README.md \ --pdf-engine=xelatex \ -V mainfont="Noto Serif CJK SC" \ -V fontsize=12pt \ -V geometry:margin=2cm \ -o documentation.pdf
常用命令速查表
以下是运维与开发中高频使用的导出与打包命令集合,适用于快速生成交付物:
| 用途 | 命令示例 |
|---|
| 压缩整个项目目录 | tar -czf project-v1.2.tar.gz ./src ./docs |
| 批量转换MD为PDF | for f in *.md; do pandoc "$f" -o "${f%.md}.pdf"; done |
| 生成带时间戳的归档名 | zip "backup-$(date +%Y%m%d).zip" *.log |
集成到CI/CD流水线
在GitHub Actions中添加构建PDF的步骤,确保每次提交自动生成最新文档:
- 创建
.github/workflows/pdf-build.yml - 使用ubuntu-latest环境预装pandoc
- 配置artifacts以保留生成的PDF文件
- 设置触发条件为推送到main分支或PR合并