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 exportexport 导出容器文件系统(不包含镜像元数据),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 的工作流程(客户端-服务端)

  1. 用户在 CLI(docker client)执行命令。

  2. 客户端将请求发送给 dockerd(daemon)。

  3. dockerd 检查本地镜像缓存:

    • 存在 → 用镜像创建容器并运行。

    • 不存在 → 向 Registry 拉取镜像,然后创建容器。

  4. 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 -ddocker-compose downdocker-compose psdocker-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 imagescrictl pullcrictl pscrictl 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(危险:删除所有未使用镜像)

相关推荐
汪碧康几秒前
【k8s-1.34.2安装部署】二.kubernets软件、证书、配置、脚本等文件准备
云原生·容器·kubernetes·xkube·k8s管理平台·k8s安装部署·k8s dashboard
赋创小助手几秒前
超微SYS-821GE-TNHR深度测评:8卡 NVIDIA H200 风冷 AI 服务器
运维·服务器·人工智能·深度学习·计算机视觉·语言模型·自然语言处理
ldj20201 分钟前
docker-compose对比k8s
云原生·容器·kubernetes
被生活耽误的旅行者4 分钟前
由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开
运维·服务器
一介书生 `5 分钟前
轻量级服务器监 Beszel
运维·服务器
随祥9 分钟前
windows下搭建MQTT测试环境(服务器/客户端)
运维·服务器
北龙云海9 分钟前
全栈护航科研信息化:北龙云海驻场运维服务——为前沿探索提供稳定、安全的数字基座
运维·安全·运维服务·驻场运维
JHC00000010 分钟前
推特(X)平台推文自动保存(支持保存所有推文相关数据到服务器)
运维·服务器·爬虫·python·dreamweaver
不学懂K8S不改名16 分钟前
docker可视化工具(Portainer)
运维·docker·容器
啊勇的编程论坛18 分钟前
DeepSeek + Kubernetes 全栈运维赋能指南:智能化云原生运维新时代
运维·云原生·容器·kubernetes·云运维