当前位置: 首页 > news >正文

利用 Google Artifact Repository 构建docker 镜像仓库

参考了google 官方文档
https://cloud.google.com/artifact-registry/docs/docker/store-docker-container-images

首先 enable GAR api

gcloud services enable artifactregistry.googleapis.com
gcloud services list | grep -i artifact
artifactregistry.googleapis.com      Artifact Registry API




其次创建1个docker image 仓库

gcloud artifacts repositories create my-docker-repo --repository-format=docker --location=eurepo-west2 --description=“”

用如下命令来list 已有的仓库

> gcloud artifacts repositories list
Listing items under project jason-hsbc, across all locations.ARTIFACT_REGISTRY
REPOSITORY      FORMAT  MODE                 DESCRIPTION                                                                                 LOCATION      LABELS                          ENCRYPTION          CREATE_TIME          UPDATE_TIME          SIZE (MB)
gcf-artifacts   DOCKER  STANDARD_REPOSITORY  This repository is created and used by Cloud Functions for storing function docker images.  europe-west2  goog-managed-by=cloudfunctions  Google-managed key  2023-11-05T04:54:28  2023-11-05T04:56:07  744.026
java-repo       MAVEN   STANDARD_REPOSITORY  Java package repository                                                                     europe-west2                                  Google-managed key  2023-11-11T03:21:31  2023-11-11T03:21:31  0
my-docker-repo  DOCKER  STANDARD_REPOSITORY                                                                                              europe-west2                                  Google-managed key  2023-09-09T17:01:40  2023-09-09T17:01:40  0




配置docker 的验证方法

因为之后我们需要用docker push 把镜像推送到 Google AR, 所以我们在docker的配置文件里配置docker 访问 Google AR 的验证方式。

docker 到 GAR 的验证方式有四种:

1. gcloud credential helper

配置您的 ArtifactRegistry 凭据,以便直接在 gcloud 中与 Docker 一起使用。 这是最简单的身份验证方法,但可能比Standalone Docker credential helper慢

2. Standalone Docker credential helper

此选项主要用于配置您的凭据,以便在没有 Google Cloud CLI 的情况下与 Docker 一起使用。 它比 gcloud 凭据帮助程序快得多,并使用应用程序默认凭据 (ADC) 自动查找环境中的凭据。

3. Access token

您可以为服务帐户生成短期访问令牌,然后使用该令牌进行密码身份验证。 由于令牌的有效期仅为 60 分钟,因此它是比服务帐户密钥更安全的选择。

4. Service account key

用户管理的密钥对,可用作服务帐户的凭据。 由于凭证的有效期很长,因此它是所有可用身份验证方法中最不安全的选项。

具体参考:
https://cloud.google.com/artifact-registry/docs/docker/authentication

这里选择最简单的方法1: gcloud credential helper

执行以下命令
gcloud auth configure-docker europe-west2-docker.pkg.dev

high lighted 部分请替换成你当前repo所在的region

gateman@DESKTOP-UIU9RFJ:/var/lib/jenkins/workspace/CloudRun/build@2$ gcloud auth configure-docker europe-west2-docker.pkg.dev
Adding credentials for: europe-west2-docker.pkg.dev
After update, the following will be written to your Docker config file located at [/home/gateman/.docker/config.json]:{"credHelpers": {"europe-west2-docker.pkg.dev": "gcloud"}
}Do you want to continue (Y/n)?  yDocker configuration file updated.

当执行完成, /home/gateman/.docker/config.json 会被updated




docker build or tag

这时你就可以用docker build or docker tag 去为你的镜像打上正确 镜像地址 和 标签
例如

gateman@instance-2:~/Projects/spring-boot-for-cloud-run$ sudo docker build -t europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/helloservice:0.0.1-test .
[+] Building 0.2s (2/3)                                                                                                                                                                docker:default
[+] Building 5.0s (8/8) FINISHED                                                                                                                                                       docker:default=> [internal] load build definition from Dockerfile                                                                                                                                             0.0s=> => transferring dockerfile: 367B                                                                                                                                                             0.0s=> [internal] load .dockerignore                                                                                                                                                                0.0s=> => transferring context: 2B                                                                                                                                                                  0.0s=> [internal] load metadata for docker.io/dockette/jdk8:latest                                                                                                                                  1.0s=> [1/3] FROM docker.io/dockette/jdk8@sha256:0e87d0c795b0b405a37a95b043b274f2c8539777cd94edc1952502cc6c034cf0                                                                                   2.9s=> => resolve docker.io/dockette/jdk8@sha256:0e87d0c795b0b405a37a95b043b274f2c8539777cd94edc1952502cc6c034cf0                                                                                   0.0s=> => sha256:0e87d0c795b0b405a37a95b043b274f2c8539777cd94edc1952502cc6c034cf0 1.16kB / 1.16kB                                                                                                   0.0s=> => sha256:13041d54229cc20958f6524b6256964a99b6bea415204e7ed29f96bdc60b0f56 7.99kB / 7.99kB                                                                                                   0.0s=> => sha256:8e3ba11ec2a2b39ab372c60c16b421536e50e5ce64a0bc81765c2e38381bcff6 2.21MB / 2.21MB                                                                                                   0.3s=> => sha256:9b3c9c2732298ae00f74462af3984d87364a5a1c56c517fd2b26c31829cdee12 503.25kB / 503.25kB                                                                                               0.2s=> => sha256:4b79398611a193376a779d409b3d194f85d5922137cf55bcbef8efca0c2d0be9 57.43MB / 57.43MB                                                                                                 1.4s=> => sha256:bd535a9d85176af573232201339448103487bb020e6d3dcec9d71fb3d48c45e0 93B / 93B                                                                                                         0.4s=> => extracting sha256:8e3ba11ec2a2b39ab372c60c16b421536e50e5ce64a0bc81765c2e38381bcff6                                                                                                        0.1s=> => extracting sha256:9b3c9c2732298ae00f74462af3984d87364a5a1c56c517fd2b26c31829cdee12                                                                                                        0.0s=> => extracting sha256:4b79398611a193376a779d409b3d194f85d5922137cf55bcbef8efca0c2d0be9                                                                                                        1.4s=> => extracting sha256:bd535a9d85176af573232201339448103487bb020e6d3dcec9d71fb3d48c45e0                                                                                                        0.0s=> [internal] load build context                                                                                                                                                                0.0s=> => transferring context: 4.21kB                                                                                                                                                              0.0s=> [2/3] WORKDIR /app                                                                                                                                                                           0.8s=> [3/3] COPY target/*.jar app.jar                                                                                                                                                              0.0s=> exporting to image                                                                                                                                                                           0.0s=> => exporting layers                                                                                                                                                                          0.0s=> => writing image sha256:221b39f6f5ea8e8c6c9d3461b2490b59b977408c2dd97f0423f099a737a1fe4c                                                                                                     0.0s=> => naming to europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/helloservice:0.0.1-test     




docker push

这样就可以把镜像推送到GAR了

gateman@instance-2:~/Projects/spring-boot-for-cloud-run$ docker push europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/helloservice:0.0.1-test
The push refers to repository [europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/helloservice]
27b10e04e8e3: Pushed 
40cfa0202c65: Pushed 
43d79ecfdc6c: Pushed 
bc4a7b790ce8: Pushed 
e4a87dd198ff: Pushed 
73046094a9b8: Pushed 
0.0.1-test: digest: sha256:2796c54b46ea85a3747f6599e37f5beed32a817dd00cb1e4f95d2feb7820b6a4 size: 1571

相关文章:

  • C语言左移与右移学习
  • 由浅入深学习统计学 - 常用统计图形学习
  • Stream流的groupingBy
  • 100天精通风控建模(原理+Python实现)——第3天:风控建模中如何处理缺失值?
  • 如何有效的保护Windows登录 安当加密
  • Googletest(Gtest)使用case指南
  • Leetcode153. Find Minimum in Rotated Sorted Array
  • C语言进阶
  • Mybatis-plus 内部提供的 ServiceImpl<M extends BaseMapper<T>, T> 学习总结
  • 链表的实现(文末附完整代码)
  • shell之route命令介绍
  • Apipost-Helper:IDEA中的类postman工具
  • 数据结构—内部排序(上)
  • 为 Ubuntu 虚拟机构建 SSH 服务器
  • 【蓝桥杯选拔赛真题66】Scratch画图机器人 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析
  • 深入了解以太坊
  • 【Leetcode】101. 对称二叉树
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [数据结构]链表的实现在PHP中
  • Angular2开发踩坑系列-生产环境编译
  • Asm.js的简单介绍
  • docker容器内的网络抓包
  • MySQL数据库运维之数据恢复
  • python docx文档转html页面
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 关于字符编码你应该知道的事情
  • 解析 Webpack中import、require、按需加载的执行过程
  • 近期前端发展计划
  • 浏览器缓存机制分析
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 用mpvue开发微信小程序
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #define用法
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (07)Hive——窗口函数详解
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)JAVA使用POI操作excel
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十三)Flask之特殊装饰器详解
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)scrum常见工具列表
  • (转)Sublime Text3配置Lua运行环境
  • .md即markdown文件的基本常用编写语法
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 中的轻量级线程安全