写点什么

如何拉取多架构镜像存储到私有库

作者:wystanxu
  • 2023-11-28
    广东
  • 本文字数:2381 字

    阅读完需:约 8 分钟

如下,使用 etcd 的镜像,维护到私有库

1.本地创建私服镜像目录

$ mkdir ~/test$ cd ~/test && mkdir data auth docker-compose$ touch ~/test/docker-compose/docker-compose.yml# 创建一个用户,执行完成后会生成文件 /home/auth/registry.password$ cd ~/test/auth && htpasswd -Bc registry.password root
复制代码


# docker-compose.ymlversion: '3'services:  registry:    image: registry:2    ports:    - "5001:5000"    environment:      REGISTRY_AUTH: htpasswd      REGISTRY_AUTH_HTPASSWD_REALM: MyRegistry      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data    volumes:      - ~/test/auth:/auth      - ~/test/data:/data
复制代码


$ cd ~/test/docker-compose && docker-compose up -d
复制代码

2.访问 registy 服务

# 访问输入用户名密码 $ curl -X GET -u'root:123456' http://localhost:5001/v2/_catalog
# 登陆docker registry$ docker login localhost:5001Username: rootPassword: Login Succeeded
复制代码

3.添加私有库到 docker 配置

# /etc/docker/daemon.json or ~/.docker/daemon.json{ "insecure-registries": [   "localhost:5001" ]}
# 登陆registry$ docker login localhost:5001
# 构建镜像到本地$ cd my-project && docker build -t my-image:v0.0.1 .
# 推送镜像到harbor私有库# docker push <Registry>/<Image>$ docker tag ovs-aline:v0.0.1 localhost:5001/devops/ovs-aline:v0.0.1
# docker push registry.example.com/myimage# # 在 ~/test/data/ 目录存放镜像文件$ docker push localhost:5001/devops/ovs-aline:v0.0.1
# docker pull registry.example.com/myimage$ docker pull localhost:5001/devops/ovs-aline:v0.0.1
# 查看仓库镜像列表$ curl -X GET -u'root:123456' http://localhost:5001/v2/_catalog{"repositories":["devops/ovs-aline"]}
# 查看仓库镜像tag$ curl -X GET -u'root:123456' http://localhost:5001/v2/devops/ovs-aline/tags/list{"name":"devops/ovs-aline","tags":["v0.0.1"]}
复制代码

4.web 服务提供 registy 可视化界面

$ docker inspect ${registry_id}
# start$ docker run -d -p 8080:8080 \ --name registry-web \ --net docker-compose_default \ --link docker-compose-registry-1 \ -e REGISTRY_URL=http://docker-compose-registry-1:5000/v2 \ -e REGISTRY_BASIC_AUTH="cm9vdDoxMjM0NTY=" \ -e REGISTRY_NAME=localhost \ hyper/docker-registry-web

# REGISTRY_BASIC_AUTH其实是一个base64# 对 `username:password` 进行base64 encode
复制代码

Q&A

1.htpasswd 是什么命令

htpasswd 命令是 Apache Web 服务器的一个工具,用于创建和管理用户账户文件的命令行工具,可用于创建新用户、更改密码并删除已有用户。

2.registry 的 REGISTRY_AUTH_HTPASSWD_REALM 参数是干嘛的

REGISTRY_AUTH_HTPASSWD_REALM 参数是用于设置 Docker registry 的基本认证(Basic Authentication)的 HTTP Realm。如果设置了 REGISTRY_AUTH_HTPASSWD_REALM 参数值为"My Docker Registry",则用户在登录时将看到类似于"Please enter your My Docker Registry credentials"的提示,有助于确保用户知道他们正在访问受保护的资源。

3.registry 的参数 REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY 是干嘛的

REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY 参数是用于设置 Docker registry 存储镜像的根目录。默认情况下,Docker registry 使用/var/lib/registry 作为默认的存储目录。

4.监听网卡
$ sudo tcpdump -nei lo0 port 5001$ telnet 127.0.0.1 5001
复制代码
5.docker registry 的 token
$ cat ~/.docker/config.json
复制代码


username:password进行 base64 encode 可以获得。

相关资料


多架构镜像

quay.io/coreos/etcd:v3.5.0


使用 manifest 创建多架构镜像



$ docker pull --platform=linux/amd64 quay.io/coreos/etcd:v3.5.0
$ docker tag quay.io/coreos/etcd:v3.5.0 registry.bingosoft.net/bingokube/etcd:v3.5.0-amd64
$ docker pull --platform=linux/arm64 quay.io/coreos/etcd:v3.5.0
$ docker tag quay.io/coreos/etcd:v3.5.0 registry.bingosoft.net/bingokube/etcd:v3.5.0-arm64

$ docker push registry.bingosoft.net/bingokube/etcd:v3.5.0-amd64
$ docker push registry.bingosoft.net/bingokube/etcd:v3.5.0-arm64
# 此时无法拉取镜像下面的无法执行$ docker pull registry.bingosoft.net/bingokube/etcd:v3.5.0
# 制作清单$ docker manifest create --insecure registry.bingosoft.net/bingokube/etcd:v3.5.0 registry.bingosoft.net/bingokube/etcd:v3.5.0-amd64 registry.bingosoft.net/bingokube/etcd:v3.5.0-arm64
# 推送清单$ docker manifest push --insecure registry.bingosoft.net/bingokube/etcd:v3.5.0
# 查看清单$ docker manifest inspect registry.bingosoft.net/bingokube/etcd:v3.5.0{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1783, "digest": "sha256:abc", "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1576, "digest": "sha256:abc", "platform": { "architecture": "arm64", "os": "linux" } } ]}
复制代码


用户头像

wystanxu

关注

还未添加个人签名 2023-06-07 加入

还未添加个人简介

评论

发布
暂无评论
如何拉取多架构镜像存储到私有库_wystanxu_InfoQ写作社区