Docker 命令学习笔记:从入门到进阶的实战指南
- [Docker 命令学习笔记:从入门到进阶的实战指南](#Docker 命令学习笔记:从入门到进阶的实战指南)
-
- [🚀 一、 基础信息与帮助](#🚀 一、 基础信息与帮助)
- [📦 二、 镜像管理(Image)](#📦 二、 镜像管理(Image))
-
- [1. 获取与查看](#1. 获取与查看)
- [2. 构建与导出](#2. 构建与导出)
- [3. 删除镜像](#3. 删除镜像)
- [🐳 三、 容器管理(Container)](#🐳 三、 容器管理(Container))
-
- [1. 创建与运行(核心:`docker run`)](#1. 创建与运行(核心:
docker run)) - [2. 查看与监控](#2. 查看与监控)
- [3. 生命周期操作](#3. 生命周期操作)
- [4. 进入容器与文件交互](#4. 进入容器与文件交互)
- [1. 创建与运行(核心:`docker run`)](#1. 创建与运行(核心:
- [🌐 四、 网络与数据卷(Network & Volume)](#🌐 四、 网络与数据卷(Network & Volume))
-
- [1. 网络(Network)](#1. 网络(Network))
- [2. 数据卷(Volume)](#2. 数据卷(Volume))
- [🧹 五、 系统维护与清理](#🧹 五、 系统维护与清理)
- [🛠️ 六、 Docker Compose 常用命令](#🛠️ 六、 Docker Compose 常用命令)
-
- [💡 进阶小贴士:](#💡 进阶小贴士:)
Docker 命令学习笔记:从入门到进阶的实战指南
Docker 已经成为现代软件开发和运维的基石。掌握 Docker 命令,不仅能极大提高本地开发和测试的效率,也是构建 CI/CD 流水线的基础。本文整理了日常开发中最常用、最核心的 Docker 命令,并附带了使用示例和避坑指南。
🚀 一、 基础信息与帮助
在开始操作前,了解当前 Docker 环境的状态和寻求帮助至关重要。
- 查看版本信息 :
docker version(客户端与服务端分离显示) /docker info(显示更详细的系统级信息,如镜像数、容器数、存储驱动等)。 - 万能帮助 :
docker <命令> --help。例如docker run --help,这是学习新命令最高效的方法。
📦 二、 镜像管理(Image)
镜像是容器的基石,是一个只读模板。
1. 获取与查看
- 拉取镜像 :
docker pull <镜像名>:<标签>- 示例 :
docker pull nginx:latest(不指定标签默认拉取latest,生产环境强烈建议指定明确的版本号,如nginx:1.24)。
- 示例 :
- 查看本地镜像 :
docker images或docker image ls-a:显示所有(包含中间层镜像)。-q:只显示镜像 ID(常用于批量操作)。--filter:过滤,例如--filter "dangling=true"查看悬空镜像(无标签的临时镜像)。
2. 构建与导出
- 构建镜像 :
docker build -t <镜像名>:<标签> <上下文路径>- 示例 :
docker build -t myapp:v1.0 .(.表示当前目录,需包含 Dockerfile)。 -f:指定 Dockerfile 路径,如-f ./docker/Dockerfile。
- 示例 :
- 导出/导入镜像 (常用于离线环境迁移):
- 保存为 tar 包 :
docker save -o myapp.tar myapp:v1.0 - 从 tar 包加载 :
docker load -i myapp.tar
- 保存为 tar 包 :
3. 删除镜像
- 删除指定镜像 :
docker rmi <镜像名或ID>-f:强制删除(即使有基于该镜像运行的容器)。
- 批量清理悬空镜像 :
docker image prune
🐳 三、 容器管理(Container)
容器是镜像的运行实例,这是日常操作最频繁的部分。
1. 创建与运行(核心:docker run)
docker run 是最复杂也最重要的命令,它等价于 docker create + docker start。
常用参数组合:
bash
docker run -d \
-p 8080:80 \
-v /host/data:/container/data \
-e ENV=production \
--name my_nginx \
--restart=always \
nginx:latest
-d:后台运行(Detached mode)。-it:交互式终端(通常用于运行 bash:docker run -it ubuntu /bin/bash)。-p <宿主机端口>:<容器端口>:端口映射。-v <宿主机路径>:<容器路径>:目录挂载(持久化数据)。-e:设置环境变量。--name:为容器指定一个易读的名字。--restart=always:设置开机自启/崩溃自动重启策略。--rm:容器退出后自动删除(适合临时测试)。
2. 查看与监控
- 查看运行中的容器 :
docker ps-a:查看所有容器(包括已停止的)。-q:只显示 ID(常用于停止/删除所有容器)。-s:显示容器磁盘占用大小。
- 查看容器日志 :
docker logs <容器名或ID>-f:实时滚动查看日志(类似tail -f)。--tail 100:只看最后 100 行。
- 查看容器详细信息 :
docker inspect <容器名或ID>(返回 JSON 格式,非常详细)。 - 查看资源占用 :
docker stats(实时显示 CPU、内存、网络 IO,类似 Linux 的top)。
3. 生命周期操作
- 启动/停止/重启 :
docker start/stop/restart <容器名或ID> - 强制停止 :
docker kill <容器名或ID> - 暂停/恢复 :
docker pause/unpause <容器名或ID> - 删除容器 :
docker rm <容器名或ID>-f:强制删除运行中的容器。- 一键清理所有停止的容器 :
docker container prune
4. 进入容器与文件交互
- 进入容器 :
docker exec -it <容器名或ID> /bin/bash- 注意 :推荐使用
exec而不是attach。exec会开启一个新的终端进程,退出时不会导致容器停止。
- 注意 :推荐使用
- 宿主机与容器互拷文件 :
docker cp <源路径> <目标路径>- 示例 :
docker cp ./config.ini my_nginx:/etc/nginx/(宿主机拷入容器)
- 示例 :
🌐 四、 网络与数据卷(Network & Volume)
1. 网络(Network)
- 查看网络 :
docker network ls - 创建自定义网络 :
docker network create my_network- 注:同一自定义网络下的容器可以通过容器名直接互相通信(DNS 解析),这是微服务部署的关键。
- 将容器连接到网络 :
docker network connect my_network <容器名> - 查看网络详情 :
docker network inspect my_network
2. 数据卷(Volume)
- 查看数据卷 :
docker volume ls - 创建数据卷 :
docker volume create my_volume - 删除未使用的数据卷 :
docker volume prune- 注 :如果
docker run时使用了-v my_volume:/data(未指定宿主机绝对路径),Docker 会自动创建并管理该数据卷。
- 注 :如果
🧹 五、 系统维护与清理
长期运行 Docker 会产生大量无用数据,定期清理很重要。
-
查看磁盘占用 :
docker system df(非常直观地显示镜像、容器、数据卷占用的空间)。 -
一键清理(⚠️危险操作,请谨慎) :
bashdocker system prune -a --volumes- 警告 :这会删除所有停止的容器、所有未被使用的网络、所有悬空镜像(
-a会删除所有未被容器使用的镜像)以及所有未被使用的数据卷。执行前请确保数据已备份!
- 警告 :这会删除所有停止的容器、所有未被使用的网络、所有悬空镜像(
🛠️ 六、 Docker Compose 常用命令
虽然单独讲解 Compose 可以写一篇文章,但作为日常常用命令,记住以下几个即可:
- 启动服务 :
docker-compose up -d(-d后台运行,首次会自动拉取和构建)。 - 停止并移除服务 :
docker-compose down(会删除容器和网络,但不会删除数据卷)。 - 重启服务 :
docker-compose restart - 查看服务状态 :
docker-compose ps - 查看服务日志 :
docker-compose logs -f <服务名> - 构建或重新构建服务 :
docker-compose build或docker-compose up -d --build
💡 进阶小贴士:
- 格式化输出 :
docker ps --format "table {``{.Names}}\t{``{.Status}}\t{``{.Ports}}",可以定制化输出列,让输出更加清爽。 - 别名加速 :在
~/.bashrc或~/.zshrc中设置别名,如alias dps='docker ps --format "table {``{.Names}}\t{``{.Status}}\t{``{.Ports}}"'。 - 清理空间 :如果系统提示磁盘空间不足,优先使用
docker system df排查,再使用docker system prune进行清理。
建议将这篇文章收藏,在遇到不熟悉的 Docker 命令时随时查阅。不断实践,这些命令就会成为你的肌肉记忆。