Docker基础篇(四)——镜像的操作

前言:
阅读这篇文章我能学到什么?
   这篇介绍镜像有关的操作。

1 拉取镜像

  从 Docker镜像仓库 拉取现有的仓库。
  从Docker仓库拉取镜像的指令如下。

1
docker pull username/image_name:tag

  指令可以省写,当 username 部分省略时,表示从Docker官方的仓库中拉取,否则是拉取某个具体用户上传的镜像。当 tag 省略时,会自动拉取最新的版本。
  比如我们从官网方Docker仓库拉取纯净版本的Ubuntu22.04。

1
docker pull ubuntu:22.04

2 查看镜像

  镜像拉取完后执行以下指令可查看本地有哪些镜像。会显示镜像的名称、tag、ID、创建日期、大小信息。

1
docker images

  或者。

1
docker images ls

images.png

3 删除镜像

  可以根据镜像名称或镜像ID删除已有的镜像。注意,如果存在镜像关联的容器,则该镜像不可直接删除,如果强制(指令加 -f )删除了镜像,如果容器正在运行则暂时不受影响,但未运行的容器无法变为运行状态。
  可以根据镜像名称删除镜像。

1
docker rmi image_name:tag

  可以根据镜像ID删除镜像。

1
docker rmi image_id

4 镜像导出

  现有的镜像可以导出成tar包,便于传递分享。
  save导出会保留完整镜像信息,包含所有分层、标签、历史记录等。相对应的导入时需要使用 docker load 指令。
  根据镜像名称导出。

1
docker save -o tar_name.tar image_name:tag

  根据镜像ID导出。

1
docker save -o tar_name.tar image_id

  通常为了节省空间和提高网络传输速度,我们会再将tar文件进行一次压缩,生成 .tar.gz 文件。 -k 表示不删除原文件。

1
sudo gzip -k tar_name.tar

  会在当前目录下生成 tar_name.tar.gz 文件。

5 导入镜像

  通常拿到的是 .tar.gz 文件,需要先解压一次。 -k 表示不删除原文件。

1
sudo gunzip -k tar_name.tar.gz

  导入docker save 导出的tar文件的镜像。该指令导入镜像时,镜像的名称和标签会自动恢复为导出前的原始名称,无法为镜像指定新名称,以为 save 的方式导出是带有完整镜像信息的。

1
docker load -i tar_name.tar

6 修改镜像名

  给镜像创建一个别名,旧的镜像名称同时存在,它们 IMAGE ID 相同。因为镜像可能被容器引用,对镜像修改名称实则是创新别名,旧的名称不会自动删除。
  根据镜像名称修改。

1
docker tag old_name:old_tag new_name:new_tag

  根据镜像ID修改。

1
docker tag image_id new_name:new_tag

  旧的名称不需要可以使用 docker rmi image_name:tag 删除。注意,当有多个名称指向同一个 image_id 时,不允许通过ID直接删除这个image。

7 查看镜像构建历史

  镜像是可以记录自己的修改历史的,输入以下指令查看。这些历史技术是 docker commit 产生的。
  根据镜像名称查看。

1
docker history image_name:tag

  根据镜像ID查看。

1
docker history image_id

history.png

8 推送镜像

  将本地镜像推送到远程服务器。第一部,如果未登陆则先登陆。
  登陆Docker Hub,执行以下指令后根据提示再输入账号密码。

1
docker login

  如果要登陆其他仓库,则需要指定网址。

1
docker login registry.example.com -u username -p password

  将本地镜像推送到远程Docker Hub服务器。

1
docker push username/image_name:tag

  要推送到其他仓库,则需要指定网址。

1
docker push registry.example.com/username/image_name:tag