准备
理解镜像地址结构:
${registry_uri}/${repository_path}/${image_name}:${tag_name}
#eg. docker.io/library/alpine:3.10.1
自己注册一个docker_hub的账号,利用它提供的仓库学习
注册地址
通过docker客户端的登录命令登录docker_hub,测试刚才注册的账号:
docker login docker.io
登录信息存储位置:/root/.docker/config.json
可以通过cat命令查看:
通过base64解码可以反解出密码,命令如下:
echo “加密后的密码” | base64 -d
镜像查询
docker search ${image_name}
#eg. docker search alpine
alpine是Linux的一个体积较小的发行版。docker search 命令和dockerhub官网搜索效果是一样的。
下载镜像(拉取镜像)
docker pull ${image_name}
# eg. docker pull alpine
[root@centos-local-7 ~]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
540db60ca938: Pull complete
Digest: sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
从名执行的输出提示可以看到,拉取镜像时,如果没有指定tag,那么默认拉取最新的(latest),如果时从docker官方(即:docker.io/library)仓库拉取镜像,可以直接写镜像名称,不用写全镜像路径结构,最终拉取的镜像是:docker.io/library/alpine:latest。如果用私有仓库,必须写全。
# 拉取指定tag的alpine
docker pull alpine:3.13.5
这里选择的tag是最新的版本,也就是和前面不写tag时默认拉取的latest版本是同一个,这次会发现拉取速度的比上一次快。
# 通过镜像地址的完整结构拉取
docker pull docker.io/library/alpine:3.13
拉取是发现也没有重新下载,感觉好像和3.13.5是同一个,然后又试着拉取了一下3.11.11版本,这回有新的下载。下一个命令可以验证一下。
查看本地镜像
docker images
# 或者
docker image ls
# 可以带上筛选grep
docker images | grep alpine
[root@centos-local-7 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 3.11.11 e389ae589224 2 weeks ago 5.62MB
alpine 3.13 6dbb9cc54074 2 weeks ago 5.61MB
alpine 3.13.5 6dbb9cc54074 2 weeks ago 5.61MB
alpine latest 6dbb9cc54074 2 weeks ago 5.61MB
hello-world latest d1165f221234 8 weeks ago 13.3kB
[root@centos-local-7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 3.11.11 e389ae589224 2 weeks ago 5.62MB
alpine 3.13 6dbb9cc54074 2 weeks ago 5.61MB
alpine 3.13.5 6dbb9cc54074 2 weeks ago 5.61MB
alpine latest 6dbb9cc54074 2 weeks ago 5.61MB
hello-world latest d1165f221234 8 weeks ago 13.3kB
[root@centos-local-7 ~]# docker images | grep hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 8 weeks ago 13.3kB
查看到之前拉取的所有镜像,这里可以看出latest和3.13还有3.13.5指向的是同一个镜像ID,也就是说他们其实是一样的。
也就是说,tag是类似指针的东西。
给镜像打标签
# 把alpine镜像标签打到自己的仓库
# docker tag {imageId} {全格式镜像名}
docker tag 6dbb9cc54074 docker.io/${刚才再dockerhub上创建的用户名就是一自己的仓库}/alpine:v-3.13
# eg. docker tag 6dbb9cc54074 docker.io/adminxxxx/alpine:v-3.13
产看一下结果:
推送镜像
# 把刚才打好标签的镜像推送到自己的仓库,之前登录过了,可以直接推送
docker push docker.io/adminxxxx/alpine:v-3.13
[root@centos-local-7 ~]# docker push docker.io/adminhubo/alpine:v-3.13
The push refers to repository [docker.io/adminxxxx/alpine]
b2d5eeeaba3a: Mounted from library/alpine
v-3.13: digest: sha256:def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 size: 528
推送的速度比较快,因为dockerhub上时有这个镜像的,我们push时只是打了一个标签指向这个镜像,不会把这个镜像实体再次推上去。从输出的提示信息也可以看出:Mounted from library/alpine,这是从官方仓库的library/alpine挂载的。
到dockerhub官网查看自己的仓库:
docker pull 和 docker push 命令都使用的https协议,需要证书,如果私有仓库没有证书需要修改配置使用http协议。
删除镜像
# 删除docker.io/library/alpine:latest镜像
docker rmi docker.io/library/alpine:latest
# 删除镜像
# docker rmi {imageID}
docker rmi 6dbb9cc54074
# 如果有其他标签指向这个镜像则会提示错误,我无法删除
# 如果要强制删除: docker rmi -f {imageID}
docker rmi -f 6dbb9cc54074