文章目录
- 核心概念
- 指令
-
- [一、守护进程(Docker Daemon)](#一、守护进程(Docker Daemon))
- 二、镜像(Image)
- 三、容器(Container)
- 四、卷管理
- 五、容器挂载卷
- 数据卷
- [Docker 容器和镜像的细节](#Docker 容器和镜像的细节)
- Docker镜像原理
- Dockerfile关键字
- [Docker Compose](#Docker Compose)
-
- 一、核心生命周期命令(最常用,必须记住)
- [二、重建 / 更新服务](#二、重建 / 更新服务)
- [三、查看状态 / 日志 / 容器信息](#三、查看状态 / 日志 / 容器信息)
- [四、进入容器 / 执行命令](#四、进入容器 / 执行命令)
- [五、管理 volume / network(通常自动管理)](#五、管理 volume / network(通常自动管理))
- 六、查看配置(非常重要)
- 七、一次性任务(很实用)
- 八、停止但保留环境

https://www.runoob.com/docker/docker-tutorial.html
核心概念

- 镜像(Image):类似 Windows 的安装包或便携版软件
- 容器(Container):类似已安装并运行的程序实例
- Dockerfile:类似软件的构建和打包说明书
指令
一、守护进程(Docker Daemon)
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动 Docker 服务 | sudo systemctl start docker | 启动后台引擎 |
| 停止 Docker 服务 | sudo systemctl stop docker | 关闭后台服务 |
| 重启 Docker 服务 | sudo systemctl restart docker | 重启引擎 |
| 查看状态 | sudo systemctl status docker | 查看 daemon 运行状态 |
| 查看守护进程信息 | docker info | 显示引擎和配置 |
| 查看 Docker 日志(Linux) | sudo journalctl -u docker -f | 实时查看日志 |
二、镜像(Image)
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看本地镜像 | docker images | 列出本地镜像 |
| 搜索镜像 | docker search nginx | 在 Docker Hub 搜索 |
| 拉取镜像 | docker pull nginx:latest | 下载镜像 |
| 删除镜像 | docker rmi nginx:latest | 删除指定镜像 |
| 删除全部镜像 | docker rmi docker images -q |
docker images -q 是列出所有镜像id |
| 容器转化为镜像 | docker commit 容器名称/ID 镜像名称:版本 |
|
| 保存镜像为压缩文件 | docker save -o myapp.tar myapp:1.0 | 导出镜像 |
| 从压缩文件加载镜像 | docker load -i myapp.tar | 导入镜像 |
| 从 dockerfile 构建镜像 | docker build -f dockerfile文件位置 -t myapp:1.0 . |
若 Dockerfile 不在当前目录,就必须用 -f 明确路径,否则会报错找不到。最后的 . 表示构建上下文(即要打包进镜像的文件所在目录) |
三、容器(Container)
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看容器 | docker ps | 仅显示运行中容器 |
| 查看全部容器 | docker ps -a | 包括已停止的容器 |
| 创建并启动容器 | docker run -d --name=容器名称 -p 8080:80 nginx | -d 表示后台运行8080:80表示 "宿主机端口:容器端口" |
| 进入容器终端 | docker exec -it mynginx /bin/bash | 进入容器交互 |
| 停止容器 | docker stop 容器ID/容器名称 | |
| 启动容器 | docker start 容器ID/容器名称 | |
| 删除容器 | docker rm 容器ID/容器名称 | 删除已停止的容器 |
| 删除所有容器 | docker rm docker ps -aq |
docker ps -aq 表示所有的容器ID |
| 查看容器信息 | docker inspect 容器ID/容器名称 | |
| 查看日志 | docker logs -f mynginx | 实时输出容器日志 |
| 导出容器为文件 | docker export mynginx -o mynginx.tar | 导出为镜像文件 |
| 查看容器资源占用 | docker stats | 实时监控 CPU/内存使用 |

四、卷管理
| 操作 | 命令 | 说明 |
|---|---|---|
| 创建卷 | docker volume create myvolume | 在 Docker 管理的宿主机空间创建卷 |
| 列出卷 | docker volume ls | 查看所有卷 |
| 查看卷详细信息 | docker volume inspect myvolume | 显示路径、挂载信息等 |
| 删除卷 | docker volume rm myvolume | 删除指定卷(确保没有容器在使用) |
| 清理未使用卷 | docker volume prune -f | 删除所有未挂载的卷 |
五、容器挂载卷
| 操作 | 命令 | 说明 |
|---|---|---|
| 容器挂载宿主机目录 | docker run -v /host/path:/container/path ubuntu | -v 将宿主机目录挂载到容器 |
| 容器挂载命名卷 | docker run -v myvolume:/data ubuntu | -v 将卷挂载到容器路径 |
| 多容器共享卷 | docker run --volumes-from 数据卷容器名称 ubuntu | --volumes-from 可以让多个容器挂载数据卷容器 |
| 临时匿名卷 | docker run -v /data ubuntu | 这里没写宿主机位置,故宿主机实际路径是 Docker 管理的默认位置,可以通过 docker inspect 查到 |
注意事项:
- 目录必须是绝对路径
- 如果目录不存在,会自动创建
- 多个容器可以挂载同一个数据卷
- macos 不方便在宿主机中挂载指定目录,并且也不方便观察现象,最好使用 linux 系统学习!
数据卷

多个容器挂载数据卷容器


注意事项:
- 容器被删除,不影响挂载卷 ,除非删除时候加了
-v选项。 - 卷内数据对挂载的所有容器同步可见。
- 容器内主动删除文件会直接影响卷里的数据。
- 数据卷容器挂掉不影响其他容器访问该卷。
Docker 容器和镜像的细节
- Docker 容器不包含完整 Linux 内核。
- 容器共享宿主机的 Linux 内核(或 macOS/Windows 上的 LinuxKit 虚拟机内核,这个内核由 Docker Desktop 提供,因为它本质就是一个虚拟机)
- Docker 容器是 进程级隔离 ,而不是完整虚拟机。
- 每个容器内运行的是普通用户空间程序(用户态)。
- 容器内的程序和库、工具、文件系统独立,但内核态调用都会走宿主机内核。
- Docker 镜像只包含文件系统层(比如 bin、lib、app 等),不包含内核,所以 Ubuntu、Alpine 镜像几十 MB 到几百 MB 就够了,而不是几 GB。
- 用户空间文件系统需要独立,但是内核是共享的
- 每个容器可能运行不同应用、依赖不同库、不同版本的工具。
- 容器必须有自己的文件系统层(bin、lib、应用代码等)来保证环境一致性。
- 如果共享用户空间文件系统,可能出现:
- 版本冲突(比如两个容器一个用 Python 3.11,一个用 Python 3.9)
- 配置污染(一个容器修改了库,另一个容器会受影响)
Docker镜像原理
思考:
- Docker 镜像本质是什么?
- 本质是一个分层的文件系统
- Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
- Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
- Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
- 由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB
Docker 镜像本质是分层的 tar 文件集合(分层的文件系统),每层包含文件系统差异。
不同平台(Linux vs Windows)可能使用不同的基础镜像层(linux/amd64 vs windows/amd64)。
Linux文件系统由 bootfs 和 rootfs 两部分组成:
bootfs:包含 bootloader(引导加载程序)和 kernel(内核)rootfs: root 文件系统,包含的就是典型 Linux 系统中的 /dev、/proc、/bin、/etc 等标准目录和文件- 不同 linux 发行版之间的
bootfs基本一样,而rootfs不同,如 ubuntu、centos 等

Dockerfile关键字
https://www.runoob.com/docker/docker-dockerfile.html
Docker Compose
https://www.runoob.com/docker/docker-compose.html
- 最新的语法是
docker compose(空格) ,而不是老的docker-compose(横杠)。 - 横杠版本已被官方标记为 deprecated。
一、核心生命周期命令(最常用,必须记住)
| 命令 | 作用 |
|---|---|
| docker compose up -d | 启动服务(后台运行) |
| docker compose up | 启动服务(前台日志) |
| docker compose down | 关闭并删除容器、网络 |
| docker compose stop | 停止容器但不删除 |
| docker compose start | 启动已存在但停止的容器 |
| docker compose restart | 重启所有服务 |
二、重建 / 更新服务
| 命令 | 用途 |
|---|---|
| docker compose up -d --build | 改了 Dockerfile 后重建镜像再起 |
| docker compose up -d --force-recreate | 强制重建所有容器(即使没变) |
| docker compose up -d service_name | 单独重建某个容器 |
| docker compose pull | 拉取最新镜像 |
实战例子:只强制重建 nginx,不动其他服务。
Bash
docker compose up -d --force-recreate nginx
三、查看状态 / 日志 / 容器信息
| 命令 | 用途 |
|---|---|
| docker compose ps | 查看当前 compose 的容器 |
| docker compose logs | 查看所有日志 |
| docker compose logs -f service_name | 追踪某个服务的日志 |
| docker compose top | 查看容器中的进程 |
四、进入容器 / 执行命令
| 命令 | 用途 |
|---|---|
| docker compose exec 容器名 bash | 进入容器终端(容器已运行) |
| docker compose run 容器名 bash | 运行并临时创建一个新容器 |
推荐:
Bash
docker compose exec myapp bash
五、管理 volume / network(通常自动管理)
| 命令 | 作用 |
|---|---|
| docker compose down -v | 删除容器 + 网络 + volumes |
| docker compose down --rmi all | 删除镜像 |
| docker compose down --volumes | 只删 volumes |
企业里一般不会轻易删 volumes。
六、查看配置(非常重要)
| 命令 | 用途 |
|---|---|
| docker compose config | 校验并展示规范化配置 |
这是开发必备命令,可以提前发现 YAML 格式错误。
七、一次性任务(很实用)
| 命令 | 用途 |
|---|---|
| docker compose run --rm service command | 运行一次性命令,用完自动删容器 |
例子:
Bash
docker compose run --rm myapp ls /app
八、停止但保留环境
| 命令 | 用途 |
|---|---|
| docker compose stop | 停止但不删容器 |
| docker compose start | 重启停止的容器 |
