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(危险:删除所有未使用镜像)

相关推荐
灰灰勇闯IT31 分钟前
Flutter 适配 OpenHarmony 全流程实战:基于 GitCode 社区项目快速落地
笔记·学习·harmonyos
00后程序员张34 分钟前
Fastlane 结合 开心上架,构建跨平台可发布的 iOS 自动化流水线实践
android·运维·ios·小程序·uni-app·自动化·iphone
YongCheng_Liang36 分钟前
从零搭建 NFS 服务:文件共享部署与使用全指南
linux·运维·服务器
2501_9219392637 分钟前
11.27ECshop+Wordprees
运维·服务器
九河云40 分钟前
智能家居生态数字化:设备联动场景化编程与用户习惯学习系统建设
人工智能·学习·智能家居
wanhengidc42 分钟前
云手机如何实现资源优化?
运维·服务器·科技·游戏·智能手机
小丁努力不焦虑44 分钟前
webserver一些问题理解
运维·服务器
Yunpiere44 分钟前
浏览器自动化:解放双手的数字助手
运维·自动化
秋深枫叶红1 小时前
嵌入式第二十八篇——数据结构——队列
数据结构·学习·算法