Docker 镜像基础教程

镜像管理和使用

获取镜像

镜像是容器的基础,在运行容器之前,必须获得容器的镜像。在Docker CLI中,我们可以通过 docker pull 命令从往上下载我们需要的镜像。

# 拉取镜像
docker pull php

在这里插入图片描述
在获取php镜像时,没有指定镜像的命名空间,因为我们需要的 php 镜像属于 Docker 官网管理的镜像,这些镜像是没有命名空间的。同时我们没有指定镜像的标签,这个时候 Docker 会自动使用 latest 这个默认标签。通常我们更倾向于使用更确定的镜像信息,减少镜像版本带来的不确定性:

# 拉取镜像
docker pull xingfupeng/centos:v6

在这里插入图片描述
Docker 会利用镜像的分层机制,将镜像分为多个包进行下载,我们可以在终端输出中看到每层的下载状态。当所有的镜像层下载和解压等操作完成,它就会出现在本地的镜像仓库中,与此同时,终端屏幕上会输出镜像下载成功的提示:
在这里插入图片描述

当然,互联网上已经存在很多由组织或者个人提供的镜像,我们可以通过 docker search 命令在 Docker 官网提供的镜像仓库 Docker hub 中查找需要的镜像:

# 查询 php 相关的镜像
docker search php

在这里插入图片描述
命令显示出来搜索结果中包含了镜像的主要信息:

字段名称字段解释
NAME镜像名称
DESCRIPTION创建者提供的对镜像的简单描述
STARS镜像在官方镜像仓库中收到用户给出的星星的数量,表示镜像受欢迎的程度。
OFFICIAL镜像是否由 Docker 官方提供。我们更倾向于使用官方提供的镜像,因为它们更稳定。
AUTOMATED镜像是否使用了自动构建

通过 docker searchdocker pull 命令可以很轻松地从网上下载所需要的镜像,当然,对于已经可以使用互联网获取到的镜像,图鉴直接下载使用。

列出镜像

# 镜像列表
docker images

在这里插入图片描述
命令所返回的镜像列表中主要包含了以下 5 个字段:

字段名称字段解释
REPOSITORY镜像的名称,如果镜像名称中含有 Namespace,这里也会一并显示。在某些场合下,镜像的名称会显示为<none>,比如创建时没有指定名称的时候,或者新建镜像时使用了和之前相同名称的时候。
TAG镜像的标签
IMAGE ID镜像的ID。镜像的ID是更精确地识别镜像的属性,它由SHA256散列算法生成,表示为一个长度为64位的十六进制字符串。为了节省页面,这里只显示了镜像ID的前部分,不过这也足以说明问题。
CREATED镜像的创建时间
SIZE镜像所占用的硬盘空间,包括被共享的镜像层大小。

当本地镜像较多时,我们还可以通过通配符过滤出符合条件的镜像:

# 根据通配符查看 ph相关镜像
docker images "ph*"

在这里插入图片描述

获得镜像的详细信息

我们可以根据 docker inspect 命令获取镜像更详细的信息:

docker inspect nginx

信息太多,截取了 4 张图片展示。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

docker inspect 命令可以获得镜像的详细信息,也可以接受镜像的名称、镜像的ID等唯一的信息:

docker inspect c82521676580 # nginx 镜像的 IMAGE ID

Docker 允许在命令中只给出部分ID,这里我们只使用了镜像ID的前12位,不过这足以识别镜像在本地的唯一性了,也可以得出我们想要的结果。当然,我们还可以只提供镜像ID的前8位、前5位,甚至前2位,只要我们能够保证给出的前缀可以在本地找到唯一对应的镜像即可。

使用docker inspect 命令会议 json 格式返回镜像的很多信息,如果只想得到某部分信息,可以使用输出格式进行过滤:

docker inspect -f {{".Size"}} c82521676580

在这里插入图片描述
第三幅图中的 size 信息。

删除镜像

如果需要删除本地的镜像,可以使用 docker rmi 命令进行删除:

# 查询一下本地镜像
docker images xingfupeng/centos
# 删除本地镜像
docker rmi xingfupeng/centos:v6

在这里插入图片描述
在这里插入图片描述
如果一个镜像中含有某些其他镜像共享的镜像层,这些镜像层仍然会保留下来,只有未被其他镜像层使用的层会被删除。

同样我们可以指定镜像ID来删除镜像:

docker rmi a1b0aa83a826

镜像要是被容器使用的,如果我们删除镜像时正有容器使用它,那它将无法被删除。我们可以携带 -f 参数的 docker rmi 命令强制删除镜像:

docker rmi -f a1b0aa83a826

注意 不过不推荐使用这种方法,因为这会带来一些难以处理的遗留问题,所以最好还是先关闭或清理掉使用镜像的容器再删除镜像。

迁移镜像

虚拟化部署的高效率,主要是镜像无缝迁移的功劳,也就是说,镜像的导入/导出是虚拟化过程中最基础的操作,Docker 也提供了镜像导出和载入本地镜像库的方法。

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

# 导出 php 镜像
docker save -o php.tar php:latest

在这里插入图片描述

我们看到了当前目录下有一个 php-migrate.tar 的镜像导出的迁移文件。

默认情况下,docker save 命令是把镜像写出到输出流中,可以通过 -o 或 --output 参数将导出的镜像数据写入到指定的文件,也可以使用 > 写出到指定文件:

# 导出 php 镜像
docker save php:latest > php.tar

另外, docker save 命令支持同时导出多个镜像,只要将镜像逐个传入即可:

docker save -o php-nginx.tar php:latest nginx:latest

在这里插入图片描述

通过迁移文件的大小我们能看出迁移文件中的镜像内容是有区别的。

要将导出的镜像数据重新导入到本地的镜像仓库中,可以使用 docker load 命令:

先将本地的 php 镜像删除:
在这里插入图片描述

# 导入镜像
docker load -i php.tar

在这里插入图片描述
导入成功后,再查看一下镜像列表 php 镜像已恢复。

默认情况下,docker load 命令从输入流中读取数据,可以通过 -i 或 --input 参数将指定的文件传入镜像数据,也可以通过 < 来完成:

# 导入镜像
docker load < php.tar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值