Docker基础篇(四)——镜像的操作
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 |
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 |
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 |