开场:Docker 为何值得学
开场指出很多人听说Docker却不清楚它是什么,自托管场景常需要用Docker把服务跑起来;本片面向绝对初学者,先给出Docker的简要概览,再引出它到底是什么。
面向初学者的 Docker 入门讲解:从容器概念、与虚拟机的区别,到客户端、守护进程、镜像与仓库,再到命令行实操与 Docker Compose 多容器管理。
从容器打包应用与依赖讲起,说明Docker隔离、可移植、轻量的特点,并引出Kubernetes负责大规模编排。
开场指出很多人听说Docker却不清楚它是什么,自托管场景常需要用Docker把服务跑起来;本片面向绝对初学者,先给出Docker的简要概览,再引出它到底是什么。
Docker是一个通过容器来构建、部署、运行和管理应用的平台。容器把应用连同运行所需的库、依赖和配置打包成一个整洁的小包,这正是Docker特别之处。
容器与系统其余部分松散隔离,可随时启动、停止、删除、更新而不影响系统;Linux用namespaces隔离容器、用cgroups管理资源。容器因此可移植且轻量,能在Mac、Windows、Linux上运行,前提是装有Docker且镜像支持该CPU架构,开发者无需为不同系统分别打包;Docker在Linux上表现最佳。
容器启动很快:下载镜像后只需提供用例所需选项即可迅速启动,且几乎感觉不到性能损失;删除容器同样简单快速,使部署非常快。
在企业环境中可用Kubernetes大规模管理和编排大量容器;Docker则是支撑这一切容器运转的底层软件。
先讲虚拟机与hypervisor原理及其隔离优势与资源开销,再说明Docker以操作系统级虚拟化共享内核修复两大痛点。
理解Docker前要先懂虚拟机:虚拟化在现有操作系统之上运行一台虚拟计算机,由hypervisor这种软件管理分配给虚拟机的资源;虚拟机让你在客户机系统中操作而不影响宿主机,例如执行危险命令只会破坏该虚拟系统。
虚拟机的优势是隔离性,还能跨环境运行系统,比如在Linux电脑上跑Windows或反之。代价是虚拟机要与宿主机共享CPU核心、内存和存储,且必须运行自己的操作系统与内核,因此更耗内存、存储和CPU,运行效果取决于分配的资源。
Docker正是为解决虚拟机的两大问题而生:它提供轻量、有一定隔离性且跨多个操作系统高度可移植的应用运行方式。
Docker是运行在操作系统层面的软件,即操作系统级虚拟化:它运行在宿主机系统之上并与之共享资源,主要共享操作系统核心即内核,因此无需为运行单个应用复制整个操作系统,从而保持轻量。
拆解Docker的客户端-服务端架构:客户端经API与守护进程dockerd通信,镜像由仓库存储分发,默认来源是Docker Hub。
Docker采用客户端-服务端架构,由客户端、守护进程以及本地或在线仓库三大组件构成,本节先总览这三部分。
Docker客户端负责向守护进程发起请求,通常是你通过命令行使用Docker,也有图形界面的Docker Desktop,本片聚焦CLI。客户端通过API或Unix socket与守护进程通信,API即按特定目的暴露和发送数据;客户端与守护进程不必在同一系统,可跨网络通信,但两者必须能互相通信。
Docker守护进程是后台运行、监听客户端API请求的服务,名为dockerd,其中d代表daemon。它像中间人,管理镜像、容器、网络、卷和存储等组件,并持续监听来自Docker客户端的API请求。
Docker仓库用于存储和分发镜像;镜像是包含运行容器所需全部文件、库和配置的标准包。镜像有两大特性:一是不可变,创建后只能在上面追加改动或另建新镜像;二是由许多层组成,每层可增删改文件,下载镜像时能看到这些层,镜像也可基于其他镜像。
镜像来自仓库,最流行且默认的是Docker Hub,它像所有镜像的集散地;从仓库下载镜像到本地在Docker中称为拉取,Docker Hub上有各种镜像可供查看。
从理论转向命令行实操:用 Ubuntu 镜像演示拉取、启动、进入与在运行容器中执行命令,建立镜像与容器的区分。
明确容器就是镜像在系统上实际运行的实例,应用及其配置、依赖等都被打包进这个镜像,启动容器即得到运行中的实例。
在 Kali Linux 上执行 docker pull ubuntu 拉取镜像,默认标签为 latest;标签指定版本,如 ubuntu:26.10 需用冒号连接,可用 docker image ls 确认本地已有两个版本。
用 docker run -it --name ubuntu_container ubuntu bash 启动容器并进入 root 提示符,通过 /etc/os-release 确认是 Ubuntu;-i 表示交互、-t 提供终端,因此能用 apt,而宿主机是 Arch 系用 pacman。
docker exec 可在运行中的容器里执行命令:先 docker start 启动容器,再执行 echo hello world 并看到输出,又用 cat /etc/os-release 验证命令确实运行在容器内而非宿主机。
docker attach 用于重新接入正在运行的容器,执行后回到容器的 root shell;前提是容器必须处于运行状态,否则该命令无法使用。
以自托管面板 Glance 为例,逐项拆解 docker run 参数,讲清卷映射、端口映射、后台运行及容器与镜像的删除。
自托管指不依赖 Netflix、Google Cloud 等第三方云应用;作者常用一个列出服务、时间日期与天气的面板,它运行在服务器的 Docker 容器中,配置由 compose 管理,本节先不展开。
把 Glance 的 compose 配置写成一条 docker run 命令:--name 给容器命名,--restart unless-stopped 表示非主动停止不会自动重启,镜像在命令末尾,本地没有时会自动从 Docker Hub 等仓库下载。
-v 即卷,用于给容器添加存储,因为容器默认易失、不保存数据;把本地 config 目录映射到容器内 /app/config,冒号分隔两侧,容器便可读写该目录,此概念很重要。
-p 是端口映射,端口是区分不同服务的虚拟端点,如同包裹需要门牌号;-p 8080:8080 中冒号前是宿主机端口、后是容器内端口,宿主机端口可换如 2222,但必须未被占用。
前台运行时按 Control+C 容器即停止,docker ps 中消失;加 -d 让容器后台运行,但重名会报错 Container name is already in use,需先删除旧容器。
docker rm 删除容器,docker container ls 可确认;后台运行需用 docker stop 加名称或 ID 停止,输入时可 Tab 补全;删除镜像前必须先删容器,再用 docker rmi 镜像名,最后 docker image ls 验证已消失。
本章介绍 Docker Compose:用单个 compose 文件管理多容器服务,并演示 down、pull、up 的更新流程与文件路径要求。
Docker Compose 把命令行选项集中到一个文件,更高效地管理多个容器。该文件叫 docker-compose.yaml,新版本叫 compose.yml。
以 BookOrbit 为例打开其 docker-compose.yaml,可以看到容器名、镜像、重启策略、端口等与之前类似的选项。但这个应用需要更多信息,并且要用两个容器才能运行;compose 把这些选项合并进一个文件,配置起来非常容易,而用传统方式则要把这些选项全部塞进一行命令。
更新分三步:down 停止容器并删除 compose 创建的网络;pull 下载更新所有容器;up -d 让服务重新启动并转入后台。
运行 docker compose 命令时,当前目录必须存在 docker-compose.yaml,否则命令无法工作;也可以用 docker compose -f 加文件路径来指定 compose 文件的位置。原因是这些命令要靠该文件才知道具体要做什么。此外,可用一个网站把标准 Docker 命令转换成 compose YAML 文件,链接在简介里。
收尾指出 Docker 是个庞大的主题,本片只触及表面;Docker 有无数选项,但片中演示的命令是最常用的那些。希望观众看完后能对 Docker 多一分理解。
由知否生成 · 整理你自己的资料 · 登录后按账户权益阅读、整理与提问