FROM ZERO · 一次把名词理顺

Docker 不是虚拟机,
它是给应用打包的「集装箱」

没学过运维也没关系。这一页把 50 道选择题里出现的所有名词,按"它到底解决什么问题"重新排成 10 个模块。每个模块先用大白话 + 类比讲清概念,再把对应考题挂上来——点一下就能看答案和为什么。建议从上往下读一遍,再回头点题自测。

镜像 image容器 containerDockerfile Volumenetworkregistrycompose
01

先建立心智模型:Docker 到底是什么

一句话:Docker 让你把"应用 + 它需要的一切环境"打包成一个标准化的盒子,在任何机器上都能原样跑起来。理解它最快的方式是和虚拟机对比。

Docker vs 虚拟机:核心差异在"内核"

类比:虚拟机像在你家里盖一整栋独立的房子(自带地基、水电、操作系统),笨重但彻底隔离;Docker 容器像在同一栋楼里隔出一个个房间——大家共用一套地基和水电(宿主机内核),只是各自上锁。所以容器更轻、启动更快,但隔离没有虚拟机那么彻底。
  • 虚拟机:每台 VM 有自己独立的操作系统内核,靠 Hypervisor 虚拟出硬件 → 重、慢、隔离强。
  • 容器:所有容器共享宿主机的同一个 Linux 内核,只是把进程、文件系统、网络隔离开 → 轻、秒级启动、性能损耗极小。
  • 正因为共享内核,"完全隔离的内核"恰恰不是容器的优势——这是考点(见第 1 题)。

三大件的关系:镜像 → 容器 → 仓库

整个 Docker 世界就围绕三个东西转,先记住这张流程图,后面所有模块都是在补充它的细节:

📜
Dockerfile
构建脚本
一份"配方",写明用什么底座、装什么、怎么启动
build
📦
Image
镜像(只读模板)
打包好的"集装箱蓝图",只读、可复制、分层
run
🚢
Container
容器(运行实例)
镜像跑起来后的活进程,可读写、可启停删
📡 仓库 Registry(如 Docker Hub)是存放镜像的"码头仓库":你用 docker push 把镜像上传,用 docker pull 把别人的镜像下载下来。镜像 ⇄ 仓库,容器从不直接进仓库。
记忆钩子:镜像 = 菜谱+食材打包好的速冻盒(只读、可无限复制);容器 = 把盒子加热端上桌的那一份饭(吃了就少了,可以再热一份);仓库 = 超市冷柜(存放和取用速冻盒的地方)。

对应考题本模块覆盖第 1、13 题

1Docker 容器相比虚拟机的优势不包括?
  • A. 启动速度更快
  • B. 资源占用更少
  • C. 完全隔离的内核
  • D. 性能损耗更小
C容器共享宿主机内核,根本没有"独立内核",更谈不上"完全隔离的内核"。A/B/D 都是容器相对 VM 的真实优势。
13以下关于 Docker 镜像的描述正确的是?
  • A. 镜像是可读写的
  • B. 镜像是容器的运行实例
  • C. 镜像是只读模板
  • D. 镜像只能从 Docker Hub 获取
C镜像是只读模板A 错(镜像只读,可写的是容器的最上层);B 错(运行实例是"容器",方向反了);D 错(也可本地 build、从私有仓库 pull)。
02

镜像 Image:怎么造、怎么管

镜像是 Docker 里最核心、考点最多的一块。要搞懂三件事:它由 Dockerfile 构建、采用分层存储、并有一整套构建/搬运/清理命令。

Dockerfile造镜像的"配方"

Dockerfile 是一行行的指令,从底座开始一层层往上叠。常考指令:

  • FROM 指定基础镜像(底座,如 alpinejava:11)。
  • RUN 在构建时执行命令(装软件等),每条 RUN 都会生成一个新层,所以要合并多条命令、清缓存来减小体积。
  • COPY / ADD 把文件放进镜像(区别见下表)。
  • CMD / ENTRYPOINT 指定容器启动时跑什么(区别见下表)。填空题:指定镜像入口点的指令是 ENTRYPOINT
对比COPYADD
基本复制复制本地文件/目录复制本地文件/目录
自动解压 tar不支持支持(本地压缩包会自动解压)
远程 URL 下载不支持支持
建议能用 COPY 就用 COPY(行为更明确)仅在需要解压/下载时用
对比CMDENTRYPOINT
角色默认命令/默认参数固定入口(主程序)
能否被 run 覆盖能被 docker run 后的参数覆盖不易被覆盖(需 --entrypoint)
两者同时存在CMD 作为 ENTRYPOINT 的默认参数(最终命令 = ENTRYPOINT + CMD)

分层 / 多阶段镜像为什么是一层层的

类比:镜像像 PS 里的图层叠加。底层(系统)很多镜像都一样,就只存一份、大家共享(写时复制 CoW);你改动时只新增/改写上面的薄薄一层。
  • 分层好处:省存储(共享底层)、加速构建(命中缓存的层不重建)、便于共享分发。注意:"提高安全性"不是分层带来的好处(第 5 题考点)。
  • 多阶段构建(multi-stage):先在"编译阶段"用大镜像编译,再把成品拷进一个干净小镜像——目的就是减小最终镜像体积(第 8 题)。
  • digest(摘要):对镜像内容算出的 SHA256,内容一变就变,用来精确锁定不可变的镜像(第 50 题);而 tag 只是版本标签、可移动。

命令镜像的造、搬、存、删

# 构建 / 标签
docker build -t myapp:1.0 . # 按 Dockerfile 构建镜像
docker tag myapp:1.0 myapp:latest # 打标签(区分版本)
# 拉取(不带 tag 默认拉 :latest)
docker pull nginx # = nginx:latest
# 把"运行中的容器"固化成新镜像
docker commit 容器ID newimage:1.0
# 导出:镜像 vs 容器快照(关键区别!)
docker save myapp:1.0 -o app.tar # save = 存"镜像"(含分层)
docker export 容器ID -o snap.tar # export = 存"容器快照"(扁平)
# 删除镜像
docker rmi myapp:1.0 # remove image
  • .dockerignore:列出构建时不打包进上下文的文件(如 node_modules、.git),只在 build 时生效,加快构建、减小体积。
  • 镜像最佳实践:用官方基础镜像、合并 RUN 清缓存、用非 root 运行、用 .dockerignore;"以 root 运行应用"是反面教材(第 27 题)。

对应考题第 3、4、5、8、12、14、18、27、30、33、40、42、43、50 题

3Dockerfile 中 COPY 和 ADD 的区别?
  • A. COPY 支持自动解压,ADD 不支持
  • B. ADD 支持自动解压和 URL 下载,COPY 不支持
  • C. 两者功能完全相同
  • D. COPY 只能本地,ADD 可复制远程
BADD 多了"自动解压本地 tar + 从 URL 下载"两项能力;A 反了;D 不准确(D 说的下载是 ADD 的能力之一,但表述不全,B 才是标准答案)。
4关于 CMD 和 ENTRYPOINT 正确的是?
  • A. CMD 不会被 run 参数覆盖
  • B. ENTRYPOINT 必须和 CMD 一起用
  • C. 两者同时定义时,CMD 作为 ENTRYPOINT 的默认参数
  • D. ENTRYPOINT 可被 run 参数覆盖
C同时存在时最终命令 = ENTRYPOINT + CMD,CMD 充当默认参数。A 反(CMD 可被覆盖);B 错(可单独用);D 错(ENTRYPOINT 默认不被覆盖)。
5Docker 镜像分层的好处不包括?
  • A. 减少存储空间
  • B. 加速镜像构建
  • C. 提高容器安全性
  • D. 便于镜像共享
C分层带来省空间、缓存加速、易共享;但不直接提升安全性
8多阶段构建的主要目的是?
  • A. 提高构建速度
  • B. 减小最终镜像大小
  • C. 增加构建安全性
  • D. 支持多平台构建
B把编译环境和运行环境分开,只把成品带进最终镜像,显著减小体积
12docker commit 的作用是?
  • A. 提交容器更改到代码仓库
  • B. 将容器保存为新镜像
  • C. 提交 Dockerfile 更改
  • D. 提交容器配置到注册表
B把"运行中容器"当前的文件系统固化成一个新镜像。
14docker savedocker export 的区别?
  • A. save 保存镜像,export 保存容器快照
  • B. save 保存容器,export 保存镜像
  • C. 两者相同
  • D. save 只保存修改层
Asave 针对镜像(保留分层、tag);export 针对容器(导出当前文件系统快照,扁平、丢失分层和元数据)。
18关于 .dockerignore 正确的是?
  • A. 只能忽略文件不能忽略目录
  • B. 只在构建镜像时生效
  • C. 可覆盖 Dockerfile 的 COPY
  • D. 必须与 Dockerfile 同目录
B它定义构建上下文里要排除的内容,只在 build 时起作用A 错(目录也能忽略);C 错(它是排除上下文而非覆盖指令);D 错(放在构建上下文根目录)。
27容器镜像最佳实践,错误的是?
  • A. 尽量用官方基础镜像
  • B. 同一 RUN 内清理缓存
  • C. 以 root 用户运行应用
  • D. 用 .dockerignore 排除无关文件
C应使用非 root用户运行(USER),降低被攻破后的危害。
30删除一个或多个镜像的命令?
  • A. docker rm
  • B. docker rmi
  • C. docker remove
  • D. docker delete
Brmi = remove image。A 是删容器;C/D 无此命令。
33容器中改了文件,想保存为新镜像,用?
  • A. docker build
  • B. docker commit
  • C. docker push
  • D. docker save
Bcommit 从容器创建镜像;build 从 Dockerfile,push 是上传,save 是导出。
40镜像标签(tag)的作用?
  • A. 唯一标识镜像
  • B. 区分镜像版本
  • C. 指定镜像大小
  • D. 设置镜像权限
Btag 区分版本/变体(如 nginx:1.21nginx:alpine);唯一标识内容的是 digest,不是 tag
42docker pull 的默认行为?
  • A. 拉取 latest 标签
  • B. 拉取所有标签
  • C. 只拉已缓存的层
  • D. 拉取后自动运行
A不指定 tag 时默认拉 :latest;拉所有标签要 -a;pull 只下载不运行。
43用于构建镜像的命令?
  • A. docker create
  • B. docker build
  • C. docker make
  • D. docker compile
Bbuild 按 Dockerfile 构建;create 是创建容器(不启动);C/D 不存在。
50镜像 digest(摘要)的作用?
  • A. 镜像的版本号
  • B. 内容可寻址标识
  • C. 下载次数
  • D. 构建时间
B对镜像内容算的 SHA256,内容变 digest 就变,可精确锁定不可变镜像(image@sha256:...)。
03

容器运行:docker run 全家桶 + 进容器

镜像跑起来就是容器。这块的核心是把 docker run 的常用参数记牢,以及"怎么进到一个正在跑的容器里看一看"。

docker run启动容器的常用参数

docker run -d # 后台运行(detached)
  --name web # 给容器起名
  -p 8080:80 # 端口映射 宿主机:容器
  -v /data/html:/usr/share/nginx/html # 挂载目录
  -e ENV=prod # 设置环境变量
  --restart=always # 随 Docker 自动启动
  --rm # 退出后自动删除容器(临时调试用)
  nginx

记忆口诀:d 后台、name 起名、p 端口、v 挂载、e 变量、restart 自启、rm 用完即焚。这正是实操题 1(启动 web-server)要用到的组合。

进容器attach 与 exec 的区别

类比:attach 像把屏幕接到容器"正在跑的那个主程序"上,看到的是它的输出,退出时一不小心会把主程序(容器)也停掉;exec 像在容器里另开一个新窗口/新终端,你进去敲命令,退出也不影响主程序。所以"进容器看看"几乎都用 exec。
docker exec -it 容器ID bash # 进入运行中的容器开一个 shell

填空题:docker exec -it <容器ID> bash 的作用 = 在运行中的容器内打开一个交互式终端(开新进程执行命令)。其中 -i 保持输入、-t 分配伪终端。

状态容器有哪些状态

官方状态:created(已创建未启动)、runningpaused(暂停)、restartingexited(已退出,口语叫 stopped)、dead没有 "suspended" 这个状态(第 10 题考点)。

对应考题第 2、10、19、34、38 题

2哪个命令可以进入正在运行的容器?
  • A. docker attach
  • B. docker exec
  • C. docker run
  • D. docker login
Bexec -it ... bash 在运行中容器里开新 shell,是标准做法。attach 虽也能连但接的是主进程、退出可能停容器;run 是启动新容器;login 是登录仓库。
10以下哪个不是 Docker 容器的状态?
  • A. running
  • B. paused
  • C. stopped
  • D. suspended
Dsuspended 不是 Docker 术语。官方状态含 created/running/paused/restarting/exited/dead;"stopped" 是对 exited 的口语说法。
19docker run --rm 的作用?
  • A. 删除镜像
  • B. 容器退出后自动删除
  • C. 删除所有同名容器
  • D. 强制删除运行中容器
B容器一退出就自动清理,适合一次性调试,不留垃圾容器。
34关于环境变量,正确的是?
  • A. 只能在 Dockerfile 定义
  • B. 只能在 run 时定义
  • C. 可通过 -e 参数设置
  • D. 重启后会丢失
C-e KEY=value(也可 --env-file);Dockerfile 用 ENV。重启同一容器变量仍在。
38让容器随 Docker 服务自动启动?
  • A. --restart=always
  • B. --auto-start
  • C. --respawn
  • D. --daemon
A--restart=always(还有 unless-stopped、on-failure);B/C/D 都不是有效参数。
04

数据持久化:容器删了数据还在吗

容器是"用完即焚"的,容器内写的数据随容器删除而消失。要让数据活下去,就得把它放到容器之外——这就是卷(Volume)和绑定挂载(Bind Mount)。

两种挂载Volume vs Bind Mount

对比Volume(卷)Bind Mount(绑定挂载)
写法-v 卷名:/容器路径-v /宿主机路径:/容器路径
由谁管理Docker 管理(在 Docker 目录下)你指定宿主机的具体目录
典型用途数据库数据等,跨容器共享、可移植开发时挂源码、配置文件
命令docker volume create/ls/rm无需创建,直接给路径

第 9 题就是考这个:-v /host:/container(冒号左边是宿主机的路径)属于 Bind Mount

生命周期卷不随容器删除而消失

类比:容器像一台笔记本,卷像一块移动硬盘。笔记本(容器)报废了,硬盘(卷)里的数据还在,可以插到新笔记本上继续用。
  • 删除容器时,命名卷默认不会被删,会一直保留,需要手动 docker volume rm 清理(否则残留)。
  • 这正是第 21 题的考点:"删容器时卷也会被删"是错误说法。

对应考题第 9、21 题

9-v /host:/container 属于哪种挂载?
  • A. Volume
  • B. Bind Mount
  • C. tmpfs
  • D. Network Mount
B冒号左边是宿主机的绝对路径 → 绑定挂载。若左边是卷名才是 Volume。
21关于 Docker 卷,错误的是?
  • A. 可在容器间共享数据
  • B. 删除容器时卷也会被删除
  • C. 可通过 docker volume 命令管理
  • D. 支持第三方存储驱动
B删容器时命名卷默认不删,需手动 docker volume rm。其余三项都对。
05

网络:容器怎么通信、怎么被访问

两个问题:① 外面怎么访问到容器(端口映射);② 容器之间、容器和宿主机用什么"网络模式"连接(网络驱动)。

端口映射-p 宿主机端口:容器端口

容器内部的端口默认外面访问不到,需要用 -p 把它映射到宿主机端口。格式恒为 host:container

docker run -p 8080:80 nginx # 访问宿主机:8080 → 进容器:80

网络驱动bridge / host / overlay / macvlan / none

驱动说明
bridge默认,容器接到虚拟网桥,有自己的网段,靠端口映射对外
host容器直接共享宿主机网络栈,无隔离、性能最好,不需端口映射
overlay跨多台主机的容器组网(Swarm/集群常用)
macvlan给容器分配独立 MAC,像物理机一样接入局域网
none不配网络

注意:vxlan 是底层封装技术,不是 Docker 的网络驱动(第 7 题坑)。

CNM(容器网络模型)三组件:Sandbox(容器的网络隔离环境)、Endpoint(连接点)、Network(一组可互通 Endpoint 的集合)。Bridge 是驱动,不是 CNM 组件(第 35 题)。

对应考题第 7、17、28、35、49 题

7以下哪个不是 Docker 网络驱动?
  • A. bridge
  • B. overlay
  • C. macvlan
  • D. vxlan
Dvxlan 是底层隧道封装协议;Docker 驱动有 bridge/host/overlay/macvlan/none/ipvlan。
17哪种网络模式性能最好?
  • A. bridge
  • B. host
  • C. overlay
  • D. none
Bhost 模式直接用宿主机网络,没有 NAT/网桥开销,性能最好(代价是无隔离)。
28-p 8080:80 的含义?
  • A. 容器 80 映射到宿主机 8080
  • B. 宿主机 80 映射到容器 8080
  • C. 暴露 8080 和 80
  • D. 两端口间负载均衡
A格式恒为 host:container,外部访问宿主机 8080 → 进入容器 80。
35不属于 CNM 组件的是?
  • A. Sandbox
  • B. Endpoint
  • C. Network
  • D. Bridge
DCNM = Sandbox + Endpoint + Network;Bridge 是网络驱动,不是抽象组件。
49--network host 的特点?
  • A. 容器与宿主机共享网络栈
  • B. 容器有独立网络栈
  • C. 无法访问外部网络
  • D. 只能与宿主机通信
Ahost 模式直接用宿主机网络,无隔离、无需端口映射。
06

观测与排错:容器到底在干嘛

出问题时靠这几条命令"看现场":看日志、看资源、看进程、看详细配置、看健康。记住每条命令"看什么"就够了。

命令地图看不同维度

命令看什么
docker logs容器的日志输出
docker stats实时资源占用(CPU/内存/网络/IO)
docker top容器内运行的进程列表
docker inspect容器/镜像的详细配置(返回 JSON)
docker ps容器列表与状态(概览)
docker system df磁盘占用(镜像/容器/卷)
  • 日志最佳实践:应用把日志输出到 stdout/stderr,由 Docker 日志驱动统一收集(第 48 题);默认日志驱动是 json-file(第 15 题)。
  • 健康检查 HEALTHCHECK:定期探测容器是否健康,失败时状态变 unhealthy(本身不重启容器);可用 docker inspect 查看健康状态(第 31 题)。

对应考题第 6、15、22、25、29、31、45、48 题

6查看容器日志的命令?
  • A. docker logs
  • B. docker events
  • C. docker inspect
  • D. docker history
Alogs 看容器日志;events 看引擎事件;inspect 看配置;history 看镜像分层历史。
15Docker 默认的日志驱动?
  • A. syslog
  • B. journald
  • C. json-file
  • D. none
C默认 json-file,日志以 JSON 写到宿主机文件,可被 docker logs 读取。
22查看磁盘使用情况的命令?
  • A. docker disk usage
  • B. docker system df
  • C. docker info
  • D. docker stats
Bsystem df 汇总镜像/容器/卷/缓存的磁盘占用;stats 看的是实时资源不是磁盘。
25docker inspect 返回什么格式?
  • A. YAML
  • B. JSON
  • C. XML
  • D. 纯文本
B返回 JSON,可用 --format 提取字段。
29查看容器资源使用情况?
  • A. docker top
  • B. docker stats
  • C. docker ps
  • D. docker info
Bstats 实时显示 CPU/内存/网络/IO;top 看进程,ps 看列表,info 看引擎信息。
31关于 HEALTHCHECK 正确的是?
  • A. 必须在 Dockerfile 定义
  • B. 只能运行时动态加
  • C. 失败后容器自动重启
  • D. 可通过 docker inspect 查看健康状态
D可在 Dockerfile 或 compose 定义;失败只把状态标 unhealthy(不自动重启);用 inspect 可查 Health.Status。
45查看容器内部运行的进程?
  • A. docker ps
  • B. docker top
  • C. docker inspect
  • D. docker exec ps aux
Bdocker top 直接列容器内进程(D 的 exec 也能实现,但标准命令是 top)。
48容器日志管理最佳实践?
  • A. 写入容器内文件
  • B. 输出到标准输出
  • C. 禁用所有日志
  • D. 定期手动清理
B输出到 stdout/stderr,由日志驱动统一采集,便于集中管理。
07

仓库 Registry:镜像存哪、从哪取

镜像造好后要分发、要复用,就需要一个集中存放的地方——这就是镜像仓库。公共的叫 Docker Hub,公司里常自建私有仓库。

概念Docker Hub 与私有仓库

  • Docker Hub = 官方公共镜像仓库,docker pull nginx 默认就是从这里拉。
  • 私有 Registry 默认监听 5000 端口(自建仓库镜像 registry)。
  • 推送流程:docker tag 加上"仓库地址前缀" → docker logindocker push(对应你做过的实操题)。
别和 daemon 端口混:2375 / 2376 是 Docker 守护进程的(非加密/TLS)管理端口,5000 才是 Registry 端口。

对应考题第 11、26 题

11Docker Hub 是什么?
  • A. 配置管理工具
  • B. 镜像仓库
  • C. 网络管理工具
  • D. 日志收集工具
B官方公共镜像仓库,存放和分发镜像。
26Docker Registry 默认端口?
  • A. 2375
  • B. 2376
  • C. 5000
  • D. 8080
CRegistry 默认 5000;2375/2376 是 daemon 的非加密/TLS 端口。
08

安全与资源限制

容器共享内核 → 隔离没 VM 强 → 所以要主动收紧权限、限制资源,别让一个容器拖垮整台机器。

安全能力(Capabilities)与非 root

  • 容器隔离弱于虚拟机(共享内核);默认 Docker 会丢弃一批高危能力,所以容器 root ≠ 宿主机完整 root。
  • 可用 --cap-add / --cap-drop 精确增减 Linux Capabilities,按需收紧权限(第 24 题)。
  • 应用尽量用非 root 用户运行(呼应第 27 题)。

资源限制 CPU 和内存

docker run --cpus=1.5 --memory=512m myapp docker update --memory=1g 容器ID # 运行后还能改

CPU 和内存可以同时限,且运行后可用 docker update 修改(第 41 题)。

对应考题第 24、41 题

24关于 Docker 安全性,正确的是?
  • A. 隔离级别与虚拟机相同
  • B. 默认容器 root 与宿主机 root 权限相同
  • C. 可通过 Linux Capabilities 限制权限
  • D. 容器无法访问宿主机资源
C用 cap-add/cap-drop 调整能力。A 错(共享内核,隔离更弱);B 错(默认丢弃了高危能力);D 错(可挂载/特权访问宿主机)。
41关于资源限制,正确的是?
  • A. 只能限 CPU
  • B. 只能限内存
  • C. 可同时限 CPU 和内存
  • D. 运行后无法修改
C--cpus--memory 可同时设;运行后可用 docker update 改。
09

编排与生态:单机之外的世界

一个容器好管,几十上百个就需要"编排工具"。先认清三个层级的工具,以及容器底层是谁在真正跑容器。

分层Compose / Swarm / 容器运行时

  • Docker Compose:用一个 yml 文件定义并运行多容器应用(单机多服务,如 web+db),一条命令全拉起(第 23 题)。
  • Docker Swarm:Docker 自带的集群编排(多主机),特性有内置服务发现、滚动更新、overlay 跨主机网络等。注意:"自动容器重启"是单机 Docker 本身的功能(--restart),不算 Swarm 特有(第 47 题)。
  • 容器运行时(runtime):真正在底层创建并运行容器的组件——containerdrunccri-okube-proxy 是 Kubernetes 的网络组件,不是容器运行时(第 20 题)。
层级类比:runc/containerd 是"发动机"(真正跑容器),Docker 引擎是"整车",Compose 是"一键发动一队车",Swarm/Kubernetes 是"调度整个车队的指挥中心"。

对应考题第 20、23、47 题

20以下哪个不是容器运行时?
  • A. containerd
  • B. runc
  • C. cri-o
  • D. kube-proxy
Dkube-proxy 是 K8s 里负责 Service 流量转发的组件;containerd/runc/cri-o 才是运行时。
23Docker Compose 的作用?
  • A. 管理多个 Docker 主机
  • B. 定义和运行多容器应用
  • C. 编排 K8s 集群
  • D. 监控容器性能
B用 compose.yml 声明多个服务/网络/卷,一条命令全部拉起(单机)。
47以下哪个不是 Docker Swarm 的特性?
  • A. 内置服务发现
  • B. 滚动更新
  • C. 自动容器重启
  • D. 跨主机网络
C自动重启是单机 Docker 的 --restart 功能,不是 Swarm 独有。
10

底层原理与运维杂项(查漏补缺)

剩下这些是零散但常考的点:存储驱动、命名空间隔离、清理命令、重启行为。归到一起扫一遍即可。

底层命名空间与存储驱动

  • PID 命名空间:让容器有独立的进程编号空间——容器内 PID 与宿主机不同、看不到宿主机进程、容器内第一个进程是 PID 1(第 44 题)。容器默认不限制进程数(pid limit),可用 --pids-limit 设上限(第 46 题)。
  • 存储驱动:overlay2 是当前推荐;aufs 不是内核原生支持(第 37 题坑);devicemapper 多用于老 CentOS/RHEL。
  • docker version / info / system info 都能显示 Docker 信息,详略不同(第 39 题选"以上都可以")。

运维重启与清理

docker restart 容器 # ≈ 先 stop 再 start
docker container prune # 删所有"已停止"容器
docker system prune # 删停止容器+无用网络+悬空镜像+缓存

system prune 不会删除"正在运行"的容器(第 32 题)。

对应考题第 16、32、36、37、39、44、46 题

16删除所有已停止容器的命令?
  • A. docker rm -f $(docker ps -aq)
  • B. docker container prune
  • C. docker system prune
  • D. 以上都是
D三者都能达到删除已停止容器的效果(A 还会连运行中的一起强删,范围更大;C 还会清网络/悬空镜像)。
32docker system prune 不会删除什么?
  • A. 停止的容器
  • B. 未使用的网络
  • C. 正在运行的容器
  • D. 悬空镜像
C不会动"正在运行"的容器;停止容器、无用网络、悬空镜像都会清。
36docker restart 与 stop/start 的区别?
  • A. restart 相当于先 stop 再 start,组合效果相同
  • B. restart 不能用于运行中容器
  • C. restart 会删除容器
  • D. 两者完全不同
Arestart 本质就是 stop 后再 start,一条命令完成。
37关于存储驱动,错误的是?
  • A. overlay2 是推荐驱动
  • B. aufs 是 Linux 内核原生支持
  • C. devicemapper 用于 CentOS/RHEL
  • D. 不同存储驱动可混用
Baufs 不在主线内核(需打补丁),已被 overlay2 取代。
39查看 Docker 服务信息的命令?
  • A. docker version
  • B. docker info
  • C. docker system info
  • D. 以上都可以
D三者都能显示 Docker 信息(version 看版本,info / system info 看引擎详情)。
44PID 命名空间隔离意味着?
  • A. 容器内进程 ID 与宿主机不同
  • B. 容器内看不到宿主机进程
  • C. 容器内 PID 1 是 init 进程
  • D. 以上都是
D独立进程编号空间,三点都成立。
46容器默认的 pid limit?
  • A. 无限制
  • B. 256
  • C. 1024
  • D. 32768
A默认不限制进程数,可用 --pids-limit 设上限(防 fork 炸弹)。

50 题答案速查 + 模块定位

自测用:盖住答案先做,再对照。格式 = 题号 · 正确项。颜色块按所属模块,方便回去精读薄弱处。

1 C
2 B
3 B
4 C
5 C
6 A
7 D
8 B
9 B
10 D
11 B
12 B
13 C
14 A
15 C
16 D
17 B
18 B
19 B
20 D
21 B
22 B
23 B
24 C
25 B
26 C
27 C
28 A
29 B
30 B
31 D
32 C
33 B
34 C
35 D
36 A
37 B
38 A
39 D
40 B
41 C
42 A
43 B
44 D
45 B
46 A
47 C
48 B
49 A
50 B