首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >三、Docker常用命令

三、Docker常用命令

作者头像
IvanCodes
发布2025-09-28 11:07:39
发布2025-09-28 11:07:39
11300
代码可运行
举报
运行总次数:0
代码可运行

作者:IvanCodes 日期:2025年7月9日 专栏:Docker教程

Docker 通过镜像 (Image) 和容器 (Container) 两个核心概念,极大地简化了应用的构建、分发和运行。掌握相关的命令行工具是高效使用 Docker 的关键。

思维导图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、Docker 镜像 (Image) 常用命令

镜像是一个只读的模板,包含了运行应用程序所需的文件系统、库、依赖和代码。容器是镜像的一个可运行实例。

1. 搜索镜像 (search)

从 Docker Hub (默认的公共镜像仓库) 搜索可用的镜像。

代码语言:javascript
代码运行次数:0
运行
复制
docker search <image_name>

代码案例: 搜索所有与 nginx 相关的镜像。

代码语言:javascript
代码运行次数:0
运行
复制
docker search nginx
2. 拉取镜像 (pull)

从仓库下载一个镜像到本地。

代码语言:javascript
代码运行次数:0
运行
复制
docker pull <image_name>[:tag]
  • [:tag]: 可选。指定镜像的版本标签。如果不指定,默认拉取 latest 标签。

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 拉取最新版本的 Ubuntu 镜像
docker pull ubuntu

# 拉取指定版本的 Redis 镜像
docker pull redis:6.2
在这里插入图片描述
在这里插入图片描述
3. 查看本地镜像 (images / image ls)

列出本地已存在的所有镜像。

代码语言:javascript
代码运行次数:0
运行
复制
docker images
# 或者
docker image ls

代码案例:

在这里插入图片描述
在这里插入图片描述
4. 删除本地镜像 (rmi / image rm)

删除一个或多个本地镜像。

代码语言:javascript
代码运行次数:0
运行
复制
docker rmi <image_name>[:tag] | <image_id>
  • 如果有正在运行的容器是基于该镜像创建的,需要先停止并删除这些容器才能成功删除镜像。
  • -f--force: 强制删除镜像 (即使有容器在使用它,但不推荐)。

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 通过名称和标签删除
docker rmi redis:6.2

# 通过镜像ID删除 (假设ID是 edbdd97bf78b)
docker rmi edbdd97bf78b

# 删除多个镜像
docker rmi ubuntu:latest redis:latest
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 查看镜像详细信息 (inspect)

以 JSON 格式返回镜像的详细元数据。

代码语言:javascript
代码运行次数:0
运行
复制
docker inspect <image_name>[:tag] | <image_id>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker inspect ubuntu:latest
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6. 查看镜像历史 (history)

显示镜像的构建历史,即组成该镜像的每一层 (layer)。

代码语言:javascript
代码运行次数:0
运行
复制
docker history <image_name>[:tag] | <image_id>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker history nginx:latest
在这里插入图片描述
在这里插入图片描述
7. 保存镜像为 tar 文件 (save)

将一个或多个本地镜像打包成一个 .tar 归档文件,方便离线传输。

代码语言:javascript
代码运行次数:0
运行
复制
docker save -o <output_filename.tar> <image_name>[:tag]

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker save -o my_nginx_image.tar nginx:latest
8. 从 tar 文件加载镜像 (load)

从一个 .tar 归档文件加载镜像到本地。

代码语言:javascript
代码运行次数:0
运行
复制
docker load -i <input_filename.tar>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker load -i my_nginx_image.tar
9. 为镜像打标签 (tag)

为已存在的镜像创建一个新的标签 (相当于一个别名)。这在推送到不同仓库或重命名时非常有用。

代码语言:javascript
代码运行次数:0
运行
复制
docker tag <source_image>[:tag] <target_image>[:tag]

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 将本地的 nginx:latest 标记为 myrepo/mynginx:1.0
docker tag nginx:latest myrepo/mynginx:1.0
# 删除这个打了标签的镜像
[root@ivan01 ~]# docker rmi myrepo/mynginx:1.0
Untagged: myrepo/mynginx:1.0
在这里插入图片描述
在这里插入图片描述

二、Docker 容器 (Container) 常用命令

容器是镜像的可运行实例。你可以创建、启动、停止、移动和删除容器。

1. 创建并运行容器 (run)

这是一个非常强大的复合命令,如果本地没有指定镜像,它会先自动 pull,然后基于该镜像创建一个新容器并启动它。

代码语言:javascript
代码运行次数:0
运行
复制
docker run [OPTIONS] <image_name>[:tag] [COMMAND] [ARG...]
  • -d--detach: 后台运行容器 (守护式容器)。
  • -i--interactive: 交互式操作 (保持 STDIN 打开)。
  • -t--tty: 分配一个伪终端。通常 -it 一起使用。
  • --name <container_name>: 为容器指定一个名称。
  • -p <host_port>:<container_port>: 端口映射,将主机的端口映射到容器的端口。
  • -v <host_path>:<container_path>: 挂载数据卷,将主机的目录挂载到容器的目录。
  • --rm: 容器退出时自动删除。
  • -e <KEY=VALUE>: 设置环境变量。

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 以后台模式运行一个Nginx容器,并将主机的8080端口映射到容器的80端口
docker run -d -p 8080:80 --name my-web-server nginx:latest

# 交互式地进入一个Ubuntu容器的bash shell
docker run -it --rm ubuntu:latest /bin/bash
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 查看正在运行的容器 (ps / container ls)

列出当前正在运行的容器。

代码语言:javascript
代码运行次数:0
运行
复制
docker ps
# 或者
docker container ls
  • -a--all: 列出所有容器 (包括已停止的)。

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 查看所有容器
docker ps -a
在这里插入图片描述
在这里插入图片描述
3. 停止容器 (stop)

优雅地停止一个或多个正在运行的容器。

代码语言:javascript
代码运行次数:0
运行
复制
docker stop <container_name | container_id>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker stop my-web-server
在这里插入图片描述
在这里插入图片描述
4. 启动已停止的容器 (start)

启动一个已存在但已停止的容器。

代码语言:javascript
代码运行次数:0
运行
复制
docker start <container_name | container_id>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker start my-web-server
5. 重启容器 (restart)
代码语言:javascript
代码运行次数:0
运行
复制
docker restart <container_name | container_id>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker restart my-web-server
6. 进入正在运行的容器 (exec / attach)
  • exec: 在正在运行的容器中执行一个新命令 (最常用)。
  • attach: 直接连接到容器的主进程 (PID 1) 的输入/输出流。

exec 语法 (推荐):

代码语言:javascript
代码运行次数:0
运行
复制
docker exec [OPTIONS] <container_name | container_id> <COMMAND>

代码案例 (进入容器的shell):

代码语言:javascript
代码运行次数:0
运行
复制
docker exec -it my-web-server /bin/bash
在这里插入图片描述
在这里插入图片描述
7. 删除容器 (rm / container rm)

删除一个或多个已停止的容器。

代码语言:javascript
代码运行次数:0
运行
复制
docker rm <container_name | container_id>
  • -f--force: 强制删除一个正在运行的容器。

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 首先停止容器
docker stop my-web-server
# 然后删除
docker rm my-web-server
在这里插入图片描述
在这里插入图片描述
8. 查看容器日志 (logs)

获取容器的标准输出和标准错误日志。

代码语言:javascript
代码运行次数:0
运行
复制
docker logs [OPTIONS] <container_name | container_id>
  • -f--follow: 实时跟踪日志输出。
  • --tail <number>: 只显示最后N行日志。

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 实时查看my-web-server的日志
docker logs -f my-web-server
9. 查看容器详细信息 (inspect)

以 JSON 格式返回容器的详细配置和状态信息。

代码语言:javascript
代码运行次数:0
运行
复制
docker inspect <container_name | container_id>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
docker inspect my-web-server
在这里插入图片描述
在这里插入图片描述
10. 从容器复制文件到主机 (cp)
代码语言:javascript
代码运行次数:0
运行
复制
docker cp <container_name | container_id>:<container_path> <host_path>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 将容器my-web-server中的/etc/nginx/nginx.conf文件复制到主机的当前目录
docker cp my-web-server:/etc/nginx/nginx.conf .
在这里插入图片描述
在这里插入图片描述
11. 从主机复制文件到容器 (cp)
代码语言:javascript
代码运行次数:0
运行
复制
docker cp <host_path> <container_name | container_id>:<container_path>

代码案例:

代码语言:javascript
代码运行次数:0
运行
复制
# 将主机的index.html文件复制到容器my-web-server的/usr/share/nginx/html/目录下
docker cp index.html my-web-server:/usr/share/nginx/html/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:

  • 镜像 (Image): search, pull, images, rmi, inspect, save, load, tag
  • 容器 (Container): run, ps, stop, start, restart, exec, rm, logs, inspect, cp

Docker 命令行练习题 (共12道)

请为以下每个任务编写相应的Docker命令。

题目:

  1. 从 Docker Hub 搜索与 mysql 相关的官方镜像 (通常 STARS 数最高且 OFFICIAL[OK])。
  2. 拉取 mysql 镜像的 8.0 版本。
  3. 查看你本地现在拥有的所有镜像。
  4. 以后台模式运行一个 MySQL 8.0 容器,为其命名为 my-mysql-db,并设置MySQL的root用户密码为 MySecretPwd123 (提示:通过环境变量 MYSQL_ROOT_PASSWORD 设置)。
  5. 列出所有正在运行的容器。
  6. 列出所有容器,包括已经停止的。
  7. 查看 my-mysql-db 容器的实时日志。
  8. 进入正在运行的 my-mysql-db 容器,并启动一个 bash shell。
  9. 将你本地的一个名为 backup.sql 的SQL文件复制到 my-mysql-db 容器的 /tmp/ 目录下。
  10. 停止名为 my-mysql-db 的容器。
  11. 删除已停止的 my-mysql-db 容器。
  12. 删除你本地的 mysql:8.0 镜像。

答案与解析:

  1. 搜索 mysql 镜像:
代码语言:javascript
代码运行次数:0
运行
复制
docker search mysql
  • 解析: docker search 是用于在Docker Hub上查找镜像的命令。
  1. 拉取 mysql:8.0 镜像:
代码语言:javascript
代码运行次数:0
运行
复制
docker pull mysql:8.0
  • 解析: docker pull 用于下载镜像,<image_name>:<tag> 格式指定了镜像名和版本标签。
  1. 查看本地镜像:
代码语言:javascript
代码运行次数:0
运行
复制
docker images
  • 解析: docker imagesdocker image ls 用于列出本地已下载的镜像。
  1. 运行 MySQL 容器:
代码语言:javascript
代码运行次数:0
运行
复制
docker run -d --name my-mysql-db -e MYSQL_ROOT_PASSWORD=MySecretPwd123 mysql:8.0
  • 解析: -d 使容器在后台运行。--name 为容器指定一个易于记忆的名称。-e 用于设置容器内的环境变量,MYSQL_ROOT_PASSWORD 是MySQL镜像官方文档中指定的用于设置root密码的环境变量。
  1. 列出运行中的容器:
代码语言:javascript
代码运行次数:0
运行
复制
docker ps
  • 解析: docker psdocker container ls 的简写,默认只显示正在运行的容器。
  1. 列出所有容器:
代码语言:javascript
代码运行次数:0
运行
复制
docker ps -a
  • 解析: -a--all 参数会显示所有容器,包括那些已经停止运行的。
  1. 查看实时日志:
代码语言:javascript
代码运行次数:0
运行
复制
docker logs -f my-mysql-db
  • 解析: docker logs 用于查看容器日志。-f--follow 参数会持续输出新产生的日志,实现实时跟踪。
  1. 进入容器的 shell:
代码语言:javascript
代码运行次数:0
运行
复制
docker exec -it my-mysql-db /bin/bash
  • 解析: docker exec 用于在运行中的容器内执行命令。-it 组合参数提供了交互式终端,/bin/bash 是要在容器内启动的命令。
  1. 复制文件到容器:
代码语言:javascript
代码运行次数:0
运行
复制
docker cp backup.sql my-mysql-db:/tmp/
  • 解析: docker cp 用于在主机和容器之间复制文件。格式为 docker cp <host_source_path> <container>:<container_dest_path>
  1. 停止容器:
代码语言:javascript
代码运行次数:0
运行
复制
docker stop my-mysql-db
  • 解析: docker stop 用于向容器发送停止信号,使其优雅地关闭。
  1. 删除容器:
代码语言:javascript
代码运行次数:0
运行
复制
docker rm my-mysql-db
  • 解析: docker rm 用于删除一个或多个已停止的容器。如果容器正在运行,需要先 stop 或使用 -f 强制删除。
  1. 删除镜像:
代码语言:javascript
代码运行次数:0
运行
复制
docker rmi mysql:8.0
  • 解析: docker rmidocker image rm 用于删除本地镜像。如果有任何容器(即使是已停止的)是基于该镜像创建的,必须先删除这些容器,才能成功删除镜像。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思维导图
  • 一、Docker 镜像 (Image) 常用命令
    • 1. 搜索镜像 (search)
    • 2. 拉取镜像 (pull)
    • 3. 查看本地镜像 (images / image ls)
    • 4. 删除本地镜像 (rmi / image rm)
    • 5. 查看镜像详细信息 (inspect)
    • 6. 查看镜像历史 (history)
    • 7. 保存镜像为 tar 文件 (save)
    • 8. 从 tar 文件加载镜像 (load)
    • 9. 为镜像打标签 (tag)
  • 二、Docker 容器 (Container) 常用命令
    • 1. 创建并运行容器 (run)
    • 2. 查看正在运行的容器 (ps / container ls)
    • 3. 停止容器 (stop)
    • 4. 启动已停止的容器 (start)
    • 5. 重启容器 (restart)
    • 6. 进入正在运行的容器 (exec / attach)
    • 7. 删除容器 (rm / container rm)
    • 8. 查看容器日志 (logs)
    • 9. 查看容器详细信息 (inspect)
    • 10. 从容器复制文件到主机 (cp)
    • 11. 从主机复制文件到容器 (cp)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档