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

适用对象:Docker 初学者及运维人员

目标:通过清晰分类、详实示例,覆盖日常操作、排错、资源扩容及容器内数据操作(含 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/bashsh/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"

实战技巧 :也可以直接用重定向导入,无需拷贝文件

docker exec -i mysql57 mysql -uroot -p123456 < ./dump.sql

-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,可扩展逻辑卷,然后扩充文件系统。

    具体操作:

    1. 扩展物理卷 / 逻辑卷
    2. lvextend -L +100G /dev/mapper/docker-docker
    3. xfs_growfsresize2fs 扩展文件系统

    此操作较高级,需保证 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>

最后叮嘱 :所有删除操作(rmrmiprune)请谨慎执行,尤其是带 -f-a 参数时,务必确认数据已备份或不需要保留。

生产环境中,建议对重要数据使用 -v 持久化卷,并定期备份卷内容。

EOF

相关推荐
小尘要自信1 小时前
小米摄像头怎么接入RTSP?Go2RTC转流、EasyNVR录像与公网访问教程
人工智能·docker·开源
小羊Yveesss1 小时前
2026年外贸建站服务器怎么选?访问速度、稳定性和海外收录怎么判断
大数据·运维·服务器
Darkwanderor1 小时前
Linux进程优先级操作
linux·运维·c语言·c++
小五传输2 小时前
内外网文件交换系统产品推荐 解决隔离网络文件交换5类难题
大数据·运维·安全
AOwhisky2 小时前
Linux(CentOS)系统管理入门笔记(第一期)——从 Multics 到主流发行版
linux·运维·笔记·centos·云计算
从零开始的代码生活_2 小时前
Linux epoll 多路转接详解
linux·运维·网络·后端·tcp/ip·计算机网络·php
渣渣盟2 小时前
Linux软件管理与编辑器命令速查手册
linux·运维·编辑器
姚不倒2 小时前
F5 健康检查 Monitor 深入篇
运维·负载均衡·f5
小鹿软件办公2 小时前
通过调整编码参数使用 VLC 媒体播放器无损压缩视频方法
运维·网络·音视频