📑 目录
- 一、容器命令清单
- 二、核心容器命令详解
- 三、综合实战:容器化制作
- 实战一:MySQL 容器化安装
- 实战二:Redis 容器化安装
- 实战三:C++ 容器制作
- 实战四:容器资源更新
- 四、常见问题辨析
一、容器命令清单
完整命令参数与示例见 Docker 容器命令文档。
| docker create | 创建新容器但不启动 |
| docker run | 创建并运行容器 |
| docker ps | 列出容器 |
| docker logs | 查看容器日志 |
| docker attach | 连接运行中的容器 |
| docker exec | 在容器内执行命令 |
| docker start | 启动已停止的容器 |
| docker stop | 停止容器(发送 SIGTERM) |
| docker restart | 重启容器 |
| docker kill | 强制退出容器(发送 SIGKILL) |
| docker top | 查看容器进程信息 |
| docker stats | 显示资源使用情况 |
| docker container inspect | 查看容器详细信息 |
| docker port | 列出端口映射 |
| docker cp | 容器与宿主机间拷贝文件 |
| docker diff | 检查容器文件结构更改 |
| docker commit | 从容器创建新镜像 |
| docker pause | 暂停容器所有进程 |
| docker unpause | 恢复容器所有进程 |
| docker rm | 删除停止的容器 |
| docker export | 导出容器为 tar 文件 |
| docker wait | 阻塞至容器停止 |
| docker rename | 重命名容器 |
| docker container prune | 删除所有停止的容器 |
| docker update | 更新容器配置(CPU/内存限制) |
二、核心容器命令详解
docker run(创建并运行容器)
docker run 是使用频率最高的命令,OPTIONS 选项极多,完整参数说明见 docker run 参考。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 别名:docker container run
关键参数:
| -d | 后台运行容器,返回容器 ID |
| -i | 以交互模式运行容器,通常与 -t 同时使用 |
| -t | 为容器分配伪输入终端,通常与 -i 同时使用 |
| -P | 随机端口映射 |
| -p | 指定端口映射,格式:主机端口:容器端口 |
| –name | 为容器指定名称 |
| -h | 指定容器的 hostname |
| -e | 设置环境变量 |
| –cpuset-cpus | 绑定容器到指定 CPU 运行 |
| -m | 设置容器使用内存最大值 |
| –network | 指定容器的网络连接类型 |
| –link | 添加链接到另一个容器 |
| -v / –volume | 绑定一个卷 |
| –rm | shell 退出时自动删除容器 |
| –restart | 自动重启 |
# 后台启动 nginx 容器并命名
docker run –name mynginx -d nginx:latest
# 端口映射 + 目录挂载
docker run -p 80:80 -v /data:/data -d nginx:latest
docker ps(列出容器)
docker ps [OPTIONS]
# 别名:docker container ls / docker container list / docker container ps
关键参数:-a(显示所有容器含未运行的)、-f(过滤)、–format(指定模板)、-l(显示最新的)、-n(最近 N 个)、–no-trunc(不截断)、-q(仅显示容器编号)、-s(显示文件大小)。
docker logs(查看容器日志)
docker logs [OPTIONS] CONTAINER
关键参数:-f/–follow(跟踪输出)、–since(起始时间)、-t/–timestamps(显示时间戳)、-n/–tail(最新 N 条)。
docker exec(容器内执行命令)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
关键参数:-d(后台运行)、-i(保持 STDIN)、-t(伪终端)、-e(环境变量)、-u(用户)、-w(工作目录)。
💡 进入容器的常用方式:docker exec -it 容器名 bash
docker stop / kill(停止容器)
| docker stop | SIGTERM | 优雅停止 |
| docker kill | SIGKILL | 强制退出 |
docker stats(资源使用情况)
docker stats [OPTIONS] [CONTAINER...]
返回容器的 CPU%、MEM%、MEM USAGE/LIMIT、NET I/O、BLOCK I/O、PIDs 等信息。参数:-a(全部)、–no-stream(不实时更新)、–no-trunc(不截断)。
docker commit(从容器创建新镜像)
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
关键参数:-a(作者)、-c(应用 Dockerfile 指令,可修改启动命令)、-m(提交说明)、-p(暂停容器后提交)。
docker update(更新容器配置)
完整选项见 docker update 参考。
docker update [OPTIONS] CONTAINER [CONTAINER...]
关键参数:–cpus(CPU 数量)、–cpuset-cpus(使用哪些 CPU)、–memory(内存限制)、–memory-swap(交换内存)、–cpu-period/–cpu-quota(CPU 配额控制)。
其他常用命令
# 查看容器进程
docker top CONTAINER [ps OPTIONS] # 如 docker top mynginx aux
# 查看容器详细信息(docker inspect 自动识别镜像/容器)
docker container inspect [OPTIONS] CONTAINER
# 端口映射
docker port CONTAINER
# 文件拷贝(双向)
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] DEST_PATH CONTAINER:SRC_PATH
# 检查文件结构更改
docker diff CONTAINER
# 导出容器为 tar
docker export -o 文件名 CONTAINER
# 删除容器(-f 强制删除运行中容器)
docker rm [OPTIONS] CONTAINER
docker rm $(docker ps -a -q) # 删除所有停止的容器
# 删除所有停止的容器
docker container prune -f
三、综合实战:容器化制作
实战一:MySQL 容器化安装
镜像说明与可用 Tag 见 MySQL 官方镜像。
# 1. 拉取镜像
docker pull mysql:5.7
# 2. 启动容器(指定 root 密码和端口映射)
docker run –name mysql -e MYSQL_ROOT_PASSWORD=userroot -p 8200:3306 -d mysql:5.7
# 3. 进入容器登录 MySQL
docker exec -it mysql bash
mysql -p
# 4. 通过 GUI 工具(如 MySQL Workbench)远程连接宿主机 8200 端口
# 5. 释放
docker stop mysql && docker rm mysql
实战二:Redis 容器化安装
镜像说明与可用 Tag 见 Redis 官方镜像。
# 1. 拉取镜像
docker pull redis:7.0
# 2. 启动容器
docker run –name redis -p 8300:6379 -d redis:7.0
# 3. 进入容器测试
docker exec -it redis bash
redis-cli
set mykey 1
get mykey
# 4. 可视化工具:AnotherRedisDesktopManager 连接 8300 端口
# 5. 释放
docker stop redis && docker rm redis
实战三:C++ 容器制作
# 1. 拉取 Ubuntu 镜像
docker pull ubuntu:22.04
# 2. 启动交互容器
docker run –name mygcc -it ubuntu:22.04 bash
# 3. 配置国内镜像源加速
sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
# 4. 安装工具
apt update
apt install gcc vim -y
# 5. 编写 demo.c(#include <stdio.h> 输出 hello docker)
vim demo.c
# 6. 编译运行
gcc demo.c -o demo
./demo
# 7. 退出后再次进入:docker restart mygcc
# 8. 释放:docker stop mygcc && docker rm mygcc
实战四:容器资源更新
通过 docker update 动态调整运行中容器的 CPU 和内存限制。
# 1. 运行 nginx 容器
docker run -d –name mynginx5 -p 80:80 nginx:1.22.1
# 2. 查看进程及资源占用
docker top mynginx5 aux
docker stats
# 3. 限制内存为 300M(swap 为 600M)
docker update -m 300m –memory-swap 600m mynginx5
# 再次 docker stats 可见 LIMIT 变为 300MiB
# 4. 限制 CPU 至 10%
# –cpu-period 为重分配周期,–cpu-quota 为周期内可用时间,quota/period = 10%
docker update –cpu-period=100000 –cpu-quota=10000 mynginx5
# 5. 释放
docker stop mynginx5 && docker rm mynginx5
四、常见问题辨析
1. docker create / start / run 的区别
| docker create | 从镜像创建全新容器,但不立即运行 |
| docker start | 启动已停止的容器(create 后可用此启动) |
| docker run | 创建+启动的组合,立即启动新容器;本地无镜像时会自动从 Docker Hub 拉取 |
2. docker import 和 docker load 的区别
需结合 save/export 理解:
| docker save → docker load | 导出镜像为文件再导入,保存所有历史记录和元数据,文件较大 |
| docker export → docker import | 导出容器为文件再导入为新镜像,丢弃所有历史记录和元数据,仅保存容器当时状态(相当于虚拟机快照),文件较小 |
3. docker rm / rmi / prune 的差异
| docker rm | 删除一个或多个容器 |
| docker rmi | 删除一个或多个镜像 |
| docker prune | 删除不再使用的 Docker 对象(容器、镜像、卷、网络等) |


