1.前言
本系列文章记录了从0开始学习Docker的过程,Docker系列历史文章:
(一)基本概念与安装使用
(二)如何使用Docker发布一个SpringBoot服务
在上一篇中留下了一个问题,使用Docker发布服务的方式,相对于传统的服务部署方式并没有优势,都是每次需要重新构建镜像,甚至更加繁琐。避免重复构建,有没有一种方式,可以把已经构建好的镜像直接交给其他人使用呢?
类似于使用git
推送或拉取代码、maven
的远程仓库来管理jar
包的方式,我们可以通过远程镜像仓库registry
来管理Docker镜像,而官方的镜像仓库就是我们在上一篇中已使用到的DockerHub
。
2.官方镜像仓库
使用DockerHub来管理镜像,需要经过以下3个步骤:
- 注册账号/登录官网
- 创建镜像仓库
- 推送镜像
2.1.账号注册
首次进入 DockerHub首页 可以通过右侧的表单注册账号,如果没有看到注册表单,则点击右上角的Register跳转,注册成功后,Docker官方会向填写的Email地址发送一个验证邮件,登录邮箱并验证完成后,账号就可以正式使用了。
注意:在此处输入的username会作为仓库的前缀,且不可修改,记得挑选一个喜欢的名字。
2.2.创建仓库
登录成功之后进入主页,可以看到自己创建的仓库,这是我为了测试事先创建两个仓库,还没有仓库的话,点击右上角的Create repository。
这里有两个注意点:
- 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:密码
下一步是给需要推送的镜像打上标签,标签的格式在上文中已经提过了,指令语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
结合刚刚创建的用户名,仓库名得到的语法如下:
docker tag hello-boot:1.0.0 dockerdoubleq/hello-boot:1.0.0
最后,使用docker push
将打上标签的镜像推送到仓库中,之后就可以在DockerHub上找到这个镜像了。
docker push dockerdoubleq/hello-boot:1.0.0
注意:镜像的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
。
点击左上角的新建按钮创建命名空间,这里我创建了一个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 tag
,docker 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
push
成功之后,就会看到在镜像仓库中已经自动创建了一个仓库,并把镜像推送到了仓库中。
4.结语
本篇主要记录了如何使用Docker的Registry
来解决镜像的存储与共享问题,介绍了国内、国外的镜像仓库使用方式,而在实际工作中,除了我们会自行打包构建服务以外,有时候还会涉及到一部分环境的搭建,例如中间件的安装。
下一篇将会介绍如何使用Registry
中已有的镜像来安装中间件,并将容器数据持久化到宿主机中。
如果觉得文章对你有帮助的话,可以帮忙点点赞哦!你们的支持是我更新最大的动力~