文章目录
- [Docker 全方位知识体系](#Docker 全方位知识体系)
-
- [一、Docker 核心概念](#一、Docker 核心概念)
- [二、Docker 基础命令](#二、Docker 基础命令)
-
- [1. 镜像管理命令](#1. 镜像管理命令)
- [2. 容器管理命令](#2. 容器管理命令)
- [三、Docker 数据卷(Volumes)](#三、Docker 数据卷(Volumes))
-
- [1. 数据卷管理命令](#1. 数据卷管理命令)
- [2. 容器挂载数据卷](#2. 容器挂载数据卷)
- [四、Dockerfile 与自定义镜像](#四、Dockerfile 与自定义镜像)
-
- [1. Dockerfile 常用指令](#1. Dockerfile 常用指令)
- [2. 构建自定义镜像命令](#2. 构建自定义镜像命令)
- [五、Docker 网络](#五、Docker 网络)
-
- [1. 网络模式](#1. 网络模式)
- [2. 网络管理命令](#2. 网络管理命令)
- [六、Docker 仓库](#六、Docker 仓库)
- [七、Docker 系统与高级命令](#七、Docker 系统与高级命令)
- 总结
Docker 全方位知识体系
一、Docker 核心概念
| 概念 | 说明 |
|---|---|
| 镜像 | 只读的模板,包含创建容器的文件系统(如操作系统、软件、代码等)。 |
| 容器 | 镜像的运行实例,可被启动、停止、删除,彼此隔离。 |
| 仓库 | 存储镜像的场所,分为公共仓库(如 Docker Hub)和私有仓库。 |
二、Docker 基础命令
1. 镜像管理命令
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker pull <镜像名> |
从仓库拉取镜像 | -a:拉取所有标签;--platform <平台>:指定平台(如 linux/amd64) |
docker images |
列出本地镜像 | -a:显示中间镜像;-q:仅显示镜像 ID |
docker rmi <镜像ID/名> |
删除本地镜像 | -f:强制删除;--no-prune:保留未打标签的父镜像 |
docker save -o <文件> <镜像> |
将镜像保存为 tar 文件 | -o:指定输出文件 |
docker load -i <文件> |
从 tar 文件加载镜像 | -i:指定输入文件 |
docker tag <源镜像> <目标镜像> |
为镜像打标签(用于推送到仓库) | 格式:docker tag SOURCE[:TAG] TARGET[:TAG] |
docker history <镜像> |
查看镜像构建历史 | -H:人类可读格式显示大小 |
docker inspect <镜像> |
查看镜像详细信息(元数据、层信息等) | --format <模板>:格式化输出(如 {``{.Id}}) |
2. 容器管理命令
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker run <镜像> |
创建并启动容器 | -d:后台运行;-it:交互模式;--name <名称>:指定容器名; -p <主机端口:容器端口>:端口映射;-v <卷:容器路径>:挂载数据卷; --network <网络>:指定网络;--rm:容器退出后自动删除; -e <KEY=VALUE>:设置环境变量;--entrypoint <命令>:覆盖入口点 |
docker ps |
列出运行中的容器 | -a:列出所有容器(包括停止的);-q:仅显示容器 ID;-s:显示大小 |
docker stop <容器ID/名> |
停止运行中的容器 | -t <秒>:等待时间后强制停止 |
docker start <容器ID/名> |
启动已停止的容器 | |
docker restart <容器ID/名> |
重启容器 | |
docker kill <容器ID/名> |
强制停止容器 | |
docker rm <容器ID/名> |
删除容器 | -f:强制删除运行中容器;-v:删除关联的数据卷 |
docker exec -it <容器> <命令> |
在运行容器中执行命令(如 bash) |
-i:保持输入打开;-t:分配伪终端 |
docker attach <容器> |
附加到运行中的容器(查看输出或交互) | |
docker logs <容器> |
查看容器日志 | -f:实时跟随日志;--tail <行数>:显示最后 N 行 |
docker cp <源路径> <目标路径> |
容器与主机间复制文件 | 格式:docker cp CONTAINER:SRC DEST 或 docker cp SRC CONTAINER:DEST |
docker export -o <文件> <容器> |
导出容器文件系统为 tar 文件 | -o:指定输出文件 |
docker import <文件> <镜像名> |
从 tar 文件导入为镜像 | |
docker rename <旧名> <新名> |
重命名容器 | |
docker pause/unpause <容器> |
暂停/恢复容器 | |
docker port <容器> |
查看容器端口映射 | |
docker top <容器> |
查看容器内进程 | |
docker stats <容器> |
查看容器资源使用统计(CPU、内存等) | |
docker diff <容器> |
查看容器文件系统变化(新增/修改/删除的文件) | |
docker commit <容器> <镜像名> |
从容器创建新镜像(自定义镜像) | -a <作者>:指定作者;-m <信息>:提交说明;-c <指令>:应用 Dockerfile 指令 |
三、Docker 数据卷(Volumes)
1. 数据卷管理命令
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker volume create <卷名> |
创建数据卷 | --driver <驱动>:指定驱动(默认 local);--opt <key=value>:设置驱动选项 |
docker volume ls |
列出数据卷 | -q:仅显示卷名 |
docker volume inspect <卷名> |
查看数据卷详细信息 | |
docker volume rm <卷名> |
删除数据卷 | -f:强制删除 |
docker volume prune |
删除未使用的数据卷 | -a:删除所有未使用卷;--force:不提示确认 |
2. 容器挂载数据卷
-
方式 1:
-v(简洁)
docker run -v <卷名>:<容器路径> <镜像>或直接挂载主机目录:
docker run -v /主机路径:/容器路径 <镜像> -
方式 2:
--mount(更灵活,推荐生产环境)
docker run --mount source=<卷名>,target=<容器路径> <镜像>支持
readonly(只读)、type=bind(绑定主机目录)等选项。
四、Dockerfile 与自定义镜像
1. Dockerfile 常用指令
| 指令 | 说明 | 示例 |
|---|---|---|
FROM |
指定基础镜像(必须为第一条指令) | FROM ubuntu:20.04 或 FROM node:18 AS builder(多阶段构建) |
LABEL |
添加元数据(如作者、描述) | LABEL author="zhangsan" version="1.0" |
RUN |
执行命令(构建镜像时运行) | RUN apt-get update && apt-get install -y nginx |
CMD |
容器启动时默认命令(可被 docker run 参数覆盖) |
CMD ["nginx", "-g", "daemon off;"](推荐 exec 格式) |
ENTRYPOINT |
容器入口点(不可被 run 参数直接覆盖,需结合 CMD 传参) |
ENTRYPOINT ["java", "-jar"],配合 CMD ["app.jar"] |
EXPOSE |
声明容器监听端口(仅文档作用,需 -p 实际映射) |
EXPOSE 80 443 |
ENV |
设置环境变量 | ENV JAVA_HOME=/usr/lib/jvm/java-11 |
ADD |
复制文件(支持 URL、自动解压 tar) | ADD app.tar.gz /app 或 ADD https://example.com/file /app |
COPY |
复制本地文件(推荐,仅复制不做额外处理) | COPY ./src /app/src |
VOLUME |
创建数据卷挂载点 | VOLUME ["/data"] |
USER |
指定运行容器的用户 | USER nginx |
WORKDIR |
设置工作目录(后续指令的默认目录) | WORKDIR /app |
ARG |
构建时参数(可通过 --build-arg 传递) |
ARG VERSION=1.0,使用:RUN echo $VERSION |
HEALTHCHECK |
健康检查指令 | `HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost/ |
2. 构建自定义镜像命令
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker build -t <镜像名> <上下文路径> |
基于 Dockerfile 构建镜像 | -t:标记镜像名和标签;-f <Dockerfile路径>:指定 Dockerfile 文件; --build-arg <KEY=VALUE>:传递构建参数;--no-cache:不使用缓存; --platform <平台>:指定目标平台 |
五、Docker 网络
1. 网络模式
| 模式 | 说明 |
|---|---|
bridge |
默认模式,容器连接到虚拟网桥,彼此隔离,可通过端口映射访问。 |
host |
共享主机网络栈,容器直接使用主机 IP 和端口,性能最高但隔离性弱。 |
none |
无网络,容器无法与外界通信。 |
container |
共享另一个容器的网络栈(如 Sidecar 模式)。 |
| 自定义网络 | 用户创建的网络(推荐),支持 DNS 解析、容器名互访,更安全灵活。 |
2. 网络管理命令
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker network create <网络名> |
创建自定义网络 | --driver <驱动>:指定驱动(默认 bridge); --subnet <子网>:指定子网(如 172.20.0.0/16); --gateway <网关>:指定网关;--opt <key=value>:设置驱动选项 |
docker network ls |
列出网络 | -q:仅显示网络 ID |
docker network inspect <网络名> |
查看网络详细信息(包含连接的容器) | |
docker network rm <网络名> |
删除网络 | |
docker network prune |
删除未使用的网络 | --force:不提示确认 |
docker network connect <网络> <容器> |
将容器连接到网络 | --ip <IP>:指定容器 IP;--alias <别名>:设置网络别名 |
docker network disconnect <网络> <容器> |
断开容器与网络的连接 |
六、Docker 仓库
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker login <仓库地址> |
登录仓库(默认 Docker Hub) | -u <用户名>;-p <密码>;--password-stdin:从标准输入读取密码 |
docker logout |
登出仓库 | |
docker push <镜像名> |
推送镜像到仓库(需先 tag 为仓库格式) |
格式:docker push <用户名/仓库名:标签> |
docker search <关键词> |
搜索 Docker Hub 镜像 | --limit <数量>:限制结果数;--filter is-official=true:仅显示官方镜像 |
七、Docker 系统与高级命令
| 命令 | 说明 | 常用参数 |
|---|---|---|
docker system info |
查看 Docker 系统信息(版本、容器数、镜像数等) | |
docker system df |
查看磁盘使用情况(镜像、容器、数据卷占用) | |
docker system prune |
清理未使用资源(镜像、容器、网络、数据卷) | -a:清理所有未使用资源;--volumes:同时清理数据卷;--force:不提示 |
docker events |
实时监听 Docker 事件(如容器启动、停止) | --filter <条件>:过滤事件(如 event=start) |
总结
Docker 知识体系围绕镜像、容器、数据卷、网络、仓库 五大核心展开,通过上述命令可完成从镜像拉取/构建、容器运行/管理、数据持久化、网络配置到仓库交互的全流程操作。建议结合场景实践(如用 Dockerfile 构建应用、自定义网络实现服务互联)加深理解。