# Docker 镜像

# 1. 基本概念

在 Docker 中,镜像是一个包含应用程序及相关依赖库的文件,在 Docker 容器启动的过程中,它以只读的方式被用于创建容器运行的基础环境。

如果把容器理解为应用程序运行的虚拟环境,那么镜像就是这个环境的持久化副本(存档)

在 Docker 中,镜像名称主要分为三部分:namespace / repository : tag 。例如:

library/nginx:stable
library/nginx:1.18.0
要素 说明
namespace 镜像的名字空间,用于区别同名镜像。通常,namespace 是镜像的作者的名字。
Repository 镜像的名称。通常会采用镜像中 “那个” 要运行的应用程序命名。
tag 镜像的标签,一般是镜像的版本。

对于任意一个镜像而言,上述三者的组合一定是唯一的。另外,每个镜像都有一个唯一的 ID(一个 64 位的十六进制字符串)

Docker 的镜像是一个分层结构,镜像的每一层都是在原有层的基础上进行改动的。

简单来说,你所看到的 “一个” Docker 镜像实际上是由好几个部分拼凑在一起形成的。这也是为什么你在下载 docker 镜像的时候有好几个进度条在 “跑” ,而你在删除 “一个” Docker 镜像时,会显示你删除了好几个东西。

# 2. 获取镜像

docker pull 命令(略)。

# 3. 镜像的迁移

镜像的导入/导出是虚拟化过程中最基础的操作。

  • 使用 docker save 命令可将本地镜像库中的镜像导出:

    docker save ubuntu:latest > ubuntu.tar
    
  • 另外,docker save 命令支持同事导出多个镜像:

    docker save -o image.tar ubuntu:lasted centos:latest
    
  • 要将导出的镜像数据重新导入到本地的镜像仓库中,可以使用 docker load 命令:

    docker load -i ubuntu.tar
    
  • docker load < ubuntu.tar