使用腾讯云容器镜像仓库代替 Docker 官方的 Docker Registry

| Docker

 

内容概览

  • 前言
  • 在腾讯云开通镜像仓库
  • 在命令行中登录腾讯云镜像服务帐号
  • 将镜像推送到腾讯云镜像仓库
  • 在远程服务器登录腾讯云镜像仓库并拉取镜像
  • 总结

 

前言

 

在国内访问由 Docker 官方提供的 Docker Registry 实在 太慢,而且 免费的镜像仓库只有 1 个!现在,Ficow 需要一个镜像仓库用来存储博客后台程序,还需要一个镜像仓库用来存储 App 后端接口程序。所以,Ficow 不得不寻找官方 Docker Registry 的替代品。

目前为止,我找到了两个比较优质的镜像仓库提供方:

由于 Ficow 的博客采用了 腾讯云服务器,而且 Ficow 越来越 偏爱腾讯的产品(阿里云多次伤透了我的心😨),所以这篇文章只介绍腾讯云镜像仓库。不过,方法应该是类似的,只是某些Docker参数不同、平台提供的控制台页面不同罢了。

 

在腾讯云开通镜像仓库

 

在开通镜像仓库之前,您需要先创建 容器镜像服务实例

点击 新建 之后,输入这个实例的信息。比如:

创建完成之后,需要等待 实例列表中显示实例的状态为 运行中,我们才可以成功访问这个服务实例所在的域名(my-docker-registry.tencentcloudcr.com):

接下来,我们还需要为镜像仓库创建 命名空间

然后,输入命名空间的名称,比如 您的英文名 或者 公司的英文名

您可以创建多个命名空间,对不同的命名空间进行不同的配置。Ficow 建议您将 访问级别 设置为 私有,除非您确实想让他人自由地访问您的镜像仓库。

到这一步,您可以创建一个镜像仓库了!

点击创建,即可开始新建镜像仓库:

选择您刚刚创建的 命名空间,然后输入镜像仓库的名称。镜像来源 选择 本地推送镜像,之后您就可以将您本地的镜像推送到这个镜像仓库。

至此,创建镜像仓库的任务就完成了!如果您有任何问题,欢迎您给 Ficow 留言~

 

在命令行中登录腾讯云镜像服务帐号

 

刚刚创建的容器镜像服务,默认是没有开启公网访问的。所以如果您需要在公网访问该镜像服务提供的域名,您就必须开启公网访问入口。

如果没有特殊要求,您直接允许所有公网IP访问即可。当然,您也可以只允许您的服务器访问该域名:

 

接下来,查看刚刚创建的 镜像仓库,您可以很方便地复制仓库的地址。您还可以查看 快捷指令

快捷指令中有常用的 Docker 客户端操作(登录、拉取、推送等):

在开始推送您本地的 Docker 镜像到这个镜像仓库之前,您还需要在本地的 Docker 客户端中登录镜像服务提供的帐号。
然而,腾讯云提供的 快捷指令 中的登录指令使用了 --password 参数,这种登录方式已经被新版的 Docker 废弃了。您需要使用另外一个更安全的指令来登录。

首先,复制 快捷指令 里的登录指令中的 --password 后面的那一串字符串(ey....)。
然后,在您的电脑中启动命令行终端,并在 ~ 目录中创建一个 my_tencent_docker_password 文件,然后复制的那一串字符串粘贴到这个文件中。

# 创建 my_tencent_docker_password 文件
touch ~/my_tencent_docker_password
# 将复制的字符串写入到该文件中
echo "ey.." >> ~/my_tencent_docker_password

最后,将腾讯云提供的用于登录的 快捷指令 里面的 --password 参数和后面的内容替换为:

# docker login 您的腾讯云镜像仓库地址 --username 您的腾讯云账号ID --password-stdin < ~/my_tencent_docker_password
# 比如
docker login my-docker-registry.tencentcloudcr.com --username 123456789 --password-stdin < ~/my_tencent_docker_password

执行替换后的命令,您就可以凭借 my_tencent_docker_password 文件中的密钥成功登录该镜像仓库。请注意,该密钥的有效期为 1 小时

如果需要有效期更长的密钥,您可以去创建 访问凭证。在【实例列表】中,点击实例的名称,然后去到【访问凭证】页面:

创建后,您可以复制该凭证,然后替换 my_tencent_docker_password 文件中的内容:

Ficow 建议您为您本地的机器和远程服务器分别创建访问凭证,这样可以提高安全性。一旦泄露,马上到腾讯云控制台禁用或者删除凭证即可。

登录完毕,接下来您就可以去推送和拉取镜像。如果有任何问题,欢迎您给 Ficow 留言~

 

将镜像推送到腾讯云镜像仓库

 

首先,您需要在构建镜像时指定腾讯云镜像服务的域名(使用 Docker 官方提供的 Docker Registry 的时候不需要指定):

# docker build -t 镜像服务实例的域名/命名空间/镜像仓库名称 .
# 比如:
docker build -t my-docker-registry.tencentcloudcr.com/ficowshen/ficow_api .

然后,在推送的时候也需要指定腾讯云镜像服务的域名:

docker push my-docker-registry.tencentcloudcr.com/ficowshen/ficow_api .

此时,my-docker-registry.tencentcloudcr.com/ficowshen/ficow_api 就是该镜像名称。

 

Ficow 建议您在项目的根目录创建一个名为 Makefile 的文件来定义这些繁琐的 Docker 指令。比如:

docker-build:
    docker push my-docker-registry.tencentcloudcr.com/ficowshen/ficow_api .

docker-push:
    docker push my-docker-registry.tencentcloudcr.com/ficowshen/ficow_api

然后,在 Makefile 文件所在的目录执行相应的命令就可以很快捷地完成操作:

# 构建镜像
make docker-build
# 推送镜像到仓库
make docker-push

推送到镜像仓库之后,您就可以去远程服务器拉取这个镜像了~

 

在远程服务器登录腾讯云镜像仓库并拉取镜像

 

在拉取之前,请确保您已经在 Docker 客户端中登录了腾讯云镜像服务提供的帐号。如果还未登录,请参照之前的登录步骤进行登录。

此时,您只需要在拉取操作中使用和前一个步骤相同的镜像名称进行拉取即可:

docker pull my-docker-registry.tencentcloudcr.com/ficowshen/ficow_api

如果您的镜像文件非常大,此时您应该可以感受到使用腾讯云镜像仓库和 Docker Registry 之间的差别了。真的快太多了~

 

总结

 

Docker 真的很好用!腾讯云提供的镜像仓库让我们这些墙内的人能够更顺畅地使用 Docker,非常感谢腾讯云~

以上就是本文的全部内容,如果您有任何疑问或者建议,欢迎您给 Ficow 留言喔~

 

参考内容:
腾讯云镜像仓库
Docker: Using —password via the CLI is insecure. Use —password-stdin

 

觉得不错?点个赞呗~

本文链接:使用腾讯云容器镜像仓库代替 Docker 官方的 Docker Registry

转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog

评论区(期待你的留言)