跳到主要内容

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查看端口

小结

本章我们学习了:

  1. Docker 命令的基本结构
  2. 镜像操作:搜索、拉取、查看、删除
  3. 容器操作:运行、停止、重启、删除
  4. 进入容器和查看日志
  5. 资源限制配置
  6. 系统清理命令

练习

  1. 拉取 nginx 镜像并运行一个容器
  2. 使用端口映射访问 nginx 服务
  3. 进入容器修改默认页面
  4. 查看容器日志和资源使用情况
  5. 清理所有停止的容器和悬空镜像