一、前言
这篇主要分享一下 镜像是如何使用的,以及一些基础的命令操作。docker 命令 --help # 帮助命令
二、获取镜像
1、 docker pull
命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
具体的选项可通过 docker pull --help
2、使用 docker pull
命令
1、命令:
docker pull ubuntu
docker pull ubuntu:18.04 指定版本下载
2、结果:
18.04: Pulling from library/ubuntu
f22ccc0b8772: Pull complete
3cf8fb62ba5f: Pull complete
e80c964ece6a: Pull complete
Digest: sha256:fd25e706f3dea2a5ff705dbc3353cf37f08307798f3e360a13e9385840f73fb3
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
三、列出镜像
1、使用 docker image ls
命令
1、命令:
docker images(docker image ls)
2、结果:
ubuntu 18.04 2c047404e52d 3 months ago 63.3MB
centos 6.7 9f1de3c6ad53 24 months ago 191MB
ubuntu 15.10 9b9cb95443b5 4 years ago 137MB
3、总结:
列表包含了 仓库名、标签、镜像 ID、创建时间 以及 所占用的空间
四、搜索镜像
1、使用 docker search
命令
1、命令:
docker search mysql
2、结果:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10575 [OK]
mariadb MariaDB Server is a high performing open sou… 3954 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 774 [OK]
percona Percona Server is a fork of the MySQL relati… 527 [OK]
五、删除本地镜像
1、 docker image rm
命令格式为:
docker image rm [选项] <镜像1> [<镜像2> ...]
其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
2、docker image rm 长镜像ID
docker image rm 2c047404e52d
这样就把 Ubuntu:18.04给删除掉了。
3、docker image rm 短镜像ID
docker image rm 678
使用镜像 ID 的前三位,就可以把 registry:latest 给删掉了。
4、docker image rm 镜像名
docker image rm nginx
5、docker image rm 镜像名:版本号
docker image rm ubuntu:15.10
6、docker image rm 镜像摘要
docker image rm mysql@sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
7、docker rmi 镜像ID
docker rmi a70d36bc331a
我们同样可以把 docker image rm 镜像ID
命令缩写为 docker rmi 镜像ID
8、Untagged 和 Deleted
1、如果观察上面这几个命令的运行输出信息的话,你会注意到删除行为分为两类,一类是 Untagged,另一类是 Deleted。我们之前介绍过,镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签。
2、因此当我们使用上面命令删除镜像的时候,实际上是在要求删除某个标签的镜像。所以首先需要做的是将满足我们要求的所有镜像标签都取消,这就是我们看到的 Untagged 的信息。因为一个镜像可以对应多个标签,因此当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,如果是这种情况,那么 Delete 行为就不会发生。所以并非所有的 docker image rm 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。
3、当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行为。镜像是多层存储结构,因此在删除的时候也是从上层向基础层方向依次进行判断删除。镜像的多层结构让镜像复用变得非常容易,因此很有可能某个其它镜像正依赖于当前镜像的某一层。这种情况,依旧不会触发删除该层的行为。直到没有任何层依赖当前层时,才会真实的删除当前层。这就是为什么,有时候会奇怪,为什么明明没有别的标签指向这个镜像,但是它还是存在的原因,也是为什么有时候会发现所删除的层数和自己 docker pull 看到的层数不一样的原因。
4、除了镜像依赖以外,还需要注意的是容器对镜像的依赖。如果有用这个镜像启动的容器存在(即使容器没有运行),那么同样不可以删除这个镜像。之前讲过,容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除必然会导致故障。如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像
六、docker image ls 命令来配合
1、删除所有仓库名为 mysql
的镜像
docker image rm $(docker image ls -q mysql)
2、删除所有在 nginx:latest 之前的镜像
docker image rm $(docker image ls -q -f before=nginx:latest)
充分利用你的想象力和 Linux 命令行的强大,你可以完成很多非常赞的功能.
七、总结
主要是对镜像的一些操作命令使用方法进行了总结,有疑问欢迎指出。