Docker容器实战七:镜像仓库
本文我们将以Docker Hub为例,讲解关于镜像仓库的使用。
一. 镜像仓库
Registry是Docker公司的一项创新,它提供了存放镜像的仓库服务。在构建好镜像后,我们通常会将镜像上传到Registry服务器上进行保存。这样可以保证不会因本机故障而导致镜像丢失,同时,其他机器也能很方便地通过网络方式下载。
Docker Hub即为Docker官方的Registry服务器,它的访问地址为 https://hub.docker.com 。我们总是习惯将Registry称为仓库,但事实上两者并不完全等同。它们之间的关系如下图所示,在Registry中可以有多个仓库,每个仓库存储同名的镜像,而镜像之间通过Tag进行版本区分。
Docker客户端默认使用Docker Hub拉取镜像,在Docker Hub上有着数量众多的仓库,其中就有Docker官方提供的公共仓库。在官方仓库中存储了海量的应用镜像,这些镜像都是经过官方的筛选和审查,具有较高的安全性,应该作为生产使用的首选项。
Docker Hub具有与GitHub相同的概念,Stars代表着镜像受欢迎程度,通常优先下载Stars数量多的镜像。
除了使用官方仓库,我们也可以在Docker Hub上面创建自己的个人仓库,用于存放定制化的镜像。
操作方法如下:
1. 账号注册
新用户需要使用自己的邮箱地址注册账号,点击Register按键后开始注册。
2. 创建仓库
使用账号登录系统后,我们就可以来创建自己的仓库。仓库分为两类,一类为公共仓库,一类为私有仓库 ,公共仓库属于开放性仓库,用户不需要任何验证即可下载镜像,而私有仓库需要具有相关权限的账号才能下载。免费用户目前在Docker Hub只能创建一个私有仓库,公共仓库则没有限制。
选择“Repositories“菜单,然后点击”Create Repository”创建用户,此处创建一个公共仓库,名称为myapp,前面部分为我们的在Dcoker Hub的专属名称空间。
点击“Create” 创建完成后,我们可以来试着上传镜像了。
二. 上传镜像
在前面构建镜像时,我们配置了镜像名称,如:myapp:1.0。如果只在本机使用的话,对于名称格式并没有特别要求。但如果要将镜像上传或从仓库下载的话,那么必须使用如下的名称格式 :
Registry Address/Namespace/Repository:Tag
- Registry Address:指向Registry服务器的地址 ,当镜像未设置该项时,则默认使用Docker Hub的地址。
- Namespace:Registry中唯一的空间地址,可以用于区分不同用户或项目。默认使用Docker官方的空间地址。
- Repository:仓库名称,同一个应用的镜像仓库名相同,通过不同的tag来标记。
- Tag:用于标记不同的镜像版本。
现在,我们按照上面的格式来修改前面创建的镜像myapp:1.0,命令格式为:docker [image] tag +<Source_image:Tag> + <Target_image:Tag>。
$ docker tag myapp:1.0 alex990/myapp:1.0
注释:由于Docker Hub地址为默认,故此处不需要增加,如果是其他第三方Registry,则需要在前面加上对应的地址。
docker tag命令并不会对原有镜像做修改,只会将新的tag 映射到该镜像。我们可以看到,新镜像的IMAGE ID与原镜像的相同,证明都是属于同一个镜像文件。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alex990/myapp 1.0 6c1160b01988 20 hours ago 43.2MB
myapp 1.0 6c1160b01988 20 hours ago 43.2MB
运行docker login,并按提示输入Docker Hub注册的账号信息,完成验证。
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: alex990
Password:
Login Succeeded
然后,我们通过docker [image] push 命令上传镜像到仓库,如下:
$ docker push alex990/myapp:1.0
The push refers to repository [docker.io/alex990/myapp]
7a965a3a67a7: Mounted from linsr2018/myapp
f604d2d04ecc: Mounted from linsr2018/myapp
9b999b9e5af8: Mounted from linsr2018/myapp
675233026df0: Mounted from linsr2018/myapp
ddb2d7cdfff3: Mounted from linsr2018/myapp
1965cfbef2ab: Mounted from linsr2018/myapp
8d3ac3489996: Mounted from linsr2018/myapp
1.0: digest: sha256:04f75f3422e55affbdf7f14f0a2e5784d09d7774d9f7f695b412b065cdb484c3 size: 1782
上传完成后,登录Docker Hub可看到镜像已存在。现在,我们可以到其他机器上进行下载使用了。
多谢大家阅读,如果觉得本文有帮助,欢迎分享到朋友圈
相关文章
- Docker更新容器镜像的三种方法
- docker打包容器
- docker容器概念介绍和简单的应用
- docker部署项目,对镜像,容器的操作
- docker导出镜像命令_docker save将容器保存为镜像
- docker命令总结:镜像到容器
- ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runn
- Docker容器实战八:镜像管理命令
- Ngnix反向代理Docker容器后404
- 数百个Docker容器镜像中隐藏漏洞,下载量高达数十亿次
- Docker设置容器开机自启
- Docker服务的拉取镜像命令(docker pull 镜像名称)
- Docker服务的删除本地镜像命令(docker rmi 镜像id)
- Docker启动容器命令(docker start 容器名称)
- Docker关闭容器命令(docker stop)
- 【Docker 系列】docker 学习 三
- 【Docker 系列】docker 学习 四,镜像相关原理
- 【Docker 系列】docker 学习 五,容器数据卷
- 【Docker 系列】docker 学习十一,docker 总结和面试题整理
- docker 从容器创建新镜像,及镜像的备份和恢复
- 如何清理Docker容器、镜像、数据卷和网络
- docker容器运行原理以及创建过程
- Docker容器的创建、启动、和停止详解架构师
- springboot整合docker部署(两种构建Docker镜像方式)详解编程语言
- 基于Windows Server 2022 微软发布新Docker容器镜像
- 使用Docker部署Redis缓存服务(dockerredis)
- 监控宝首推Docker监控 确保容器稳定运行
- docker-podman管理容器
- macvlan网络结构分析-每天5分钟玩转Docker容器技术(56)
- 在 overlay 中运行容器 – 每天5分钟玩转 Docker 容器技术(51)
- Red Hat 的去 Docker 化容器实践
- Docker与k8s的恩怨情仇(六)—— “容器编排”上演“终结者”大片