当前位置: 首页 > news >正文

三、Docker常用命令

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

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

思维导图

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

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

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

1. 搜索镜像 (search)

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

docker search <image_name>

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

docker search nginx

2. 拉取镜像 (pull)

仓库下载一个镜像本地

docker pull <image_name>[:tag]
  • [:tag]: 可选。指定镜像的版本标签。如果不指定,默认拉取 latest 标签。

代码案例:

# 拉取最新版本的 Ubuntu 镜像
docker pull ubuntu# 拉取指定版本的 Redis 镜像
docker pull redis:6.2

在这里插入图片描述

3. 查看本地镜像 (images / image ls)

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

docker images
# 或者
docker image ls

代码案例:

在这里插入图片描述

4. 删除本地镜像 (rmi / image rm)

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

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

代码案例:

# 通过名称和标签删除
docker rmi redis:6.2# 通过镜像ID删除 (假设ID是 edbdd97bf78b)
docker rmi edbdd97bf78b# 删除多个镜像
docker rmi ubuntu:latest redis:latest

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

5. 查看镜像详细信息 (inspect)

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

docker inspect <image_name>[:tag] | <image_id>

代码案例:

docker inspect ubuntu:latest

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

6. 查看镜像历史 (history)

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

docker history <image_name>[:tag] | <image_id>

代码案例:

docker history nginx:latest

在这里插入图片描述

7. 保存镜像为 tar 文件 (save)

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

docker save -o <output_filename.tar> <image_name>[:tag]

代码案例:

docker save -o my_nginx_image.tar nginx:latest

8. 从 tar 文件加载镜像 (load)

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

docker load -i <input_filename.tar>

代码案例:

docker load -i my_nginx_image.tar

9. 为镜像打标签 (tag)

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

docker tag <source_image>[:tag] <target_image>[:tag]

代码案例:

# 将本地的 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,然后基于该镜像创建一个新容器启动它

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>: 设置环境变量

代码案例:

# 以后台模式运行一个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)

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

docker ps
# 或者
docker container ls
  • -a--all: 列出所有容器 (包括已停止的)。

代码案例:

# 查看所有容器
docker ps -a

在这里插入图片描述

3. 停止容器 (stop)

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

docker stop <container_name | container_id>

代码案例:

docker stop my-web-server

在这里插入图片描述

4. 启动已停止的容器 (start)

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

docker start <container_name | container_id>

代码案例:

docker start my-web-server

5. 重启容器 (restart)

docker restart <container_name | container_id>

代码案例:

docker restart my-web-server

6. 进入正在运行的容器 (exec / attach)

  • exec: 在正在运行的容器中执行一个新命令 (最常用)。
  • attach: 直接连接到容器的主进程 (PID 1) 的输入/输出流。

exec 语法 (推荐):

docker exec [OPTIONS] <container_name | container_id> <COMMAND>

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

docker exec -it my-web-server /bin/bash

在这里插入图片描述

7. 删除容器 (rm / container rm)

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

docker rm <container_name | container_id>
  • -f--force: 强制删除一个正在运行的容器。

代码案例:

# 首先停止容器
docker stop my-web-server
# 然后删除
docker rm my-web-server

在这里插入图片描述

8. 查看容器日志 (logs)

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

docker logs [OPTIONS] <container_name | container_id>
  • -f--follow: 实时跟踪日志输出。
  • --tail <number>: 只显示最后N行日志。

代码案例:

# 实时查看my-web-server的日志
docker logs -f my-web-server

9. 查看容器详细信息 (inspect)

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

docker inspect <container_name | container_id>

代码案例:

docker inspect my-web-server

在这里插入图片描述

10. 从容器复制文件到主机 (cp)

docker cp <container_name | container_id>:<container_path> <host_path>

代码案例:

# 将容器my-web-server中的/etc/nginx/nginx.conf文件复制到主机的当前目录
docker cp my-web-server:/etc/nginx/nginx.conf .

在这里插入图片描述

11. 从主机复制文件到容器 (cp)

docker cp <host_path> <container_name | container_id>:<container_path>

代码案例:

# 将主机的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 镜像:
docker search mysql
  • 解析: docker search 是用于在Docker Hub上查找镜像的命令。
  1. 拉取 mysql:8.0 镜像:
docker pull mysql:8.0
  • 解析: docker pull 用于下载镜像,<image_name>:<tag> 格式指定了镜像名和版本标签。
  1. 查看本地镜像:
docker images
  • 解析: docker imagesdocker image ls 用于列出本地已下载的镜像。
  1. 运行 MySQL 容器:
docker run -d --name my-mysql-db -e MYSQL_ROOT_PASSWORD=MySecretPwd123 mysql:8.0
  • 解析: -d 使容器在后台运行。--name 为容器指定一个易于记忆的名称。-e 用于设置容器内的环境变量,MYSQL_ROOT_PASSWORD 是MySQL镜像官方文档中指定的用于设置root密码的环境变量。
  1. 列出运行中的容器:
docker ps
  • 解析: docker psdocker container ls 的简写,默认只显示正在运行的容器。
  1. 列出所有容器:
docker ps -a
  • 解析: -a--all 参数会显示所有容器,包括那些已经停止运行的。
  1. 查看实时日志:
docker logs -f my-mysql-db
  • 解析: docker logs 用于查看容器日志。-f--follow 参数会持续输出新产生的日志,实现实时跟踪。
  1. 进入容器的 shell:
docker exec -it my-mysql-db /bin/bash
  • 解析: docker exec 用于在运行中的容器内执行命令。-it 组合参数提供了交互式终端,/bin/bash 是要在容器内启动的命令。
  1. 复制文件到容器:
docker cp backup.sql my-mysql-db:/tmp/
  • 解析: docker cp 用于在主机和容器之间复制文件。格式为 docker cp <host_source_path> <container>:<container_dest_path>
  1. 停止容器:
docker stop my-mysql-db
  • 解析: docker stop 用于向容器发送停止信号,使其优雅地关闭。
  1. 删除容器:
docker rm my-mysql-db
  • 解析: docker rm 用于删除一个或多个已停止的容器。如果容器正在运行,需要先 stop 或使用 -f 强制删除。
  1. 删除镜像:
docker rmi mysql:8.0
  • 解析: docker rmidocker image rm 用于删除本地镜像。如果有任何容器(即使是已停止的)是基于该镜像创建的,必须先删除这些容器,才能成功删除镜像。
http://www.dtcms.com/a/271009.html

相关文章:

  • HUAWEI HiCar6.0的新变化
  • 什么是 AMR 格式?简鹿音频转换器轻松批量转换 AMR 为 MP3
  • windows部署多实例filebeat监控相同路径下文件
  • 前端交互自定义封装类:“双回调自定义信息弹窗”
  • ai之 ubuntu本地安装mineru2.1.0
  • 整合Spring、Spring MVC与MyBatis:构建高效Java Web应用
  • Ubuntu22.04 设置显示存在双屏却无法双屏显示
  • DAS3D: Dual-modality Anomaly Synthesis for 3D Anomaly Detection 论文精读
  • 高通SG882G平台(移远),Ubuntu22编译:1、下载代码
  • 新零售“云化”进化:基于定制开发开源AI智能名片S2B2C商城小程序的探索
  • 中兴通讯首席项目管理专家、PMCoE负责人张宝忠受邀为PMO大会演讲嘉宾
  • redis的命令集合
  • WPF使用WebBrowser 解决href标签target=_blank在浏览器窗口打开新链接而非窗体内部打开的问题
  • Docker高级管理
  • 不深入,则无法共情
  • mysql 可用性的保障机制:主讲主从复制机制
  • Git 详解:从概念,常用命令,版本回退到工作流
  • 【03】MFC入门到精通——MFC 添加控件 设置属性 按钮 文本框
  • 《【第五篇】图片处理自动化:让你的视觉内容更专业!:图片处理基础与批量裁剪》
  • 06每日简报20250709
  • Vue 中mounted 生命周期钩子的执行时机和 v-for 的渲染顺序
  • linux-进程信号的产生与发送
  • 简单易懂的方式聊聊 DDD(领域驱动设计)
  • 汽车功能安全-软件单元验证 (Software Unit Verification)【用例导出方法、输出物】8
  • 分库分表之实战-sharding-JDBC水平分库+分表后:查询与删除操作实战
  • 【话题长廊测试报告】
  • qt绘制饼状图并实现点击即放大点击部分
  • 开发制作模仿参考抄别人的小程序系统
  • Shusen Wang推荐系统学习 --召回 ItemCF
  • RabbitMQ 高级特性之事务