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

发布时间:2026/7/7 5:15:04
Docker 运维常用命令手册(含扩容与实战) 适用对象Docker 初学者及运维人员目标通过清晰分类、详实示例覆盖日常操作、排错、资源扩容及容器内数据操作含exec进入数据库并导入文件。一、基础信息查看命令说明docker version查看 Docker 客户端与服务端版本信息docker info查看系统级信息镜像数、容器数、存储驱动、根目录等docker 命令 --help查看任意子命令的帮助文档示例dockerversiondockerinfodockerrun--help二、镜像管理Image1. 列出本地镜像dockerimages# 默认显示所有顶层镜像dockerimages-a# 显示所有层含中间层dockerimages-q# 只显示镜像 IDdockerimages--formattable {{.Repository}}\t{{.Tag}}\t{{.Size}}# 自定义输出格式2. 搜索远程镜像Docker Hubdockersearch nginx# 搜索 nginxdockersearch mysql--filterSTARS3000# 仅显示 stars ≥ 3000 的镜像3. 拉取镜像dockerpull nginx:latest# 拉取最新版dockerpull mysql:5.7# 拉取指定 tag4. 删除镜像dockerrmiimage_id# 删除指定镜像需无容器使用dockerrmi-fimage_id# 强制删除dockerrmi-f$(dockerimages-aq)# 删除所有镜像危险操作三、容器管理Container1. 创建并启动容器基本语法dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]常用选项选项作用--name name指定容器名称-d后台运行detach-it交互式如进入 bash-p 主机端口:容器端口端口映射-v 主机目录:容器目录挂载数据卷持久化--restartalways自动重启策略--privilegedtrue赋予特权用于 systemd 等-h hostname设置容器主机名--cpus、-m限制 CPU / 内存见扩容部分示例# 创建并运行一个交互式 centos 容器dockerrun-it--namemycentos centos:7 /bin/bash# 后台运行 nginx映射 8080 端口dockerrun-d--nameweb-p8080:80 nginx# 运行 MySQL 并挂载数据卷dockerrun-d--namemysql57-p3306:3306-v/my/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD123456mysql:5.72. 列出容器dockerps# 仅显示运行中的容器dockerps-a# 显示所有容器含已停止dockerps-n5# 显示最近创建的 5 个容器dockerps-q# 只显示容器 ID3. 启动 / 停止 / 重启 / 强制停止dockerstartcontainer_id/namedockerstopcontainer_id/namedockerrestartcontainer_id/namedockerkillcontainer_id/name# 强制停止SIGKILL4. 删除容器dockerrmcontainer_id# 删除已停止的容器dockerrm-fcontainer_id# 强制删除运行中的容器dockerrm-f$(dockerps-aq)# 删除所有容器危险dockerps-a-q|xargsdockerrm# 同上5. 进入运行中的容器重点方式一docker exec推荐新开进程dockerexec-itcontainercommand-it交互式终端常用命令/bin/bash、sh、/bin/sh示例# 进入容器 bashdockerexec-itmycentos /bin/bash# 直接在容器内执行命令不进入dockerexec-itmycentosls-l/home# 进入 MySQL 容器并执行 mysql 客户端dockerexec-itmysql57 mysql-uroot-p方式二docker attach连接到主进程dockerattachcontainer会连接到容器的主进程如 nginx 的 PID 1通常不用来执行管理操作。6. 从容器内拷贝文件宿主机 → 容器dockercp/host/file.txtcontainer:/container/path/容器 → 宿主机dockercpcontainer:/container/file.txt /host/path/示例# 将本地 dump.sql 拷贝到 MySQL 容器内dockercp./dump.sql mysql57:/tmp/# 然后在容器内执行导入dockerexec-itmysql57 mysql-uroot-p123456-esource /tmp/dump.sql实战技巧也可以直接用重定向导入无需拷贝文件docker exec -i mysql57 mysql -uroot -p123456 ./dump.sql-i保持 stdin 打开重定向本地文件四、日志与调试1. 查看容器日志dockerlogscontainer# 输出全部日志dockerlogs-fcontainer# 跟踪实时日志类似 tail -fdockerlogs--tail100-fcontainer# 仅显示最后 100 行并跟踪dockerlogs-tcontainer# 显示时间戳2. 查看容器内进程dockertopcontainer3. 查看容器详细信息元数据dockerinspectcontainer# 返回 JSON 格式包含网络、挂载、配置等dockerinspect--format{{.NetworkSettings.IPAddress}}container# 仅获取 IP4. 容器资源实时监控dockerstats# 显示所有运行中容器的 CPU、内存、网络等dockerstatscontainer# 仅查看指定容器五、数据卷Volume与持久化1. 创建数据卷dockervolume create myvolume2. 查看所有卷dockervolumels3. 挂载卷在docker run时# 使用已创建的卷dockerrun-d-vmyvolume:/app/data--nameapp alpine# 绑定挂载主机目录dockerrun-d-v/host/data:/container/data--nameapp alpine# 使用 --mount更明确的语法dockerrun-d--mountsourcemyvolume,target/app/data--nameapp alpine4. 删除卷dockervolumermvolume_namedockervolume prune# 删除所有未使用的卷六、资源限制与扩容Storage Resource Scaling1. 查看 Docker 磁盘占用dockersystemdf# 查看镜像、容器、卷、构建缓存的空间占用dockersystemdf-v# 显示详细信息逐项列出2. 清理无用数据释放磁盘空间dockersystem prune# 删除停止的容器、未被使用的网络、悬空镜像、构建缓存dockersystem prune-a# 更彻底删除所有未被使用的镜像dockerimage prune# 清理悬空镜像dockercontainer prune# 清理停止的容器dockervolume prune# 清理未使用的卷dockerbuilder prune# 清理构建缓存3. 调整容器资源限制CPU / 内存创建时指定dockerrun-d--nameapp--cpus2.0-m1gnginx--cpus允许使用的 CPU 核数可小数-m或--memory最大内存--memory-swapswap 限制默认与内存相同运行中动态调整需要 Docker 19.03dockerupdate--cpus1.5-m512mcontainer注意内存限制只能在容器启动时设置update可以调整但有些参数需重启生效。4. Docker 存储空间扩容针对数据目录Docker 默认存储在/var/lib/docker。当磁盘不足时可采取以下方案方案一将 Docker 数据目录迁移到更大的磁盘systemctl stopdockermv/var/lib/docker /new/location/dockerln-s/new/location/docker /var/lib/docker# 软链接systemctl startdocker或修改/etc/docker/daemon.json中的data-root: /new/path。方案二适用于 Overlay2如果使用 LVM可扩展逻辑卷然后扩充文件系统。具体操作扩展物理卷 / 逻辑卷lvextend -L 100G /dev/mapper/docker-dockerxfs_growfs或resize2fs扩展文件系统此操作较高级需保证 Docker 服务停止。方案三定期清理无用数据见上方 prune并合理使用卷避免无限增长。七、高级操作提交容器为镜像 导入导出1. 将容器保存为新镜像commitdockercommit-madded custom config-aauthorcontainernew_image:tag2. 导出容器为 tar 归档exportdockerexportcontainercontainer.tar3. 从 tar 导入为镜像importdockerimportcontainer.tar mynewimage:latest4. 保存镜像为 tarsave与加载loaddockersave-omyimage.tar nginx:latestdockerload-imyimage.tar八、常用运维综合示例示例 1启动 MySQL 并导入数据# 1. 运行 MySQL 容器dockerrun-d--namemysql57-p3306:3306-eMYSQL_ROOT_PASSWORDroot123 mysql:5.7# 2. 等待 MySQL 就绪可用 docker logs 查看dockerlogs-fmysql57# 看到 ready for connections 后 CtrlC 退出# 3. 拷贝本地 SQL 文件到容器dockercp./init.sql mysql57:/tmp/# 4. 执行导入方式一进入容器执行dockerexec-itmysql57bash# 在容器内执行mysql-uroot-proot123/tmp/init.sqlexit# 方式二直接通过管道导入无需拷贝dockerexec-imysql57 mysql-uroot-proot123./init.sqldockerexec-itmysqlsh-cmysql -uroot -p 数据库名 导入路径dockerexec-imysql57 mysql-uroot-p123456-vmydb./backup.sql示例 2进入正在运行的 Nginx 容器修改配置dockerexec-itweb /bin/bash# 修改 /etc/nginx/nginx.conf 或 /usr/share/nginx/html 内容# 退出后执行 nginx -s reload但容器内无信号建议重启容器或使用 docker exec 发送信号dockerexecweb nginx-sreload示例 3清理磁盘空间安全操作# 先查看占用情况dockersystemdf# 删除所有停止的容器、未使用的网络、悬空镜像、构建缓存dockersystem prune# 若确定要释放更多可加上 -a删除所有未使用的镜像dockersystem prune-a# 单独清理卷注意会删除未使用的卷可能丢失数据dockervolume prune示例 4迁移 Docker 数据目录到新磁盘假设新磁盘挂载在/mnt/dockersystemctl stopdockermkdir-p/mnt/dockerrsync-avxP/var/lib/docker/ /mnt/docker/mv/var/lib/docker /var/lib/docker.bak# 备份旧目录可选ln-s/mnt/docker /var/lib/docker systemctl startdocker# 检查确认无误后删除备份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参数时务必确认数据已备份或不需要保留。生产环境中建议对重要数据使用-v持久化卷并定期备份卷内容。EOF