news 2026/6/12 12:02:51

Docker:实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker:实战

第一部分:视频内容总结(严格基于视频)

1. 一句话核心总结

本篇系统讲解了Docker的核心概念、安装方法、镜像下载、容器运行、数据持久化、网络配置、镜像构建以及Docker Compose轻量级编排,帮助学习者掌握容器化部署的全流程。

2. 核心概念定义
  • Docker:用容器化技术给应用程序封装独立运行环境的工具,每个运行环境就是一个容器,运行容器的计算机称为宿主机。
  • 容器与虚拟机的区别:Docker容器之间共用同一个系统内核,而每个虚拟机都包含一个操作系统的完整内核,因此容器更轻、更小、启动更快。
  • 镜像:容器的模板,可类比软件安装包。镜像与容器的关系就像用模具做糕点——镜像=模具,容器=糕点。
  • 镜像仓库(Registry):存放和分享镜像的地方,官方仓库为Docker Hub。镜像地址格式:[registry]/[namespace]/[image]:[tag]
  • Docker Compose:轻量级的容器编排技术,使用YML文件管理多个容器的创建、网络和协同工作。
3. 分类/类型/步骤

(1)Docker网络模式

网络模式特点适用场景
bridge(默认)容器分配内部IP(如172.17.x.x),与宿主机网络隔离,需端口映射(-p)才能从外部访问单机容器默认模式
自定义bridge子网同一子网内容器可通过容器名互相访问(内置DNS),跨子网不可通信多容器需要互相通信且不想用IP
host容器直接共享宿主机网络栈,无需端口映射,容器服务直接运行在宿主机端口上解决棘手的网络问题,追求性能
none容器不联网完全隔离的场景

(2)Docker run常用参数

参数作用示例
-d后台运行(detached mode)docker run -d nginx
-p 宿主机端口:容器端口端口映射-p 8080:80
-v 宿主机目录:容器目录挂载卷(绑定挂载)-v /data:/app/data
--mount type=volume,src=卷名,dst=容器目录命名卷挂载推荐用于数据持久化
-e KEY=VALUE传递环境变量-e MONGO_INITDB_ROOT_USERNAME=admin
--name 容器名给容器自定义名称(唯一)--name mynginx
--restart always容器停止后自动重启生产环境常用
--restart unless-stopped除手动停止外自动重启推荐生产环境
-it --rm交互式进入容器,退出后自动删除临时调试
--network 网络名指定容器加入的网络--network mynet

(3)数据持久化两种挂载方式对比

方式命令示例特点
绑定挂载(Bind mount)-v /宿主机路径:/容器路径直接使用宿主机目录,容器内修改影响宿主机;宿主机空目录会覆盖容器内内容(无初始化)
命名卷挂载(Named volume)--mount type=volume,src=卷名,dst=/容器路径由Docker管理存储位置;首次使用时自动将容器内内容复制到卷中(有初始化)

(4)Docker Compose与docker run命令对应关系

docker run 参数docker-compose.yml 中的字段
--name容器名services下的服务名(即键名)
镜像名image: xxx
-eenvironment:
-vvolumes:
-pports:
--network自定义子网无需指定,Compose自动为所有服务创建同一子网
无直接对应depends_on:控制启动顺序
4. 排序或对比关系
  • 容器 vs 虚拟机:容器更轻量(共享内核)、启动更快(秒级)、资源占用少;虚拟机完整OS、隔离性更强但资源开销大。
  • 镜像删除 vs 容器删除docker rmi删除镜像,docker rm删除容器。删除正在运行的容器需加-f
  • docker run vs docker create + docker startrun=create+start
  • docker stop vs docker downstop只停止容器不删除;down(Compose命令)停止并删除容器。
  • CMD vs ENTRYPOINT:CMD可被docker run后的命令覆盖;ENTRYPOINT不易被覆盖,优先级更高。
5. 具体建议与注意事项
  • 建议
    • 在国内网络环境使用镜像站加速:修改/etc/docker/daemon.json添加registry-mirrors
    • 生产环境使用--restart unless-stopped,手动停止的容器不会自动重启。
    • 多容器应用使用 Docker Compose 管理,避免多次docker run
    • 容器内调试时,若缺少命令(如 vi),先查看Linux发行版(cat /etc/os-release),再用对应包管理器安装(Debian系用apt)。
    • 使用docker inspect+ AI 快速解析容器配置。
    • 拉取镜像时注意 CPU 架构(如 arm64 设备需确认镜像是否支持)。
  • 注意事项
    • 绑定挂载时,宿主机空目录会覆盖容器内原有内容,导致服务异常(如 Nginx 显示403)。
    • 删除容器会丢失容器内所有未持久化的数据,重要数据必须使用挂载卷。
    • 使用 host 模式虽方便,但容器与宿主机网络完全共享,端口冲突风险高。
    • 镜像构建时,为减小体积,基础镜像通常为极简系统(如 slim、alpine),缺少常见工具,需自行安装。
    • 强制删除容器(docker rm -f)可能造成数据丢失,谨慎使用。
6. 补充说明
  • 实战案例:Nginx 部署 + 自定义网页挂载、MongoDB + mongo-express 组合、Python FastAPI 应用镜像构建与推送。
  • 资源推荐:作者提供的 Docker 安装及镜像站配置脚本仓库(github.com/tech-shrimp/docker_installer)。
  • AI辅助学习:可将docker inspect输出直接粘贴给 AI,快速解读容器配置。

第二部分:常见知识点与需了解的概念

  1. 基础概念类

    • Docker 架构:C/S 模式(Docker Client → Docker Daemon → containerd → runc),了解有利于排查问题。
    • UnionFS(联合文件系统):镜像分层存储的基础,每层只读,容器层可写(写时复制),节省空间。
    • .dockerignore文件:构建镜像时排除不需要的文件(如node_modules.git),类似.gitignore
    • 多阶段构建:在一个 Dockerfile 中使用多个FROM,最终只复制必要产物,极大减小镜像体积。
  2. 风险类

    • 容器逃逸风险:Docker 默认非 root 用户运行,但若用户以 root 运行容器且挂载了宿主机敏感目录,可能被恶意程序逃逸。
    • 镜像漏洞:基础镜像可能包含已知 CVE 漏洞,应定期扫描(docker scan或使用 Trivy)。
    • 日志无限增长:容器默认不限制日志大小,长期运行可能占满磁盘,需配置log-opts max-size
    • docker system prune -a风险:会删除所有未使用的镜像、容器、网络、构建缓存,可能导致需要重新拉取。
  3. 实操类

    • 查看容器资源占用docker stats实时查看 CPU/内存使用。
    • 复制文件进出容器docker cp 宿主机路径 容器id:容器路径(双向)。
    • 修改已运行容器的端口映射:不能直接改,需docker commit为新镜像再运行,或修改配置文件重启 Docker(复杂)。
    • docker logs的进阶用法--since查看最近时间日志,--tail查看最后 N 行。
    • 清理空间docker system prune(清理停止的容器、未使用的网络、悬空镜像),docker volume prune清理无用卷。
  4. 对比类

    • Docker Compose vs Kubernetes:Compose 适用于单机多容器编排;K8s 是生产级集群管理,支持自动伸缩、服务发现、负载均衡等。
    • COPYvsADD指令ADD支持自动解压 tar 和 URL 下载,但行为不透明,推荐优先用COPY
    • ENTRYPOINTvsCMDENTRYPOINT定义容器主进程,CMD提供默认参数;两者可组合使用。
  5. 常见误区

    • 误以为容器是轻量级虚拟机:容器本质是进程(通过 namespace 隔离),不是完整 OS,不能随意执行systemctl等命令。
    • 误认为docker stop会立即杀死容器:默认给 10 秒优雅停止时间(可-t修改),超时才强制 kill。
    • 误以为latest标签总是最新版本latest是约定,不一定指向最新稳定版,依赖镜像维护者的更新习惯。
    • 误认为 Docker 只能运行在 Linux 上:Windows/Mac 通过虚拟机(WSL2/Hyper-V)运行 Linux 容器,也可运行 Windows 容器(需特定 OS)。
    • 误认为容器内修改文件后提交(docker commit)是最佳实践:应使用 Dockerfile 和挂载卷,commit不可复现且易产生镜像膨胀。
  6. 进阶知识点

    • Docker 资源限制--memory="512m"--cpus="1.5",防止容器耗尽宿主机资源。
    • 健康检查(HEALTHCHECK):Dockerfile 中配置,定期检测容器服务是否正常。
    • Docker 事件监听docker events可监控容器生命周期事件,用于自动化运维。
    • Rootless 模式:以非 root 用户运行 Docker 守护进程,提高安全性。
    • Docker 插件:如存储插件、网络插件,可扩展 Docker 功能。

第三部分:全面内容总结(合并第一、二部分)

1. 主题概述

Docker 通过容器化技术为应用提供独立的运行环境,相比虚拟机更轻量(共享宿主机内核)。核心概念包括:
镜像(只读模板,类比模具)、
容器(镜像的运行实例,类比糕点)、
仓库(存储分享镜像,如 Docker Hub)。
使用docker run创建容器,通过挂载卷(-v)实现数据持久化,端口映射(-p)对外暴露服务,环境变量(-e)传递配置。
Docker Compose 用 YAML 文件管理多容器应用,自动创建网络并控制启动顺序。

2. 分类与对比
对比项Docker 容器传统虚拟机
系统内核共享宿主机内核每个 VM 独立内核
启动时间秒级分钟级
资源占用MB 级GB 级
隔离级别进程级系统级
网络模式通信方式外部访问容器间互访
bridge内部 IP(172.17.x.x)-p映射通过 IP
自定义 bridge内部子网-p映射通过容器名(DNS)
host宿主机 IP无需映射共享宿主机
none不可访问不可
3. 风险与注意事项
  • 注意:绑定挂载空目录覆盖容器内容、删除容器丢失数据、host 模式端口冲突、基础镜像缺少工具。
  • 补充风险
    • 容器逃逸:以 root 运行且挂载敏感宿主机目录时存在安全风险。
    • 镜像漏洞:基础镜像可能有已知 CVE,需定期扫描。
    • 日志膨胀:未限制日志大小可能占满磁盘,配置log-opts max-size=10m
    • 资源耗尽:容器无资源限制可能抢占宿主机所有 CPU/内存,应设置--memory--cpus
4. 实操建议
  • 日常操作
    • 下载镜像前先搜索 Docker Hub 确认架构和文档。
    • 生产环境使用--restart unless-stopped
    • 重要数据使用命名卷或绑定宿主机目录,避免容器删除后丢失。
    • 使用docker stats监控资源,docker logs -f跟踪日志。
  • 容器调试
    • 进入容器:docker exec -it 容器名 /bin/bash(或/bin/sh)。
    • 若缺少命令,先查看 Linux 发行版(cat /etc/os-release),再用对应包管理器安装(Debian 用apt,Alpine 用apk)。
  • 镜像构建
    • 编写.dockerignore排除无关文件。
    • 使用多阶段构建减小体积。
    • 构建时利用构建缓存:将不易变化的指令(如安装依赖)写在前面。
  • Compose 使用
    • 标准文件名docker-compose.yml,非标准用-f指定。
    • 使用depends_on控制启动顺序(不保证等待服务就绪,需应用自身重试)。
  • 网络调试
    • 自定义 bridge 网络中,可用ping 容器名测试 DNS 解析。
    • host 模式下,容器内ip addr show会显示宿主机 IP。
5. 常见误区辨析
  • 误区1:容器是轻量级虚拟机。→ 容器是进程(namespace隔离),不能运行systemd
  • 误区2docker stop立刻杀死容器。→ 默认优雅停止等待 10 秒。
  • 误区3latest标签永远最新。→ 取决于维护者更新习惯,生产环境应指定具体版本号。
  • 误区4docker commit是保存容器修改的好方法。→ 不可复现,应使用 Dockerfile 和挂载卷。
  • 误区5:删除镜像前必须先删除依赖的容器。→ 需先停止并删除使用该镜像的容器,否则无法删除镜像。
  • 误区6:Docker 只能运行 Linux 容器。→ Windows/Mac 通过虚拟化运行 Linux 容器,Windows 也可运行 Windows 容器。

通过本篇内容,你将掌握:

  • 理解 Docker 核心概念(镜像、容器、仓库、宿主机)及与虚拟机的区别
  • 在 Linux/Windows/Mac 上安装 Docker,配置镜像站解决网络问题
  • 使用docker run的核心参数(-d-p-v-e--name--restart)创建和管理容器
  • 实现数据持久化:区分绑定挂载与命名卷,掌握docker volume命令
  • 构建自定义镜像:编写 Dockerfile、使用docker build、推送镜像到 Docker Hub
  • 配置 Docker 网络(bridge、自定义子网、host、none)及容器间通信
  • 使用 Docker Compose 编排多容器应用,编写docker-compose.yml并管理启停
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 12:02:51

Beyond Compare 5终极激活指南:3分钟实现永久授权的完整方案

Beyond Compare 5终极激活指南:3分钟实现永久授权的完整方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的授权限制而困扰吗?这款被誉为文件对…

作者头像 李华
网站建设 2026/6/12 12:00:04

逆向分析《魔域》老端:手把手教你定位魔石商店物品的基址与偏移

逆向工程实战:解密《魔域》魔石商店的数据结构记得第一次接触《魔域》这款经典网游时,我就被它丰富的经济系统所吸引。作为技术爱好者,我更感兴趣的是隐藏在游戏客户端背后的数据结构。今天,我将分享如何通过逆向工程手段&#xf…

作者头像 李华
网站建设 2026/6/12 11:54:58

论文提速的终极秘籍!全能AI论文平台,成稿速度超迅速

作为一名刚完成毕业论文的过来人,我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不顺、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合,简直是论文写作的 "开挂神器",效率直接拉满&#xff…

作者头像 李华
网站建设 2026/6/12 11:52:54

别再死记公式了!用Multisim仿真带你彻底搞懂反相积分运放

用Multisim仿真破解反相积分运放的设计奥秘在电子电路设计的海洋里,运算放大器就像是一把瑞士军刀,而反相积分运算放大器则是其中最精妙的工具之一。传统教学中,我们往往被要求死记硬背积分公式和推导过程,却很少有机会直观地看到…

作者头像 李华
网站建设 2026/6/12 11:50:55

社区邻里准成品净菜配餐便民副业的商业模式研究

社区邻里准成品净菜配餐便民副业的商业模式研究 摘要 随着城市职场节奏提速、青年独居群体规模化增长,消费者居家烹饪的备菜成本高、处理流程繁琐的痛点日益凸显,传统外卖重油重盐、性价比低、饮食体验差的弊端,催生了社区轻量化便民餐饮服务…

作者头像 李华