容器

Docker 全套核心命令详解

·17 分钟阅读·6485 字

汇总Docker 核心命令的常用场景、参数用法与排查示例

📋 目录

Docker 全套核心命令详解

核心概念 Docker 全套命令按运维生产场景分层整理,涵盖镜像、容器、网络、存储、信息查询等核心操作。

1. 前置基础概念

  1. 三大核心对象:镜像(image)、容器(container)、仓库(registry)
  2. 服务端:dockerd 后台守护进程;客户端:docker 命令行,通过socket通信
  3. 存储驱动:overlay2(默认),写时复制CoW机制
  4. 通用全局参数

# 指定远程docker daemon

-H tcp://192.168.122.10:2375

# 输出json格式

--format json

# 后台静默

-q 只输出ID

2. Docker 服务与信息类命令

3. 查看docker版本/环境信息


# 客户端+服务端完整版本

docker version

# 详细系统、存储、驱动、网卡、存储路径信息

docker info

# 查看docker daemon配置文件路径

cat /etc/docker/daemon.json

4. 守护进程启停(Linux systemd)


systemctl start docker

systemctl stop docker

systemctl restart docker

# 开机自启

systemctl enable docker

# 查看日志

journalctl -u docker -f

5. 镜像 Image 核心命令(拉取、构建、推送、清理)

6. 拉取镜像 pull


# 拉取指定版本,不加tag默认latest

docker pull nginx:1.25-alpine

# 私有仓库镜像

docker pull harbor.example.com/library/mysql:8.0

# 不使用缓存拉取

docker pull --no-cache xxx

7. 本地镜像列表 ls / images


# 列出本地所有镜像

docker images

# 只显示镜像ID(批量删除用)

docker images -q

# 过滤镜像(名称包含nginx)

docker images --filter=reference="*nginx*"

# 显示完整长ID

docker images --no-trunc

# 格式化输出只打印镜像名和大小

docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}"

8. 构建镜像 build(Dockerfile)


# 当前目录Dockerfile构建,指定镜像名tag

docker build -t web:v1.0 .

# 指定Dockerfile文件路径

docker build -f ./docker/Dockerfile.prod -t web-prod:v1.0 .

# 构建时传入环境变量

docker build --build-arg VERSION=1.0 -t web .

# 无缓存构建(重新下载依赖)

docker build --no-cache -t web .

# 构建完成后自动删除中间临时容器

--rm

# 禁止使用缓存

--no-cache

9. 镜像打标签 tag(推送私有仓库必备)


# 本地镜像重命名/新增标签

docker tag web:v1.0 harbor.example.com/library/web:v1.0

10. 推送镜像 push


# 先登录私有仓库

docker login harbor.example.com -u admin -p xxx

# 推送镜像到仓库

docker push harbor.example.com/library/web:v1.0

# 登出仓库

docker logout

11. 镜像删除 rmi


# 删除指定镜像(镜像名:tag)

docker rmi nginx:1.25-alpine

# 根据镜像ID删除

docker rmi 24f603581402

# 强制删除被容器引用的镜像

docker rmi -f xxx

# 批量删除所有未使用悬空镜像 <none>:<none>

docker image prune

# 清理所有无用镜像(无容器使用)

docker image prune -a

# 批量删除全部镜像(谨慎)

docker rmi $(docker images -q)

12. 镜像导出导入(离线环境)


# 导出镜像为tar包

docker save -o web-v1.tar web:v1.0

# 导入本地tar镜像

docker load -i web-v1.tar

13. 查看镜像分层历史 history


# 查看镜像每一层构建记录,排查镜像过大原因

docker history web:v1.0

# 显示完整命令不截断

docker history --no-trunc web:v1.0

14. 容器 Container 核心命令(创建、启停、进入、日志、资源)

15. 创建并启动容器 run(最复杂高频)

基础语法:docker run [参数] 镜像 [启动命令] [参数]

15.1. 常用关键参数


-d          后台守护运行

-it         交互式终端(前台进入容器)

--name      指定容器名称,方便管理

-p 宿主机端口:容器端口 端口映射

--network   指定网络(bridge/host/自定义网络)

-v 宿主机目录:容器目录 数据卷挂载

--restart   重启策略:always/unless-stopped/on-failure

--env / -e  设置环境变量

--env-file  从文件加载环境变量

--rm        容器停止自动删除(测试临时容器)

--memory    内存限制 --memory 4g

--cpus      CPU核数限制 --cpus 2

--privileged 特权容器(几乎拥有宿主机权限,生产慎用)

--user      指定容器运行用户

--add-host  自定义hosts映射

15.2. 示例


# 后台运行nginx,80端口映射,开机自启

docker run -d --name nginx-web -p 8080:80 --restart always nginx:alpine

# 交互式进入容器(测试调试),退出自动销毁

docker run -it --rm centos:7 /bin/bash

# 挂载数据目录+环境变量+资源限制

docker run -d --name mysql \

-p 3306:3306 \

-v /data/mysql:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=123456 \

--memory 8g --cpus 4 \

mysql:8.0

16. 查看容器列表 ps


# 仅运行中容器

docker ps

# 全部容器(含停止的)

docker ps -a

# 只输出容器ID

docker ps -q

# 过滤容器(按名称/镜像)

docker ps --filter "name=mysql"

# 宽格式显示IP、挂载、端口

docker ps --no-trunc

17. 启停/重启容器 start/stop/restart/kill


# 启动停止的容器

docker start mysql

# 优雅停止(10秒超时后强制杀进程)

docker stop mysql

# 立即强制杀死容器(不优雅,丢失缓存数据)

docker kill mysql

# 重启容器

docker restart mysql

# 批量停止所有容器

docker stop $(docker ps -q)

18. 删除容器 rm


# 删除停止的容器

docker rm mysql

# 强制删除运行中容器

docker rm -f mysql

# 删除容器同时清理挂载匿名卷

docker rm -v mysql

# 批量清理所有停止容器

docker container prune

# 删除全部容器(谨慎)

docker rm -f $(docker ps -aq)

19. 进入运行中容器 exec(生产标准)


# 交互式终端进入

docker exec -it mysql /bin/bash

# alpine轻量镜像无bash,用sh

docker exec -it nginx sh

# 一次性执行命令不进入交互

docker exec mysql mysql -uroot -p123456

# 指定容器内用户执行

docker exec -u www-data -it web sh

区分:docker attach 不推荐,退出会直接停止容器;exec独立会话

20. 容器日志 logs(排错核心)


# 实时持续输出日志

docker logs -f nginx

# 只看最后200行

docker logs --tail 200 nginx

# 带时间戳

docker logs -t nginx

# 查看近1小时日志

docker logs --since 1h nginx

# 查看容器崩溃前历史日志(容器已退出)

docker logs mysql

21. 宿主机 <-> 容器 文件拷贝 cp


# 容器文件下载到宿主机

docker cp mysql:/var/lib/mysql/xxx.sql /data/backup/

# 本地文件上传容器

docker cp /data/conf/my.cnf mysql:/etc/mysql/

22. 容器资源实时监控 stats


# 实时刷新所有容器CPU/内存/IO/网络

docker stats

# 只监控指定容器

docker stats mysql nginx

# 单次输出不持续刷新

docker stats --no-stream

23. 容器详情 inspect(获取IP、挂载、环境、端口)


# 输出完整json容器元数据

docker inspect mysql

# 格式化精准提取字段(脚本自动化常用)

# 获取容器IP

docker inspect --format '{{.NetworkSettings.IPAddress}}' mysql

# 获取挂载目录

docker inspect --format '{{.Mounts}}' mysql

# 获取环境变量

docker inspect --format '{{.Config.Env}}' mysql

24. 端口映射查看 port


# 查看容器所有端口映射关系

docker port nginx

25. 临时提交容器为镜像 commit(不推荐生产,仅应急)


# 将运行中容器打包成新镜像

docker commit -m "install jdk" mysql mysql-jdk:8

26. 数据卷 Volume 持久化命令

27. volume 管理(持久存储,独立生命周期)


# 列出所有数据卷

docker volume ls

# 创建命名卷

docker volume create mysql-data

# 查看卷详情(挂载路径)

docker volume inspect mysql-data

# 删除未使用匿名卷

docker volume prune

# 删除指定卷(无容器挂载才可删)

docker volume rm mysql-data

28. 挂载三种模式区分:

  1. 命名volume:-v mysql-data:/var/lib/mysql 由docker管理
  2. 绑定挂载:-v /data/mysql:/var/lib/mysql 直接映射宿主机目录
  3. 临时空目录:--tmpfs /tmp 内存临时存储,容器销毁丢失

29. 网络 Network 命令

Docker四种默认网络:bridge(默认)、host、none、container共享网络


# 查看所有网络

docker network ls

# 查看网络详情、接入容器

docker network inspect bridge

# 创建自定义隔离网络(推荐业务使用,DNS互通)

docker network create web-net

# 将运行容器加入网络

docker network connect web-net mysql

# 断开容器网络

docker network disconnect web-net mysql

# 删除未使用网络

docker network prune

# 删除自定义网络

docker network rm web-net

29.1. 网络模式说明

  1. bridge:默认桥接,独立IP,端口映射访问
  2. host:复用宿主机完整网卡,无端口隔离,性能高
  3. none:禁用所有网络,隔离容器
  4. container:xxx 共享另一个容器网络栈(sidecar场景)

30. 系统全局清理 prune(磁盘爆满必备)

一键清理无用资源,释放磁盘


# 仅清理停止容器、悬空镜像、未使用网络、匿名卷

docker system prune

# 额外清理所有未被任何容器使用的镜像

docker system prune -a

# 同时清理所有未挂载数据卷(谨慎,会删持久数据)

docker system prune -a --volumes

31. Docker Compose 多容器编排(docker-compose v2 整合进docker)

新版本无需单独安装docker-compose,直接 docker compose


# 前台启动

docker compose up

# 后台守护启动

docker compose up -d

# 查看运行容器

docker compose ps

# 实时日志全部服务

docker compose logs -f

# 重启服务

docker compose restart web

# 停止不删除容器

docker compose stop

# 停止并删除容器、网络(保留卷)

docker compose down

# 停止并删除容器+卷(数据清空,谨慎)

docker compose down -v

# 构建镜像

docker compose build

# 进入指定服务容器

docker compose exec web sh

# 扩容副本

docker compose up -d --scale web=3

32. 运维高频场景命令汇总

33. 批量清理磁盘


# 清理停止容器

docker container prune

# 清理无用镜像

docker image prune -a

# 清理无用网络

docker network prune

# 一键综合清理

docker system prune -a

34. 离线迁移镜像


docker save -o backup.tar nginx mysql

docker load -i backup.tar

35. 排查容器网络不通


# 进入容器nslookup/curl

docker exec -it web sh

# 查看容器IP

docker inspect --format '{{.NetworkSettings.IPAddress}}' web

# 查看宿主机端口映射

docker port web

36. 限制容器资源


docker run -d --memory 4G --cpus 2 nginx

37. Docker vs containerd 补充说明

k8s 1.24+废弃dockershim,底层使用containerd;

docker只是封装containerd的上层客户端,底层镜像、容器存储逻辑一致;

ctr/nerdctl为containerd原生命令,功能等价docker。

38. 面试背诵分类速记

  1. 镜像:pull images build tag push rmi save load history
  2. 容器:run ps start stop restart rm exec logs cp stats inspect port
  3. 存储:volume create ls inspect rm prune
  4. 网络:network create ls inspect connect disconnect prune
  5. 系统清理:system prune
  6. 多服务编排:docker compose up down logs exec scale
Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro