未记录事实核验 · 状态:维护中

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

warning 适用范围与待维护事项

本速查面向已掌握容器、网络和持久化基础的使用者,命令采用 Bash/POSIX shell 与 Compose v2;服务名、网络及配置文件须预先存在。示例密码仅用于隔离测试,3306 映射默认可能对外开放,勿照搬生产环境。删除、清理前须核对 Docker context、资源引用和备份。MySQL 卷打包仅作安全停库后的文件级示例,不保证在线备份一致性;恢复前须确认目标卷状态、版本兼容并验证备份。清理范围还应以本机版本的 --help 为准。

Docker 常用命令速查

abstract 使用说明

本文按使用场景分类整理 Docker 常用命令,用于日常工作中快速查找。不需要从头读,遇到需要的场景直接跳过来找命令。


镜像操作

# ===== 拉取镜像 =====
docker pull mysql:8.0                          # 拉取指定版本
docker pull python:3.11-slim                   # 拉取 slim 版本

# ===== 查看镜像 =====
docker images                                  # 列出所有本地镜像
docker images mysql                            # 过滤显示 mysql 镜像
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"  # 自定义格式

# ===== 删除镜像 =====
docker rmi mysql:8.0                           # 删除指定镜像
docker rmi $(docker images -q)                 # 尝试删除所有本地镜像;被容器引用等情况可能失败(危险!)
docker image prune                             # 删除悬空镜像
docker image prune -a                          # 删除所有未使用镜像

# ===== 镜像信息 =====
docker inspect mysql:8.0                       # 查看镜像详细信息
docker history mysql:8.0                       # 查看镜像构建历史

# ===== 镜像导入导出 =====
docker save mysql:8.0 -o mysql_8.0.tar         # 导出为文件
docker save mysql:8.0 | gzip > mysql.tar.gz    # 导出并压缩
docker load -i mysql_8.0.tar                   # 导入镜像
docker load -i mysql.tar.gz                    # 导入压缩镜像

# ===== 镜像标签 =====
docker tag mysql:8.0 my-registry/mysql:8.0     # 给镜像打标签
docker push my-registry/mysql:8.0              # 推送到仓库

# ===== 镜像构建 =====
docker build -t myapp:v1.0 .                   # 构建镜像
docker build -f Dockerfile.prod -t myapp .     # 指定 Dockerfile
docker build --no-cache -t myapp .             # 不使用缓存构建
docker build --progress=plain -t myapp .       # 显示详细构建日志

容器操作

启动容器

# 最常用的启动方式(仅作隔离测试示例)
# -d 后台运行,--name 命名;-e 设置环境变量;-p 设置端口映射
# 两个 -v 分别设置 Volume 挂载和 Bind Mount;--restart 设置重启策略
# root123 是示例密码;3306:3306 默认可能绑定所有宿主机接口
 docker run -d --name mysql \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -p 3306:3306 \
  -v mysql-data:/var/lib/mysql \
  -v "$(pwd)/conf:/etc/mysql/conf.d" \
  --restart unless-stopped \
  mysql:8.0

# 交互式运行(进入容器终端)
docker run -it --rm ubuntu:22.04 bash          # --rm 退出后自动删除

# 运行一次性任务
docker run --rm python:3.11-slim python -c "print('hello')"

# 带资源限制
docker run -d --memory="2g" --cpus="1.5" nginx

# 指定网络
docker run -d --network my-net nginx

# 指定用户
docker run -d --user 1000:1000 nginx           # 仅在镜像目录权限与启动配置适配该 UID/GID 时使用,否则可能启动失败

容器生命周期

# 查看容器
docker ps                                      # 运行中的容器
docker ps -a                                   # 所有容器(包括已停止)
docker ps -q                                   # 只显示 ID
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# 停止/启动/重启
docker stop mysql                              # 发送停止信号(默认 SIGTERM,可配置),超时后发送 SIGKILL
docker kill mysql                              # 强制停止(SIGKILL)
docker start mysql                             # 启动已停止的容器
docker restart mysql                           # 重启容器
docker pause mysql                             # 暂停容器
docker unpause mysql                           # 恢复暂停的容器

# 删除容器
docker rm mysql                                # 删除已停止的容器
docker rm -f mysql                             # 强制删除(包括运行中的)
docker container prune                         # 删除所有已停止的容器
docker rm $(docker ps -aq)                     # 尝试删除所有容器;运行中的容器会报错,列表为空时也会报错

进入容器和执行命令

# 进入容器
docker exec -it mysql bash                     # 进入 bash(推荐)
docker exec -it mysql /bin/sh                  # 进入 sh(bash 不存在时用)
docker exec -u root -it mysql bash             # 以 root 进入

# 在容器内执行命令
docker exec mysql mysql -uroot -proot123 -e "SHOW DATABASES;"
docker exec mysql ps aux
docker exec mysql ls /var/lib/mysql

# 附加到容器主进程(用 Ctrl+P Ctrl+Q 退出,不要用 Ctrl+C)
docker attach mysql

容器信息

# 查看容器详情
docker inspect mysql                           # 全部信息(JSON)
docker inspect --format '{{range $name, $net := .NetworkSettings.Networks}}{{$name}}: {{$net.IPAddress}} {{end}}' mysql  # 各网络的 IPv4 地址
docker inspect --format '{{.State.Status}}' mysql               # 状态

# 查看日志
docker logs mysql                              # 全部日志
docker logs -f mysql                           # 实时跟踪
docker logs --tail 100 mysql                   # 最后 100 行
docker logs --tail 100 -f mysql                # 最后 100 行并跟踪
docker logs --since 1h mysql                   # 最近 1 小时的日志
docker logs -t mysql                           # 带时间戳

# 资源监控
docker stats                                   # 所有容器实时资源
docker stats mysql redis                       # 指定容器
docker top mysql                               # 容器内的进程

# 端口映射
docker port mysql                              # 查看端口映射情况

文件操作

# 复制文件
docker cp mysql:/etc/mysql/my.cnf ./my.cnf     # 容器 → 宿主机
docker cp ./my.cnf mysql:/etc/mysql/conf.d/    # 宿主机 → 容器

# 查看文件系统变化
docker diff mysql

Docker Compose 操作

# ===== 启动 =====
docker compose up -d                           # 后台启动所有服务
docker compose up -d mysql redis               # 只启动指定服务
docker compose up -d --build                   # 重新构建后启动
docker compose up -d --force-recreate          # 强制重新创建容器
docker compose -f docker-compose.prod.yml up -d  # 指定文件

# ===== 停止 =====
docker compose down                            # 停止并删除容器和网络
docker compose down -v                         # 同时删除 Volume
docker compose stop                            # 只停止容器(不删除)
docker compose restart                         # 重启所有服务
docker compose restart mysql                   # 重启指定服务

# ===== 查看 =====
docker compose ps                              # 服务状态
docker compose logs -f                         # 所有服务日志
docker compose logs -f mysql                   # 指定服务日志
docker compose logs --tail 50 kafka            # 最后 50 行
docker compose top                             # 所有容器进程

# ===== 操作 =====
docker compose exec mysql bash                 # 进入容器
docker compose exec mysql mysql -uroot -p      # 执行命令
docker compose run --rm app python script.py   # 临时运行

# ===== 构建 =====
docker compose build                           # 构建所有镜像
docker compose build app                       # 构建指定服务镜像
docker compose build --no-cache app            # 不使用缓存构建

# ===== 配置验证 =====
docker compose config                          # 验证并显示配置

镜像仓库

# 登录/登出
docker login                                   # 登录 Docker Hub
docker login registry.aliyuncs.com            # 登录阿里云
docker logout                                  # 登出

# 搜索镜像
docker search mysql                            # 搜索
docker search --filter is-official=true mysql  # 只看官方镜像
docker search --limit 5 kafka                  # 限制条数

网络操作

# 查看网络
docker network ls                              # 列出所有网络
docker network inspect my-network             # 查看网络详情

# 创建/删除网络
docker network create data-net                 # 创建 bridge 网络
docker network inspect host                  # 查看已有 host 网络;使用时指定 --network host,不另建第二个 host 网络
docker network rm data-net                     # 删除网络
docker network prune                           # 删除所有未使用网络

# 容器和网络
docker network connect data-net mysql          # 将容器加入网络
docker network disconnect data-net mysql       # 从网络中移除容器

存储(Volume)操作

# 查看 Volume
docker volume ls                               # 列出所有 Volume
docker volume inspect mysql-data               # 查看 Volume 详情

# 创建/删除 Volume
docker volume create mysql-data                # 创建 Volume
docker volume rm mysql-data                    # 删除 Volume
docker volume prune                            # 现代 Docker 默认清理未使用的匿名 Volume;旧版行为须查本机帮助(危险!)

# Volume 备份(文件级示例;MySQL 须安全停库后执行,在线备份需采用数据库一致性方案)
docker run --rm \
  -v mysql-data:/source \
  -v "$(pwd):/backup" \
  busybox \
  tar czf /backup/mysql-backup.tar.gz -C /source .

# Volume 恢复(停止使用目标卷的服务;确认版本兼容,避免直接覆盖现有数据,并验证恢复结果)
docker run --rm \
  -v mysql-data:/target \
  -v "$(pwd):/backup" \
  busybox \
  tar xzf /backup/mysql-backup.tar.gz -C /target

系统维护

# 查看 Docker 系统信息
docker info                                    # 系统信息
docker version                                 # 版本信息

# 磁盘使用
docker system df                               # 磁盘使用概览

# 清理
docker system prune                            # 清理未使用的资源
docker system prune -a                         # 清理所有未使用(包括有标签的镜像)
docker system prune -a --volumes               # 清理停止的容器、未使用网络/镜像、构建缓存及未使用匿名卷;非全部资源,确认后执行

数据工程常用组合命令

# 等待 MySQL 响应后尝试连接;ping 成功不证明凭据有效或业务初始化完成,循环无超时
until docker exec mysql mysqladmin ping -h localhost -uroot -proot123 --silent; do
    echo "等待 MySQL 启动..."
    sleep 2
done
echo "MySQL 已响应,接下来尝试认证连接"
docker exec -it mysql mysql -uroot -proot123

# 批量停止并删除所有容器
docker stop $(docker ps -q) && docker rm $(docker ps -aq)

# 查找占用某端口的容器
docker ps --format "table {{.Names}}\t{{.Ports}}" | grep 3306

# 快速重启某个服务并查看日志
docker compose restart kafka && docker compose logs -f kafka

# 重新构建单个服务(不重启其他服务)
docker compose up -d --build --no-deps app

# 清理构建缓存
docker builder prune

# 查看所有容器的网络配置
docker inspect $(docker ps -q) --format '{{.Name}}: {{.NetworkSettings.Networks}}'

参数速查

docker run 常用参数

参数 作用
-d 后台运行
-it 交互式终端
--rm 退出后自动删除
--name xxx 指定容器名
-p 8080:80 端口映射(宿主机:容器)
-v /host:/cont Bind Mount
-v vol-name:/cont Volume 挂载
-e KEY=VALUE 设置环境变量
--env-file .env 从文件读取环境变量
--network net 指定网络
--restart always 总是重启
--restart unless-stopped 手动停止外一直重启
--memory="2g" 限制内存
--cpus="1.5" 限制 CPU
--user 1000:1000 指定运行用户

重启策略

策略 说明
no 不重启(默认)
always 总是重启,包括 Docker 启动时
on-failure 仅在退出码非 0 时重启
unless-stopped 除非手动 stop,否则一直重启

相关文档