【Docker基础】Docker镜像管理:镜像的拉取、查看、导入与导出详解

发布于:2025-06-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

引言

1 Docker镜像基础概念

1.1 什么是Docker镜像?

1.2 镜像与容器的关系

1.3 镜像层(Layer)概念

1.4 镜像仓库(Registry)

2 镜像拉取

2.1 拉取镜像的基本命令

2.2 拉取镜像的流程

2.3 拉取镜像的实践示例

3 镜像查看

3.1 查看本地镜像的基本命令

3.2 查看镜像的详细信息

3.3 镜像查看流程

3.4 查看镜像的实践示例

4 镜像的标签与仓库

4.1 镜像标签

4.2 镜像仓库

4.3 镜像的推送与拉取与仓库的关系

4.4 镜像标签与仓库的实践示例

5 镜像的清理与管理

5.1 清理无用镜像

5.2 镜像的导出与导入

5.2.1 镜像导出

5.2.2 镜像导入

5.3 镜像导入导出的实践示例

5.3.1 镜像导出示例

5.3.2 镜像导入示例

6 实际应用场景示例

7 总结


引言

在容器化技术蓬勃发展的当下,Docker镜像作为容器运行的核心基础,其操作与管理能力是开发者与运维人员必备的技能。本文将探讨Docker镜像的拉取、查看、导入与导出操作。

1 Docker镜像基础概念

1.1 什么是Docker镜像?

Docker镜像是一个轻量级、独立的、可执行的软件包,它包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
镜像可以看作是容器的“模板”,通过镜像可以创建多个容器实例。镜像本身是只读的,一旦创建,其内容不可更改。

1.2 镜像与容器的关系

  • 镜像静态的,只读的,用于创建容器的模板,镜像可以被看作是一个“快照”,记录了容器运行时的文件系统状态
  • 容器动态的,可写的,由镜像创建的运行实例,容器是基于镜像启动的,可以在镜像的基础上进行修改,这些修改不会影响原始镜像

1.3 镜像层(Layer)概念

  • Docker镜像由多个层(Layer)组成,每一层都是对前一层文件的修改或添加
  • 这种分层结构使得镜像的构建和分发更加高效,因为多个镜像可以共享相同的层,从而节省存储空间和网络带宽

1.4 镜像仓库(Registry)

  • 镜像仓库是存储镜像的地方,可以是官方的,也可以是私有的镜像仓库
  • 用户可以从仓库拉取镜像,也可以将本地镜像推送到仓库,镜像仓库提供了镜像的存储、分发和管理功能

2 镜像拉取

2.1 拉取镜像的基本命令

  • 在Docker中,使用docker pull命令来拉取镜像,基本语法如下:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • OPTIONS可选参数,如--platform指定平台
  • NAME镜像名称,通常包括仓库名和镜像名,如nginxlibrary/nginx
  • TAG镜像标签,用于区分同一镜像的不同版本,如latest1.21.0等,如果不指定,默认使用latest
  • @DIGEST镜像的摘要,用于精确指定镜像版本

2.2 拉取镜像的流程

  • 开始:用户执行docker pull命令
  • 检查本地镜像:Docker首先检查本地是否已存在该镜像
  • 直接使用本地镜像:如果镜像已存在,则直接使用,无需拉取
  • 从远程仓库拉取镜像:如果镜像不存在,则从配置的远程仓库拉取
  • 下载镜像的各个层:镜像由多个层组成,Docker会逐层下载
  • 合并层,构建完整镜像:下载完成后,Docker会合并这些层,构建出完整的镜像
  • 将镜像保存到本地:构建完成后,镜像会被保存到本地镜像仓库中
  • 结束:拉取过程完成

2.3 拉取镜像的实践示例

# 拉取最新版本的Nginx镜像
docker pull nginx

# 拉取指定版本的Nginx镜像
docker pull nginx:1.21.0

# 从指定仓库拉取镜像(如阿里云镜像仓库)
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest

# 拉取带摘要的镜像(确保拉取到特定版本的镜像)
docker pull nginx@sha256:a1e0ff703bd9c6361476c89834fd1d0ed520e1b8fd9c1e25affa52e0a4a84706

3 镜像查看

3.1 查看本地镜像的基本命令

  • 在Docker中,使用docker imagesdocker image ls命令来查看本地镜像,基本语法如下:
docker images [OPTIONS] [REPOSITORY[:TAG]]
  • OPTIONS可选参数,如-a显示所有镜像(包括中间层镜像),-q只显示镜像ID等
  • REPOSITORY[:TAG]可选参数,用于过滤特定仓库和标签的镜像

3.2 查看镜像的详细信息

  • 除了使用docker images命令外,还可以使用docker inspect命令来查看镜像的详细信息,包括镜像的层结构、环境变量、配置等
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • OPTIONS可选参数,如--format用于格式化输出
  • NAME|ID镜像名称或ID

3.3 镜像查看流程

  • 开始:用户执行docker images命令
  • 查询本地镜像仓库:Docker查询本地镜像仓库,获取所有镜像的信息
  • 列出所有镜像:将查询到的镜像信息以表格形式列出
  • 用户选择查看特定镜像的详细信息:用户根据列表选择想要查看的镜像
  • 执行docker inspect命令:用户执行docker inspect命令,传入镜像名称或ID
  • 查询镜像的元数据:Docker查询镜像的元数据,包括层结构、环境变量等
  • 返回镜像的详细信息:将查询到的详细信息以JSON格式返回
  • 结束:查看过程完成

3.4 查看镜像的实践示例

# 查看本地所有镜像
docker images

# 查看特定镜像的详细信息(如Nginx镜像)
docker inspect nginx:latest

# 使用--format参数格式化输出(只显示镜像ID)
docker inspect --format='{{.Id}}' nginx:latest

# 查看镜像的层结构
docker inspect --format='{{json .RootFS.Layers}}' nginx:latest 

4 镜像的标签与仓库

4.1 镜像标签

  • 镜像标签用于区分同一镜像的不同版本
  • 一个镜像可以有多个标签,但通常每个标签对应一个特定的版本或配置
  • 标签使得镜像的管理和使用更加灵活

4.2 镜像仓库

  • 镜像仓库是存储镜像的地方,可以是官方的,也可以是私有的镜像仓库
  • 用户可以从仓库拉取镜像,也可以将本地镜像推送到仓库
  • 镜像仓库提供了镜像的存储、分发和管理功能,是容器化应用部署的重要基础设施

4.3 镜像的推送与拉取与仓库的关系

  • 推送镜像:使用docker push命令将本地镜像推送到远程仓库,推送镜像时,需要指定镜像的名称和标签,以及目标仓库的地址
  • 拉取镜像:使用docker pull命令从远程仓库拉取镜像,拉取镜像时,需要指定镜像的名称和标签,以及源仓库的地址

4.4 镜像标签与仓库的实践示例

# 给本地镜像打标签(为本地nginx镜像打上自定义标签)
docker tag nginx:latest myregistry.example.com/my-nginx:v1.0

# 推送镜像到私有仓库(需要先登录仓库)
docker login myregistry.example.com
docker push myregistry.example.com/my-nginx:v1.0

# 从私有仓库拉取镜像
docker pull myregistry.example.com/my-nginx:v1.0

5 镜像的清理与管理

5.1 清理无用镜像

  • 随着时间的推移,本地可能会积累大量无用的镜像,占用磁盘空间,可以使用docker image prune命令来清理这些无用镜像
docker image prune [OPTIONS]
  • OPTIONS可选参数,如-a删除所有未被使用的镜像(包括中间层镜像),--filter根据条件过滤镜像等

5.2 镜像的导出与导入

5.2.1 镜像导出

  • 使用docker save命令将镜像导出为tar文件,导出镜像时,可以指定镜像的名称和标签,以及输出的文件名
docker save [OPTIONS] IMAGE [IMAGE...]
  • OPTIONS可选参数,如-o指定输出文件
    docker load [OPTIONS]

  • IMAGE镜像名称或ID,可以指定多个镜像

5.2.2 镜像导入

  • 使用docker load命令将tar文件导入为镜像,导入镜像时,需要指定输入的tar文件名
  • OPTIONS可选参数,如-i指定输入文件

5.3 镜像导入导出的实践示例

5.3.1 镜像导出示例

# 导出单个镜像到tar文件
docker save -o nginx_latest.tar nginx:latest

# 导出多个镜像到同一个tar文件
docker save -o my_images.tar nginx:latest mysql:5.7 redis:alpine

# 导出镜像并指定压缩格式(需要配合其他工具如gzip)
docker save nginx:latest | gzip > nginx_latest.tar.gz

5.3.2 镜像导入示例

# 从tar文件导入镜像
docker load -i nginx_latest.tar

# 从压缩的tar.gz文件导入镜像(需要先解压或使用支持解压的工具)
gunzip -c nginx_latest.tar.gz | docker load

# 查看导入后的镜像
docker images

6 实际应用场景示例

假设需要在两台不同的服务器之间迁移镜像,可以按照以下步骤操作:
  • 在源服务器上导出镜像
docker save -o my_app.tar myregistry.example.com/my-app:v1.0
  • 将tar文件传输到目标服务器:可以使用scprsync等工具将my_app.tar文件传输到目标服务器
scp my_app.tar user@target-server:/path/to/destination/
  • 在目标服务器上导入镜像
docker load -i /path/to/destination/my_app.tar
  • 验证镜像是否导入成功
docker images | grep my-app

7 总结

本文介绍了Docker镜像的拉取、查看、导入与导出操作,包括基本命令、流程图、实践示例以及相关概念的解释。希望通过本文能够熟练掌握Docker镜像的基本操作,并理解镜像、容器、镜像层、镜像仓库等关键概念。在实际应用中,合理管理镜像对于提高开发效率、降低运维成本具有重要意义!

网站公告

今日签到

点亮在社区的每一天
去签到