Docker 入门 2 镜像基本操作
前言
我们实现了 为 Debian 获取 Docker Engine - Community ,本文接着简述 Docker 容器的基本操作。
Docker Image 镜像是:容器的基石、层叠的只读文件系统、联合加载。
使用 Docker 镜像
镜像仓库和标签
仓库 Repository
是镜像仓库, 用于存储具体的docker镜像,起到的是仓库存储作用。例如:ubuntu
是 Ubuntu:latest、Ubuntu:20.04、Ubuntu:18.04、Ubuntu:14.04.1 等等的 Repository
。
仓库 Registry
是同系列镜像的集合(默认是官方的),用于管理镜像仓库,起到的是服务器下放资源的作用。
拿近期的新冠病毒的热点来举例:
“口罩” 有 k95、kn95、一次性医用口罩、棉布口罩等等。“酒精” 是浓度 90%、75%、50% 等等。而你拿 一次性医用口罩 和 75% 浓度的酒精 用 塑料袋打包 在一起带回了家。
一次性医用口罩 就是 口罩 Repository 下的一个 image ,它的 Tag 就是 “一次性医用”;
75% 浓度的酒精 就是 酒精 Repository 的一个 image ,它的 Tag 就是 “75% 浓度”;
打包成一个塑料袋,这个塑料袋就是你的一个
Registry
。
获取镜像
对于官方 Docker Hub 中存在的公开仓库的镜像,可以使用如下指令:
docker pull [OPTIONS] NAME [:TAG]
-a
:默认 --all-tags=false ,将所有匹配到搜索名字的镜像全部下载到本地。- 可添加标签拉取。
特别的,对于 Docker Hub 官方认证的镜像可以省略 用户名
。
docker pull [用户名]/[镜像名]:[TAG]
当不显式使用
TAG
进行指定镜像版本信息时,默认使用 latest 作为TAG
。就稳定性而言,因 latest 标签的镜像会就发布的最新版本进行更新,所以应尽量指定非 latest 的镜像。
对于其他第三方或者本地仓库而言,则需要再仓库名称前指定完整的仓库地址。
查找镜像
docker search [OPTIONS] TERM
- 最多一次返回25个结果
--automated
:默认 false ,自动化显示镜像--no-trunc
:默认 false ,不截断显示输出-s
:--stars=0 ,限定显示结果的最低星级
列出镜像列表
docker images [OPTIONS] [REPOSITORY]
- 无参数
-a
:--all=false ,显示所有镜像,默认不显示中间层的镜像,默认截断镜像的唯一 id 。-f
:--filter=[] ,在显示时的过滤条件。--no-trunc
:不使用截断的方式显示数据。-q
:--quiet=false ,只显示镜像的唯一 id 。
查看镜像信息
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
-f
:--format=""
删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE]
-f
:--force=false ,强制删除镜像--no-prune
:=false,保留要删除镜像的父镜像
注意:
现在 ubuntu 仓库下 看上去 有三个镜像,实际上只有两个,可以通过 IMAGE ID 查看。
每个镜像都可以有多个不同的标签 TAG 。
$ docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 72300a873c2c 3 weeks ago 64.2MB
ubuntu 18.04 72300a873c2c 3 weeks ago 64.2MB
ubuntu 14.04 6e4f1fe62ff1 2 months ago 64.2MB
一个镜像是 72300a873c2c
,它有两个TAG :latest、18.04。
删除 ubuntu:18.04
$ docker rmi ubuntu:18.04
Untagged: ubuntu:18.04
这里 看上去 删除了一个镜像,实际上并没有真正删除这个镜像。
真正删除镜像要通过 ID 来删除:
$ docker rmi <IMAGE ID>
当然,你也可能遇见如下问题:
Error response from daemon: conflict: unable to delete 704eae0e0bc3 (must be forced) - image is being used by stopped container c24e348b3014
这是由于基于该镜像的容器依然存在,需要移除该容器才能删除镜像。