首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker 运维常用命令手册(含扩容与实战)

Docker 运维常用命令手册(含扩容与实战)

原创
作者头像
渣渣盟
发布于 2026-10-30 09:25:17
发布于 2026-10-30 09:25:17
1120
举报
文章被收录于专栏:运维管理运维管理

Docker 运维常用命令手册(含扩容与实战)

适用对象:Docker 初学者及运维人员undefined目标:通过清晰分类、详实示例,覆盖日常操作、排错、资源扩容及容器内数据操作(含 exec 进入数据库并导入文件)。


一、基础信息查看

命令

说明

docker version

查看 Docker 客户端与服务端版本信息

docker info

查看系统级信息(镜像数、容器数、存储驱动、根目录等)

docker <命令> --help

查看任意子命令的帮助文档

示例:

代码语言:bash
复制
docker version
docker info
docker run --help

二、镜像管理(Image)

1. 列出本地镜像

代码语言:bash
复制
docker images                     # 默认显示所有顶层镜像
docker images -a                  # 显示所有层(含中间层)
docker images -q                  # 只显示镜像 ID
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"   # 自定义输出格式

2. 搜索远程镜像(Docker Hub)

代码语言:bash
复制
docker search nginx               # 搜索 nginx
docker search mysql --filter=STARS=3000   # 仅显示 stars ≥ 3000 的镜像

3. 拉取镜像

代码语言:bash
复制
docker pull nginx:latest          # 拉取最新版
docker pull mysql:5.7             # 拉取指定 tag

4. 删除镜像

代码语言:bash
复制
docker rmi <image_id>             # 删除指定镜像(需无容器使用)
docker rmi -f <image_id>          # 强制删除
docker rmi -f $(docker images -aq) # 删除所有镜像(危险操作)

三、容器管理(Container)

1. 创建并启动容器

基本语法:

代码语言:bash
复制
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用选项:

选项

作用

--name <name>

指定容器名称

-d

后台运行(detach)

-it

交互式(如进入 bash)

-p 主机端口:容器端口

端口映射

-v 主机目录:容器目录

挂载数据卷(持久化)

--restart=always

自动重启策略

--privileged=true

赋予特权(用于 systemd 等)

-h <hostname>

设置容器主机名

--cpus、-m

限制 CPU / 内存(见扩容部分)

示例:

代码语言:bash
复制
# 创建并运行一个交互式 centos 容器
docker run -it --name mycentos centos:7 /bin/bash

# 后台运行 nginx,映射 8080 端口
docker run -d --name web -p 8080:80 nginx

# 运行 MySQL 并挂载数据卷
docker run -d --name mysql57 -p 3306:3306 -v /my/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2. 列出容器

代码语言:bash
复制
docker ps                        # 仅显示运行中的容器
docker ps -a                     # 显示所有容器(含已停止)
docker ps -n 5                   # 显示最近创建的 5 个容器
docker ps -q                     # 只显示容器 ID

3. 启动 / 停止 / 重启 / 强制停止

代码语言:bash
复制
docker start <container_id/name>
docker stop <container_id/name>
docker restart <container_id/name>
docker kill <container_id/name>   # 强制停止(SIGKILL)

4. 删除容器

代码语言:bash
复制
docker rm <container_id>          # 删除已停止的容器
docker rm -f <container_id>       # 强制删除运行中的容器
docker rm -f $(docker ps -aq)     # 删除所有容器(危险)
docker ps -a -q | xargs docker rm # 同上

5. 进入运行中的容器(重点)

方式一:docker exec(推荐,新开进程)
代码语言:bash
复制
docker exec -it <container> <command>
  • -it 交互式终端
  • 常用命令:/bin/bash、sh、/bin/sh

示例:

代码语言:bash
复制
# 进入容器 bash
docker exec -it mycentos /bin/bash

# 直接在容器内执行命令(不进入)
docker exec -it mycentos ls -l /home

# 进入 MySQL 容器并执行 mysql 客户端
docker exec -it mysql57 mysql -uroot -p
方式二:docker attach(连接到主进程)
代码语言:bash
复制
docker attach <container>

会连接到容器的主进程(如 nginx 的 PID 1),通常不用来执行管理操作。

6. 从容器内拷贝文件

宿主机 → 容器:

代码语言:bash
复制
docker cp /host/file.txt <container>:/container/path/

容器 → 宿主机:

代码语言:bash
复制
docker cp <container>:/container/file.txt /host/path/

示例:

代码语言:bash
复制
# 将本地 dump.sql 拷贝到 MySQL 容器内
docker cp ./dump.sql mysql57:/tmp/

# 然后在容器内执行导入
docker exec -it mysql57 mysql -uroot -p123456 -e "source /tmp/dump.sql"

实战技巧:也可以直接用重定向导入,无需拷贝文件undefineddocker exec -i mysql57 mysql -uroot -p123456 < ./dump.sqlundefined(-i 保持 stdin 打开,< 重定向本地文件)


四、日志与调试

1. 查看容器日志

代码语言:bash
复制
docker logs <container>           # 输出全部日志
docker logs -f <container>        # 跟踪实时日志(类似 tail -f)
docker logs --tail 100 -f <container>  # 仅显示最后 100 行并跟踪
docker logs -t <container>        # 显示时间戳

2. 查看容器内进程

代码语言:bash
复制
docker top <container>

3. 查看容器详细信息(元数据)

代码语言:bash
复制
docker inspect <container>        # 返回 JSON 格式,包含网络、挂载、配置等
docker inspect --format='{{.NetworkSettings.IPAddress}}' <container>  # 仅获取 IP

4. 容器资源实时监控

代码语言:bash
复制
docker stats                      # 显示所有运行中容器的 CPU、内存、网络等
docker stats <container>          # 仅查看指定容器

五、数据卷(Volume)与持久化

1. 创建数据卷

代码语言:bash
复制
docker volume create myvolume

2. 查看所有卷

代码语言:bash
复制
docker volume ls

3. 挂载卷(在 docker run 时)

代码语言:bash
复制
# 使用已创建的卷
docker run -d -v myvolume:/app/data --name app alpine

# 绑定挂载(主机目录)
docker run -d -v /host/data:/container/data --name app alpine

# 使用 --mount(更明确的语法)
docker run -d --mount source=myvolume,target=/app/data --name app alpine

4. 删除卷

代码语言:bash
复制
docker volume rm <volume_name>
docker volume prune              # 删除所有未使用的卷

六、资源限制与扩容(Storage & Resource Scaling)

1. 查看 Docker 磁盘占用

代码语言:bash
复制
docker system df                 # 查看镜像、容器、卷、构建缓存的空间占用
docker system df -v              # 显示详细信息(逐项列出)

2. 清理无用数据(释放磁盘空间)

代码语言:bash
复制
docker system prune              # 删除停止的容器、未被使用的网络、悬空镜像、构建缓存
docker system prune -a           # 更彻底,删除所有未被使用的镜像
docker image prune               # 清理悬空镜像
docker container prune           # 清理停止的容器
docker volume prune              # 清理未使用的卷
docker builder prune             # 清理构建缓存

3. 调整容器资源限制(CPU / 内存)

创建时指定:

代码语言:bash
复制
docker run -d --name app --cpus="2.0" -m="1g" nginx
  • --cpus:允许使用的 CPU 核数(可小数)
  • -m 或 --memory:最大内存
  • --memory-swap:swap 限制(默认与内存相同)

运行中动态调整(需要 Docker 19.03+):

代码语言:bash
复制
docker update --cpus="1.5" -m="512m" <container>

注意:内存限制只能在容器启动时设置,update 可以调整,但有些参数需重启生效。

4. Docker 存储空间扩容(针对数据目录)

Docker 默认存储在 /var/lib/docker。当磁盘不足时,可采取以下方案:

  • 方案一:将 Docker 数据目录迁移到更大的磁盘
代码语言:bash
复制
  systemctl stop docker
  mv /var/lib/docker /new/location/docker
  ln -s /new/location/docker /var/lib/docker   # 软链接
  systemctl start docker

或修改 /etc/docker/daemon.json 中的 "data-root": "/new/path"。

  • 方案二(适用于 Overlay2):如果使用 LVM,可扩展逻辑卷,然后扩充文件系统。undefined具体操作:
  1. 扩展物理卷 / 逻辑卷
  2. lvextend -L +100G /dev/mapper/docker-docker
  3. xfs_growfs 或 resize2fs 扩展文件系统

此操作较高级,需保证 Docker 服务停止。

  • 方案三:定期清理无用数据(见上方 prune)并合理使用卷,避免无限增长。

七、高级操作:提交容器为镜像 & 导入导出

1. 将容器保存为新镜像(commit)

代码语言:bash
复制
docker commit -m "added custom config" -a "author" <container> <new_image:tag>

2. 导出容器为 tar 归档(export)

代码语言:bash
复制
docker export <container> > container.tar

3. 从 tar 导入为镜像(import)

代码语言:bash
复制
docker import container.tar mynewimage:latest

4. 保存镜像为 tar(save)与加载(load)

代码语言:bash
复制
docker save -o myimage.tar nginx:latest
docker load -i myimage.tar

八、常用运维综合示例

示例 1:启动 MySQL 并导入数据

代码语言:bash
复制
# 1. 运行 MySQL 容器
docker run -d --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123 mysql:5.7

# 2. 等待 MySQL 就绪(可用 docker logs 查看)
docker logs -f mysql57   # 看到 ready for connections 后 Ctrl+C 退出

# 3. 拷贝本地 SQL 文件到容器
docker cp ./init.sql mysql57:/tmp/

# 4. 执行导入(方式一:进入容器执行)
docker exec -it mysql57 bash
# 在容器内执行:
mysql -uroot -proot123 < /tmp/init.sql
exit

# 方式二:直接通过管道导入(无需拷贝)
docker exec -i mysql57 mysql -uroot -proot123 < ./init.sql

docker exec -it mysql sh -c "mysql -uroot -p 数据库名 < 导入路径"  
docker exec -i mysql57 mysql -uroot -p123456 -v mydb < ./backup.sql

示例 2:进入正在运行的 Nginx 容器修改配置

代码语言:bash
复制
docker exec -it web /bin/bash
# 修改 /etc/nginx/nginx.conf 或 /usr/share/nginx/html 内容
# 退出后执行 nginx -s reload(但容器内无信号,建议重启容器或使用 docker exec 发送信号)
docker exec web nginx -s reload

示例 3:清理磁盘空间(安全操作)

代码语言:bash
复制
# 先查看占用情况
docker system df

# 删除所有停止的容器、未使用的网络、悬空镜像、构建缓存
docker system prune

# 若确定要释放更多,可加上 -a(删除所有未使用的镜像)
docker system prune -a

# 单独清理卷(注意:会删除未使用的卷,可能丢失数据)
docker volume prune

示例 4:迁移 Docker 数据目录到新磁盘

假设新磁盘挂载在 /mnt/docker:

代码语言:bash
复制
systemctl stop docker
mkdir -p /mnt/docker
rsync -avxP /var/lib/docker/ /mnt/docker/
mv /var/lib/docker /var/lib/docker.bak   # 备份旧目录(可选)
ln -s /mnt/docker /var/lib/docker
systemctl start docker
# 检查确认无误后,删除备份:rm -rf /var/lib/docker.bak

九、常见问题排查

问题

排查与解决

容器启动后立即退出

查看日志 docker logs <container>;可能前台进程不存在,需指定执行命令

端口被占用

修改映射端口,或 netstat -tulpn 查看占用进程

磁盘空间不足

docker system df 并清理,或扩容数据目录

无法进入容器(无 bash)

尝试 /bin/sh,或使用 docker exec -it <container> sh

容器内时间错误

挂载 /etc/localtime:-v /etc/localtime:/etc/localtime:ro

容器网络不通

检查端口映射,或使用 --network host(不推荐)


十、附录:常用命令速查表

功能

命令

查看镜像

docker images

搜索镜像

docker search <name>

拉取镜像

docker pull <name:tag>

删除镜像

docker rmi <id>

运行容器

docker run [options] <image>

列出容器(运行中)

docker ps

列出所有容器

docker ps -a

停止容器

docker stop <container>

启动容器

docker start <container>

重启容器

docker restart <container>

强制停止

docker kill <container>

删除容器

docker rm <container>

进入容器(新进程)

docker exec -it <container> /bin/bash

查看日志

docker logs -f <container>

拷贝文件

docker cp <src> <container>:<dest>

查看资源使用

docker stats

查看磁盘占用

docker system df

清理无用资源

docker system prune

更新资源限制

docker update [options] <container>

查看元数据

docker inspect <container>

提交容器为镜像

docker commit <container> <image:tag>


最后叮嘱:所有删除操作(rm、rmi、prune)请谨慎执行,尤其是带 -f 或 -a 参数时,务必确认数据已备份或不需要保留。undefined生产环境中,建议对重要数据使用 -v 持久化卷,并定期备份卷内容。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • Docker 运维常用命令手册(含扩容与实战)
    • 一、基础信息查看
    • 二、镜像管理(Image)
      • 1. 列出本地镜像
      • 2. 搜索远程镜像(Docker Hub)
      • 3. 拉取镜像
      • 4. 删除镜像
    • 三、容器管理(Container)
      • 1. 创建并启动容器
      • 2. 列出容器
      • 3. 启动 / 停止 / 重启 / 强制停止
      • 4. 删除容器
      • 5. 进入运行中的容器(重点)
      • 6. 从容器内拷贝文件
    • 四、日志与调试
      • 1. 查看容器日志
      • 2. 查看容器内进程
      • 3. 查看容器详细信息(元数据)
      • 4. 容器资源实时监控
    • 五、数据卷(Volume)与持久化
      • 1. 创建数据卷
      • 2. 查看所有卷
      • 3. 挂载卷(在 docker run 时)
      • 4. 删除卷
    • 六、资源限制与扩容(Storage & Resource Scaling)
      • 1. 查看 Docker 磁盘占用
      • 2. 清理无用数据(释放磁盘空间)
      • 3. 调整容器资源限制(CPU / 内存)
      • 4. Docker 存储空间扩容(针对数据目录)
    • 七、高级操作:提交容器为镜像 & 导入导出
      • 1. 将容器保存为新镜像(commit)
      • 2. 导出容器为 tar 归档(export)
      • 3. 从 tar 导入为镜像(import)
      • 4. 保存镜像为 tar(save)与加载(load)
    • 八、常用运维综合示例
      • 示例 1:启动 MySQL 并导入数据
      • 示例 2:进入正在运行的 Nginx 容器修改配置
      • 示例 3:清理磁盘空间(安全操作)
      • 示例 4:迁移 Docker 数据目录到新磁盘
    • 九、常见问题排查
    • 十、附录:常用命令速查表
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档