Docker 基础命令
本章将介绍 Docker 最常用的命令,包括镜像操作和容器操作。
Docker 命令结构
Docker 命令的基本格式:
docker [选项] 命令 [参数]
命令分类
| 分类 | 命令 | 说明 |
|---|---|---|
| 镜像管理 | docker image | 管理镜像 |
| 容器管理 | docker container | 管理容器 |
| 网络管理 | docker network | 管理网络 |
| 数据卷管理 | docker volume | 管理数据卷 |
| 系统管理 | docker system | 管理系统 |
镜像操作
搜索镜像
从 Docker Hub 搜索镜像:
# 搜索镜像
docker search nginx
# 限制结果数量
docker search --limit 5 nginx
# 过滤官方镜像
docker search --filter=is-official=true nginx
输出解释:
NAME DESCRIPTION STARS OFFICIAL
nginx Official build of Nginx. 18000 [OK]
- NAME:镜像名称
- DESCRIPTION:镜像描述
- STARS:收藏数量
- OFFICIAL:是否为官方镜像
拉取镜像
从仓库下载镜像到本地:
# 拉取最新版本
docker pull nginx
# 拉取指定版本
docker pull nginx:1.24
# 拉取指定平台
docker pull --platform linux/arm64 nginx
# 拉取所有标签
docker pull -a nginx
镜像标签格式:镜像名:标签
- 不指定标签时默认使用
latest - 标签可以是版本号、操作系统等
镜像分层:
Docker 镜像由多个只读层组成,每层代表 Dockerfile 中的一条指令:
镜像层结构(从上到下):
┌─────────────────────┐
│ 应用代码层 │ ← 最顶层
├─────────────────────┤
│ 依赖库层 │
├─────────────────────┤
│ 运行时层 │
├─────────────────────┤
│ 基础系统层 │ ← 底层
└─────────────────────┘
查看镜像
列出本地镜像:
# 列出所有镜像
docker images
docker image ls
# 显示镜像 ID
docker images -q
# 显示镜像摘要
docker images --digests
# 过滤镜像
docker images --filter "dangling=true" # 显示悬空镜像
docker images --filter "reference=nginx"
# 格式化输出
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
输出解释:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 weeks ago 141MB
nginx 1.24 4cdc5dd7eaad 3 months ago 142MB
- REPOSITORY:镜像仓库名
- TAG:镜像标签
- IMAGE ID:镜像唯一标识
- CREATED:创建时间
- SIZE:镜像大小
查看镜像详情
# 查看镜像详细信息
docker image inspect nginx
# 查看特定信息
docker image inspect --format='{{.Architecture}}' nginx
docker image inspect --format='{{.Size}}' nginx
docker image inspect --format='{{.Config.Cmd}}' nginx
查看镜像历史
# 查看镜像构建历史
docker history nginx
# 显示完整信息
docker history --no-trunc nginx
删除镜像
# 删除镜像
docker rmi nginx
# 强制删除(即使有容器使用)
docker rmi -f nginx
# 删除悬空镜像
docker image prune
# 删除所有未使用的镜像
docker image prune -a
# 批量删除
docker rmi nginx:latest nginx:1.24
悬空镜像:没有标签指向的镜像,通常由构建新镜像产生。
导出和导入镜像
# 导出镜像为 tar 文件
docker save -o nginx.tar nginx:latest
# 导出多个镜像
docker save -o images.tar nginx:latest redis:latest
# 从 tar 文件导入镜像
docker load -i nginx.tar
# 从容器创建镜像
docker commit [容器ID] my-nginx:v1
# 带说明信息
docker commit -m "自定义 Nginx" -a "作者" [容器ID] my-nginx:v1
镜像标签
# 创建镜像标签
docker tag nginx:latest my-registry/nginx:v1
# 推送到私有仓库
docker push my-registry/nginx:v1
容器操作
创建并运行容器
# 基本运行
docker run nginx
# 后台运行
docker run -d nginx
# 指定名称
docker run -d --name my-nginx nginx
# 交互式运行
docker run -it ubuntu bash
# 端口映射
docker run -d -p 8080:80 nginx
# 多端口映射
docker run -d -p 8080:80 -p 8443:443 nginx
# 随机端口映射
docker run -d -P nginx
# 环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 多个环境变量
docker run -d -e VAR1=value1 -e VAR2=value2 nginx
# 从文件读取环境变量
docker run -d --env-file .env nginx
docker run 常用选项:
| 选项 | 说明 |
|---|---|
-d | 后台运行 |
-i | 保持 STDIN 打开 |
-t | 分配伪终端 |
--name | 指定容器名称 |
-p | 端口映射 |
-P | 随机端口映射 |
-v | 挂载数据卷 |
-e | 设置环境变量 |
--env-file | 从文件读取环境变量 |
--restart | 重启策略 |
--network | 指定网络 |
--rm | 容器退出后自动删除 |
容器重启策略
# 不自动重启(默认)
docker run -d --restart=no nginx
# 总是重启
docker run -d --restart=always nginx
# 除非手动停止,否则总是重启
docker run -d --restart=unless-stopped nginx
# 失败时重启,最多重启 3 次
docker run -d --restart=on-failure:3 nginx
查看容器
# 查看运行中的容器
docker ps
docker container ls
# 查看所有容器(包括已停止)
docker ps -a
# 只显示容器 ID
docker ps -q
# 显示容器大小
docker ps -s
# 过滤容器
docker ps --filter "name=nginx"
docker ps --filter "status=running"
docker ps --filter "ancestor=nginx"
# 格式化输出
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
docker ps --format "{{.Names}}: {{.Status}}"
状态说明:
- created:已创建,未启动
- running:运行中
- paused:已暂停
- restarting:重启中
- exited:已退出
- dead:已死亡
容器操作
# 启动容器
docker start [容器名或ID]
# 停止容器
docker stop [容器名或ID]
# 重启容器
docker restart [容器名或ID]
# 暂停容器
docker pause [容器名或ID]
# 恢复容器
docker unpause [容器名或ID]
# 强制停止
docker kill [容器名或ID]
# 等待容器停止
docker wait [容器名或ID]
进入容器
# 执行命令
docker exec [容器名或ID] ls /app
# 进入交互终端
docker exec -it [容器名或ID] bash
# 以 root 用户进入
docker exec -it -u 0 [容器名或ID] bash
# 指定工作目录
docker exec -it -w /app [容器名或ID] bash
# 使用 attach 连接到容器主进程
docker attach [容器名或ID]
# 注意:Ctrl+C 会停止容器,Ctrl+P Ctrl+Q 退出但保持容器运行
查看容器日志
# 查看日志
docker logs [容器名或ID]
# 实时跟踪日志
docker logs -f [容器名或ID]
# 显示最后 100 行
docker logs --tail 100 [容器名或ID]
# 显示时间戳
docker logs -t [容器名或ID]
# 查看指定时间段的日志
docker logs --since 2024-01-01 [容器名或ID]
docker logs --since 2h [容器名或ID]
docker logs --until 2024-01-02 [容器名或ID]
查看容器信息
# 查看容器详情
docker inspect [容器名或ID]
# 查看特定信息
docker inspect --format='{{.State.Status}}' [容器名或ID]
docker inspect --format='{{.NetworkSettings.IPAddress}}' [容器名或ID]
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [容器名或ID]
# 查看容器进程
docker top [容器名或ID]
# 查看容器资源使用
docker stats [容器名或ID]
docker stats --no-stream [容器名或ID] # 不实时刷新
# 查看容器端口映射
docker port [容器名或ID]
查看容器变更
# 查看容器文件系统变更
docker diff [容器名或ID]
输出说明:
A:新增文件C:修改文件D:删除文件
文件复制
# 从容器复制文件到主机
docker cp [容器名或ID]:/app/config.yml ./config.yml
# 从主机复制文件到容器
docker cp ./config.yml [容器名或ID]:/app/config.yml
# 复制目录
docker cp ./data [容器名或ID]:/app/
删除容器
# 删除已停止的容器
docker rm [容器名或ID]
# 强制删除运行中的容器
docker rm -f [容器名或ID]
# 删除所有停止的容器
docker container prune
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除容器及其关联的卷
docker rm -v [容器名或ID]
资源限制
内存限制
# 限制内存为 512MB
docker run -d --memory="512m" nginx
# 限制内存和交换内存
docker run -d --memory="512m" --memory-swap="1g" nginx
# 设置内存软限制
docker run -d --memory-reservation="256m" nginx
CPU 限制
# 限制 CPU 配额(1.5 个 CPU)
docker run -d --cpus="1.5" nginx
# 指定 CPU 核心
docker run -d --cpuset-cpus="0,1" nginx
# 设置 CPU 权重
docker run -d --cpu-shares=512 nginx
IO 限制
# 限制读写速度
docker run -d \
--device-read-bps=/dev/sda:10mb \
--device-write-bps=/dev/sda:10mb \
nginx
# 限制读写 IOPS
docker run -d \
--device-read-iops=/dev/sda:1000 \
--device-write-iops=/dev/sda:1000 \
nginx
清理系统
# 清理未使用的容器、网络、镜像(悬空)
docker system prune
# 清理所有未使用的资源
docker system prune -a
# 包括数据卷
docker system prune -a --volumes
# 查看磁盘使用情况
docker system df
# 显示详细信息
docker system df -v
命令速查
镜像命令
| 命令 | 说明 |
|---|---|
docker pull | 拉取镜像 |
docker images | 列出镜像 |
docker rmi | 删除镜像 |
docker tag | 创建标签 |
docker save | 导出镜像 |
docker load | 导入镜像 |
docker build | 构建镜像 |
docker history | 查看镜像历史 |
docker inspect | 查看镜像详情 |
容器命令
| 命令 | 说明 |
|---|---|
docker run | 创建并运行容器 |
docker start | 启动容器 |
docker stop | 停止容器 |
docker restart | 重启容器 |
docker rm | 删除容器 |
docker ps | 列出容器 |
docker logs | 查看日志 |
docker exec | 执行命令 |
docker cp | 复制文件 |
docker stats | 资源统计 |
docker top | 查看进程 |
docker port | 查看端口 |
小结
本章我们学习了:
- Docker 命令的基本结构
- 镜像操作:搜索、拉取、查看、删除
- 容器操作:运行、停止、重启、删除
- 进入容器和查看日志
- 资源限制配置
- 系统清理命令
练习
- 拉取 nginx 镜像并运行一个容器
- 使用端口映射访问 nginx 服务
- 进入容器修改默认页面
- 查看容器日志和资源使用情况
- 清理所有停止的容器和悬空镜像