Docker命令与知识点归纳 - 详解
1. Docker 常用命令(增删改查,分组说明)
镜像相关
docker images:列出本地镜像。docker pull <repo>:<tag>:拉取镜像。docker build -t name:tag .:根据 Dockerfile 构建镜像。docker rmi <image>:删除镜像(-f强制删除)。docker save -o file.tar <image>:保存镜像为 tar。docker load -i file.tar:从 tar 加载镜像。docker import/docker export:export导出容器文件系统(不包含镜像元数据),import从该文件生成镜像。
容器相关(常用增删改查)
docker ps:列出运行容器。docker ps -a:列出所有容器(含已退出)。docker create:创建容器但不启动。docker run [options] image [cmd]:创建并运行容器(等同 create + start)。docker start/stop/restart <container>:启动/停止/重启已创建容器。docker rm <container>:删除容器(-f强制)。docker logs <container>:查看容器日志。docker exec -it <container> /bin/bash:进入正在运行的容器(类似 ssh)。docker attach <container>:附着到容器主进程的 stdio(不常用于交互式 shell)。docker cp <src> <dest>:在宿主机与容器间复制文件。docker inspect <container|image>:查看低层元数据(JSON)。docker top <container>:查看容器内进程。docker stats(你写成 statas):实时显示容器资源使用(CPU/内存/网络)。docker rm $(docker ps -aq):批量删除容器(示例)。
网络与卷
docker network ls:列出网络。docker network create <name> [--driver bridge|overlay|host]:创建网络。docker volume create vol1:创建命名卷。docker volume ls/docker volume rm:管理卷。
2. 常用 docker run 选项解释:-i -t -d 等
-i(--interactive):保持 STDIN 打开(用于交互)。-t(--tty):分配伪终端(TTY),让 shell 显示漂亮的提示符。-it:常组合使用,进入交互式 shell。-d(--detach):后台运行容器(守护模式)。-p hostPort:containerPort:映射端口(指定端口)。-P(大写):暴露容器在 Docker 随机选择的主机端口(映射所有 EXPOSE 的端口)。--name:为容器指定名字。--rm:容器退出自动删除。-v hostPath:containerPath:绑定挂载宿主目录(或-v volname:/data使用命名卷)。
示例:
3. Dockerfile 指令与典型写法(常见指令、示例和分阶段构建)
常见指令
FROM <image> [AS name]:基础镜像。可用于多阶段构建(AS builder)。RUN <command>:在镜像构建时执行命令(安装依赖、构建等)。COPY <src> <dest>/ADD <src> <dest>:复制文件到镜像(差异见下面)。WORKDIR <dir>:设置工作目录(后续相对路径均基于此)。ENV <key>=<value>:设置环境变量。EXPOSE <port>:声明容器对外暴露端口(仅文档化作用)。CMD ["executable","param"]:容器运行时的默认命令(可被docker run <cmd>覆盖)。ENTRYPOINT ["executable","param"]:设置容器主命令,CMD作为默认参数传入。USER <user>:指定运行用户。VOLUME ["/data"]:声明挂载点(卷)。ONBUILD:触发下一阶段构建时运行(不常用)。
多阶段构建(减少镜像体积)

4. CMD 与 ENTRYPOINT 的区别(必须理解)
ENTRYPOINT:设置容器的不可变主命令(容器启动时始终执行)。CMD:提供默认参数或默认命令(如果docker run指定命令,则CMD被覆盖,或作为ENTRYPOINT的参数)。
常见用法:
使用
ENTRYPOINT固定程序,CMD提供默认参数:

如果只写
CMD ["bash"],使用docker run imagename /bin/sh会覆盖CMD。
5. COPY 与 ADD 的区别
COPY:仅做本地文件/目录的拷贝(简单、可预测)。ADD:功能更强,支持自动解压.tar.gz,且可以接受远程 URL(把远程资源下载到镜像中)。
建议:除非需要ADD的额外功能(自动解压或从 URL 下载),尽量使用COPY(语义更明确、更可控)。
6. 容器 vs 虚拟机(对比、优劣)
内核层面:容器共享宿主机内核(进程级隔离);虚拟机有独立内核(完整操作系统)。
启动速度:容器:秒级;虚拟机:分钟级(或更长)。
资源开销:容器接近原生;虚拟机有更高开销(虚拟化层)。
隔离强度:VM > 容器(容器需要额外安全机制)。
部署密度:容器可以运行上百个实例;VM 通常较少。
使用场景:容器适合微服务、CI/CD、快速部署;VM 适合需要强隔离或特殊内核/内核模块的场景。
7. Docker 的底层原理(精简要点)
Namespace(命名空间):提供资源隔离(PID、NET、MNT、IPC、UTS、USER 等)。
pid:进程隔离;net:网络隔离;mnt:文件系统视图;user:UID/GID 隔离。
cgroups(控制组):限制/计量/隔离进程组的资源(CPU、内存、I/O 等)。
UnionFS(分层文件系统):镜像采用分层,只写上层(如 overlay2)。
Container Engine(守护进程):
dockerd管理镜像、容器、网络、存储。Registry:镜像仓库(Docker Hub、私有仓库)。
8. Docker 的工作流程(客户端-服务端)
用户在 CLI(docker client)执行命令。
客户端将请求发送给
dockerd(daemon)。dockerd检查本地镜像缓存:存在 → 用镜像创建容器并运行。
不存在 → 向 Registry 拉取镜像,然后创建容器。
dockerd配置网络、卷、cgroups、命名空间等并启动进程。
简化:client -> dockerd -> image(本地/registry) -> container(runtime)
9. 容器如何对外暴露服务(-p vs -P 等)
-p hostPort:containerPort:把容器端口映射到宿主指定端口(常用)。-P:把容器所有被EXPOSE的端口随机映射到宿主端口(由 Docker 随机分配)。网络模式:
bridge(默认):容器通过桥接网络访问外部;端口映射必需。
host:容器使用宿主主机网络命名空间(端口直接暴露,无需映射)。
none:没有网络。
container:<name|id>:与已有容器共享网络命名空间。
overlay:跨主机的网络(需 Swarm 或 Kubernetes CNI/插件配合)。
注意:host 模式性能略优但隔离弱;bridge 常用于单机部署。
10. Docker 网络类型与特点(常问点)
bridge(网桥):默认,容器处于私有网络,通过 NAT 与宿主通信,需
-p映射端口。host(主机网络):容器和宿主共享网络栈,端口冲突要注意,适合高性能/低延迟场景。
overlay(覆盖网络):跨宿主机容器互联(Swarm、Kubernetes 等应用)。
macvlan:容器直接上三层网络,容器获得独立 MAC/IP(用于某些网络隔离要求)。
none:禁用网络(用于极端隔离或特定安全场景)。
11. docker-compose(做什么、常见写法)
用途:用 YAML 文件定义和运行多容器应用(服务编排、依赖、网络、卷、环境变量)。
常见文件:
docker-compose.yml示例:

常用命令:
docker-compose up -d、docker-compose down、docker-compose ps、docker-compose logs。场景:本地开发、CI 测试、小型生产环境(或与 Swarm 集成)。
12. 除了 Docker,是否用过其他容器运行时?——containerd 简介与常用命令
containerd:由 Docker 分离出的轻量级容器运行时,实现镜像传输、存储和容器生命周期管理。与 Docker 比较:
Docker = client + dockerd(包含 containerd)
containerd 更纯粹、更轻,常与 CRI(Kubernetes Container Runtime Interface)一起被 Kubernetes 使用(kubelet -> containerd)。
优点:更轻量、对 Kubernetes 更友好(直接暴露 CRI)、更适合云原生场景。
常见 CLI:
ctr images ls/ctr images pull <image>:镜像管理(ctr是 containerd 自带调试工具)。ctr containers list/ctr tasks ls:容器 & 任务查看。crictl:当 containerd 作为 CRI runtime 时,常用crictl(Kubernetes 工具),命令包括:crictl images、crictl pull、crictl ps、crictl runp等。
示例(基础):

(注:ctr 更多为低层工具,生产多由 higher-level runtimes or CRI shim 管理。)
13. 常见面试/实操要点与陷阱提示
docker exec -it是常用进入容器方式(不建议用docker attach来做 shell 登录)。构建镜像尽量减少层数、善用
.dockerignore减少上下文体积。COPY优于ADD(除非用到解压或 URL 下载)。CMD可被docker run覆盖;ENTRYPOINT更“固定”。生产建议使用
--restart策略(如--restart unless-stopped)保证容器失败自动重启。使用
docker network为服务创建自定义网络,利于服务发现与隔离。留意
docker system df/docker system prune清理磁盘占用。容器安全:使用最小权限运行(
USER指令)、限制 capability、使用 seccomp/apparmor/profile。
14. 常用命令速查表(便于记忆)
列容器:
docker ps -a启动:
docker start <id|name>停止:
docker stop <id|name>进入:
docker exec -it <container> /bin/bash查看日志:
docker logs -f <container>查看镜像:
docker images删除容器:
docker rm <container>删除镜像:
docker rmi <image>构建:
docker build -t name:tag .运行并映射端口:
docker run -d -p 8080:80 name查看资源:
docker stats查看详细信息:
docker inspect <container|image>清理无用资源:
docker system prune -a(危险:删除所有未使用镜像)

浙公网安备 33010602011771号