1.检查本地镜像
docker image ls
2.拉取镜像
从官方仓库拉取镜像
docker image pull <repository>:<tag>repository: 仓库名称tag: 标签
从第三方镜像仓库中获取镜像
需要在镜像仓库名称前加上第三方镜像仓库服务的DNS名称。
dokcer pull gcr.io/nigelpoulton/tu-demo:v2
拉取仓库中全部镜像
命令中指定 -a 参数来拉取仓库中的全部镜像
docker image pull -a
3.过滤 docker image ls 的输出内容
用 —filter 参数来过滤 docker image ls 命令返回的镜像列表内容
Docker 目前支持如下的过滤器dangling: 可以指定 true 或者 false, 仅返回悬虚镜像(true), 或者非悬虚镜像(false).before: 需要镜像名称 或者 ID 作为参数, 返回在之前被创建的全部镜像。since: 与 before 类似, 不过返回的是指定镜像之后创建的全部镜像。label: 根据标注 (label) 的名称或者值, 对镜像进行过滤。其他过滤方式可以使用 referrence。
常用的几种例子
# 完成过滤并且仅显示标签为 latest 的示例docker image ls --filter=refernce="*:latest"# 使用--format参数来通过 Go 魔板对输出内容进行格式化。docker image ls --format "{{.Size}}"## 使用下面命令返回全部镜像, 但是只显示仓库、标签和大小信息docker image ls --format "{{.Repository}}: {{.Tag}}: {{.size}}"
4.通过CLI方式搜索 Docker Hub
通过 docker search [NAME] 的方式来搜索 Docker Hub
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker search nigelpoultonNAME DESCRIPTION STARS OFFICIAL AUTOMATEDnigelpoulton/pluralsight-docker-ci Simple web app used in my Pluralsight video … 23 [OK]nigelpoulton/tu-demo Voting web server used for various Pluralsig… 12nigelpoulton/ctr-demo Web server for simple Docker demos 3nigelpoulton/k8sbook Simple web app used for demos in The Kuberne… 2nigelpoulton/vote Fork of dockersamples Voting App for *Docker… 1nigelpoulton/dockerbook Repo for examples used in Docker Deep Dive b… 0nigelpoulton/msb-hello 0nigelpoulton/web-fe1 Web front end 0
添加过滤条件
通过 —filter 参数添加过滤条件
# --filter "is-offical=true" 来判断是否是官方镜像docker search alpine --filter "is-official=true"# --filter "is-automated=true" 判断是否是自动创建的仓库docker search alpine --filter "is-automated=true"# --limit 参数来增加返回内容行数docker search alpine --filter "is-automated=true" --limit 10
5.镜像和分层
Docker 镜像由一些松耦合的只读镜像层组成。
Docker 负责堆叠这些镜像层, 并且将他们表示为单个统一的对象。
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker image pull ubuntu:latestlatest: Pulling from library/ubuntu3ff22d22a855: Pull completee7cb79d19722: Pull complete323d0d660b6a: Pull completeb7f616834fd0: Pull completeDigest: sha256:5d1d5407f353843ecf8b16524bc5565aa332e9e6a1297c73a92d3e754b8a636dStatus: Downloaded newer image for ubuntu:latestdocker.io/library/ubuntu:latest
通过 docker image inspect 命令
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker image inspect ubuntu:latest
[
{
"Id": "sha256:1e4467b07108685c38297025797890f0492c4ec509212e2e4b4822d367fe6bc8",
"RepoTags": [
"ubuntu:latest"
],
<Snip>
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:ce30112909569cead47eac188789d0cf95924b166405aa4b71fb500d6e4ae08d",
"sha256:8eeb4a14bcb4379021c215017c94800a848a8203a8ce76aa1bd211d4c995f792",
"sha256:a37e74863e723df4ddd599ef1b7d9a68e2301794a8c37c2370f8c2c8993ef72c",
"sha256:095624243293a7dfdb582f8471d6e2d9d7772dd621bc57906b034c59f388ebac"
]
}
]
6.共享镜像层
多个镜像之间可以并且确实会共享镜像层。
docker image pull -a nigelpoulton/tu-demo
Docker 首先尝试拉取标签为 latest 的镜像。 然后, 当拉取标签为 v1 和 v2 的镜像时,
Docker 会注意到组成这两个镜像的镜像层,有一部分已经存在了。
7.根据镜像摘要(image digest)拉取镜像
由于镜像标签是可变的。
这意味着可能偶尔出现给镜像打错标签的情况,又是甚至会给新标签打一个已经存在的标签的情况。
获取仓库的镜像摘要
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker image ls --digests alpine
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
alpine latest sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321 1e4467b07108 8 weeks ago 5.57MB
上面代码片段中, Alpine 镜像的签名值如下
sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
接下来我们来实现通过 镜像摘要拉取镜像
# 首先我们先删除 alpine 这个仓库
docker image rm alpine:latest
# 我们通过 镜像的签名值来下载这个仓库
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker image pull alpine@sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321: Pulling from library/alpine
df20fa9351a1: Pull complete
Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
Status: Downloaded newer image for alpine@sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
docker.io/library/alpine@sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
8.删除镜像
删除镜像的两种方式
1.通过仓库名+标签的方式删除
docker image rm alpine:latest
2.通过镜像ID来删除
docker image rm 1e4467b07108
如果被删除的镜像上存在运行状态的容器,那么删除操作不会被允许。再次执行删除镜像命令之前,需要停止并删除该镜像相关的全部容器。
