docker三大核心概念:仓库、镜像、容器。对于用户,能操作的主要是容器和镜像,而镜像是作为一切的开始。
获取镜像
部署了阿里云的docker服务后,可以方便的获取镜像,镜像可以来自docker官方或者社区。
使用docker pull [OPTIONS] NAME[:TAG|@DIGEST]
来获取镜像。
- name是镜像仓库的名字,比如CentOS、Ubuntu、Debian等
- tag是镜像的标签,一般用来描述版本信息。
通常情况下,描述一个镜像需要包括“名称+标签”的形式。
例如,获取一个CentOS可以这样操作:
# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
74f0853ba93b: Pull complete
Digest: sha256:26f74cefad82967f97f3eeeef88c1b6262f9b42bc96f2ad61d6f3fdf544759b8
可以看到:默认的tag是latest,下载的是最新版的镜像。有说法表示,latest标签下载的镜像可能是不稳定版,在生产环境中需要核实标签,避免麻烦。
阿里云用户还可以享受镜像加速服务,详情关注dev.aliyun.com
由下载过程看出,镜像文件包含一个或多个层(layer),74f0853ba93b这个字串就是这个层的唯一ID号,层的好处是假如多个镜像共有某些层,这些曾就可以共用,从而减少空间占用。
当然,镜像还可以从非官方hub下载,例如下载阿里云的alicloudhpc/toolkit镜像,使用命令:有时候,官方镜像并不是最好用的,第三方开发的会更加易用。
查看镜像信息
使用dicker images
可以查看本地的所有镜像的基本信息。
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 328edcd84f1b 4 weeks ago 192.5 MB
docker.io/busybox latest efe10ee6727f 6 weeks ago 1.129 MB
- repository:表示来自于哪个仓库。
- tag:标签,仅表示版本信息,不能指代镜像本身。
- id:镜像本身唯一的标识符,可以使用前几个字符表示一个id;标签重复表示同一个镜像。
- created:镜像更新时间。
- size:优秀的镜像体积都很小。
我本机有两个镜像,一个是刚刚下载的centos:latest镜像,另一个是先前下载的busybox镜像。
可以使用docker tag
来为镜像添加任意新的标签。例如为centos:latest镜像添加tag:
# docker tag centos:latest centos:new
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos new 328edcd84f1b 4 weeks ago 192.5 MB
docker.io/centos latest 328edcd84f1b 4 weeks ago 192.5 MB
docker.io/busybox latest efe10ee6727f 6 weeks ago 1.129 MB
可以看到,多出来一个centos new 328edcd84f1b 4 weeks ago 192.5 MB
这项,看id和原来的centos一样,上面说了,id才是区分镜像的唯一标识,而id一致说明了是同一个镜像。
使用docker inspect
查看镜像的详细信息:
docker inspect centos:new
[
{
"Id": "sha256:328edcd84f1bbf868bc88e4ae37afe421ef19be71890f59b4b2d8ba48414b84d",
"RepoTags": [
"centos:new",
"docker.io/centos:latest"
],
"RepoDigests": [
"docker.io/centos@sha256:26f74cefad82967f97f3eeeef88c1b6262f9b42bc96f2ad61d6f3fdf544759b8"
],
"Parent": "",
"Comment": "",
"Created": "2017-08-03T21:34:56.600704666Z",
"Container": "a77cb215266a7806d19c290368a8d058fbe1bda6a0bea05730d1630b7e9a9e1c",
"ContainerConfig": {
以下省略……
返回的是json格式的信息,太多太长,可以使用参数来提取信息,如获取镜像的价格:
# docker inspect -f {{".Architecture"}} centos
amd64
删除镜像
可以使用标签和id删除镜像。使用docker rmi [OPTIONS] IMAGE [IMAGE...]
删除镜像,image可以是标签或id
使用标签删除镜像
假如要删除centos:new镜像:
# docker rmi centos:new
Untagged: centos:new
Untagged: docker.io/centos@sha256:26f74cefad82967f97f3eeeef88c1b6262f9b42bc96f2ad61d6f3fdf544759b8
查看镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 328edcd84f1b 4 weeks ago 192.5 MB
docker.io/busybox latest efe10ee6727f 6 weeks ago 1.129 MB
确实删除了,那如果不带tag,直接输入名字会发生什么?
重新创建了新的centos:new,现在执行:
# docker rmi centos
Untagged: centos:latest
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos new 328edcd84f1b 4 weeks ago 192.5 MB
docker.io/busybox latest efe10ee6727f 6 weeks ago 1.129 MB
可以看到,centos:latest被删除了,手动建立的标签保留。
使用id删除镜像
使用命令为docker rmi [id]
因为一个镜像的多个标签使用同一个id,输入id之后,优先删除手动标签,最后删除原生镜像。