【Docker】(三)使用registry远程镜像仓库管理镜像

1.前言

本系列文章记录了从0开始学习Docker的过程,Docker系列历史文章:

(一)基本概念与安装使用
(二)如何使用Docker发布一个SpringBoot服务

在上一篇中留下了一个问题,使用Docker发布服务的方式,相对于传统的服务部署方式并没有优势,都是每次需要重新构建镜像,甚至更加繁琐。避免重复构建,有没有一种方式,可以把已经构建好的镜像直接交给其他人使用呢?

类似于使用git推送或拉取代码、maven的远程仓库来管理jar包的方式,我们可以通过远程镜像仓库registry来管理Docker镜像,而官方的镜像仓库就是我们在上一篇中已使用到的DockerHub

2.官方镜像仓库

使用DockerHub来管理镜像,需要经过以下3个步骤:

  • 注册账号/登录官网
  • 创建镜像仓库
  • 推送镜像

2.1.账号注册

image.png
首次进入 DockerHub首页 可以通过右侧的表单注册账号,如果没有看到注册表单,则点击右上角的Register跳转,注册成功后,Docker官方会向填写的Email地址发送一个验证邮件,登录邮箱并验证完成后,账号就可以正式使用了。

注意:在此处输入的username会作为仓库的前缀,且不可修改,记得挑选一个喜欢的名字。

2.2.创建仓库

1669035800892.png
登录成功之后进入主页,可以看到自己创建的仓库,这是我为了测试事先创建两个仓库,还没有仓库的话,点击右上角的Create repository

image.png

这里有两个注意点:

  • name: 可以看到右边的提示,镜像的推送语法是仓库名:标签,只有这样才能推送成功,最佳实践是仓库的name需要和服务名保持一致,这样看到仓库自然就知道这是属于哪个服务的镜像。
  • Visibility: DockerHub的免费版提供的私有仓库只有1个,如果想创建多个私有仓库,只有成为付费用户,这里先选择Public仓库。

2.3.推送镜像

现在将本地已经构建好的镜像hello-boot:1.0.0推送到镜像仓库中,首先需要做的就是登录,登录指令语法:

docker login [OPTIONS] [SERVER]
  • OPTIONS:登录的选项,指用户名和密码
  • SERVER:登录的是服务器,默认是DockerHub,如果登录的是国内镜像仓库,如腾讯云,则需要指定服务器地址。

我的用户名是dockerdoubleq,下面的指令中换成刚刚注册成功的账号用户名与密码,提示Login Succeeded表示登录成功

docker login -u dockerdoubleq -p 123456
  • -u:用户名
  • -p:密码

image.png

下一步是给需要推送的镜像打上标签,标签的格式在上文中已经提过了,指令语法:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

结合刚刚创建的用户名仓库名得到的语法如下:

 docker tag hello-boot:1.0.0 dockerdoubleq/hello-boot:1.0.0 

image.png

最后,使用docker push将打上标签的镜像推送到仓库中,之后就可以在DockerHub上找到这个镜像了。

docker push dockerdoubleq/hello-boot:1.0.0 

image.png

注意:镜像的tag在仓库已存在的话,再次推送会覆盖镜像仓库中的原有镜像,如果是在生产环境使用,每次发布时需要修改tag的值,这里的1.0.0其实就是版本号,可以在这基础上按照版本号规范进行递增。

2.4.拉取镜像

将镜像推送到 DockerHub 之后,也不能忘了我们的初衷,即共享和复用镜像。

docker pull dockerdoubleq/hello-boot:1.0.0

可以在任意一台装有Docker的服务器中执行上面的指令获取到刚刚上传的镜像,再通过docker run就可以运行服务了,不需要再从打包开始构建镜像,这就能体现出Docker的价值了。

想象一下,任意一台安装有Docker的服务器都可以打包镜像,也可以拉取并使用镜像,在实际的生产中,我们可以在Jenkins所在的服务器安装Docker,执行自动化打包、构建镜像、上传镜像的操作,再由服务节点下载并运行镜像,这样就有了一个自动化部署的雏形,对于服务的扩展也很友好,再也不需要去服务器中从头开始搭建环境了。

2.5.DockerHub的缺点

DockerHub的缺点也很明显,服务器在国外,网速很不稳定,推、拉镜像较慢,再一个就是只提供了一个私有化仓库。所以我们不管是个人使用还是企业使用,一般都会选择国内的镜像仓库,如:阿里云、腾讯云等。

接下来看一下如何使用国内的镜像仓库管理镜像。

3.国内镜像仓库

这里以腾讯云的容器仓库为例,来说明一下国内镜像仓库的操作方式,有了DockerHub的使用基础之后,再上手国内的镜像仓库会觉得非常简单,流程都是大同小异的:

  • 注册腾讯云账号
  • 登录账号,进入容器镜像服务
  • 创建命名空间
  • 推送会拉取镜像

官网已经有了较详细的教程,可以根据提示进行学习。附:腾讯云个人版镜像仓库入门教程,下面着重说一下注意点:

3.1.命名空间

这里可以简单的理解为对仓库的分组,在实际的生产中,一个命名空间往往对应了一个产品,而每个产品都可能会对应多个项目或服务,每个服务都会对应一个镜像仓库。
使用DockerHub来做类比的话,这里的命名空间指的就是上面的用户名dockerdoubleq

image.png

点击左上角的新建按钮创建命名空间,这里我创建了一个double,此外,镜像仓库可以选择在控制台中手动创建,也可以在push镜像的时候,由push指令自动创建。

3.2.推拉镜像

还记得Docker客户端登录的语法吗:

docker login [OPTIONS] [SERVER]

使用腾讯云后,这里的SERVER就需要填写腾讯云的访问域名,所以此处的登录脚本会发生一些变化:

docker login --username=100025542657 --password=123456 ccr.ccs.tencentyun.com

注:--username= 等价于 -u --password=等价于-p


docker tagdocker push以及docker pull的脚本也需要带上腾讯云的访问域名,如下:

docker tag hello-boot:1.0.0 ccr.ccs.tencentyun.com/double/hello-boot:1.0.0
docker push ccr.ccs.tencentyun.com/double/hello-boot:1.0.0
docker pull ccr.ccs.tencentyun.com/double/hello-boot:1.0.0

image.png
push成功之后,就会看到在镜像仓库中已经自动创建了一个仓库,并把镜像推送到了仓库中。

4.结语

本篇主要记录了如何使用Docker的Registry来解决镜像的存储与共享问题,介绍了国内、国外的镜像仓库使用方式,而在实际工作中,除了我们会自行打包构建服务以外,有时候还会涉及到一部分环境的搭建,例如中间件的安装。

下一篇将会介绍如何使用Registry中已有的镜像来安装中间件,并将容器数据持久化到宿主机中。


如果觉得文章对你有帮助的话,可以帮忙点点赞哦!你们的支持是我更新最大的动力~

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥之以墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值