Docker(下):镜像仓库管理

镜像仓库管理

  • [1 阿里云镜像仓库的使用](#1 阿里云镜像仓库的使用)
    • [1.1 创建命名空间](#1.1 创建命名空间)
    • [1.2 推送镜像到阿里云镜像仓库](#1.2 推送镜像到阿里云镜像仓库)
    • [1.3 同步 Docker Hub 中的镜像到阿里云](#1.3 同步 Docker Hub 中的镜像到阿里云)
      • [(1)Pull -> Tag -> Push](#(1)Pull -> Tag -> Push)
      • [(2)skopeo(推荐,registry 直传不落盘)](#(2)skopeo(推荐,registry 直传不落盘))

常见的镜像仓库
Harbor:https://goharbor.io/
阿里云:https://cr.console.aliyun.com/
Docker官方:https://hub.docker.com/

镜像仓库可以放在公有云(阿里云、Docker Hub)、私有仓库、

镜像可以先同步到阿里云、再同步到私有云

服务在哪个云上,就同步到哪里

1 阿里云镜像仓库的使用

进入阿里云的容器镜像服务,点击右上角的控制台:

点击左上角的三条横线,然后在"产品与服务"中选择"容器镜像服务":

1.1 创建命名空间

命名空间就相当于Docker Hub的仓库名,接下来创建命名空间。

点击创建个人版示例:

学习的话,使用个人版就行了

命名空间的名字,要唯一,也就是没有被别人使用过:

创建一个公开的,一个私有的,其中公开仓库存放我们从公开仓库中拉取的,私有仓库自己制作的:

上面开启了自动创建仓库,那么仓库名就是命名空间的名字。

1.2 推送镜像到阿里云镜像仓库

下面是本地的镜像:

假如我想把 redis:6.0.20 推到我自己的命名空间。

先找到镜像地址:

改地址和 tag:

bash 复制代码
docker tag redis:6.0.20 crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2/redis:6.0.20

接着在网页端设置登录密码:

接着在终端登录:

bash 复制代码
docker login --username=xxxxx crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com
# 如果没有写地址,则默认登录 Docker Hub

如果准备退出,则用下面的命令:

bash 复制代码
docker logout crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com

接下来是推送镜像:

bash 复制代码
docker push crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2/redis:6.0.20

出现上面界面,说明推送成功。最后的提示表明,推送 Docker 镜像时,期望推送多平台镜像,但实际只生成并推送了单平台镜像,即 linux/arm64 版本未构建成功,最终只推送了 linux/amd64。我的工作不涉及 arm64 架构,所以这个提示不用理它。

我们点击镜像仓库,可以看到镜像名就是这里的"镜像仓库":

点进去可以看到版本,如果我们有多个版本,会在这里显示:

点击"基本信息"能看到如何拉取镜像:

拉取公开命名空间中的镜像不需要登录,拉取私有命名空间才需要。

1.3 同步 Docker Hub 中的镜像到阿里云

(1)Pull -> Tag -> Push

可以像前面一样,使用三条命令,先拉,后改tag,最后推送:

bash 复制代码
docker pull nginx:1.21
docker tag nginx:1.21 crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2/nginx:1.21
docker push crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2/nginx:1.21

也可以写一个 Dockerfile 文件,该文件只有一条指令:

bash 复制代码
FROM docker.io/library/nginx:1.21

然后执行:

bash 复制代码
docker buildx build --platform linux/amd64 \
  --provenance=false --sbom=false \
  -t crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2/nginx:1.21 \
  --push -f ./Dockerfile .

这样命令会少一些。

推送结束后,本地和阿里云镜像仓库都会有:

(2)skopeo(推荐,registry 直传不落盘)

skopeo 是一个不依赖 Docker 守护进程的容器镜像搬运工具------它直接跟镜像仓库(registry)的 HTTP API 对话,可以在两个仓库之间复制镜像,而不需要先把镜像拉到本机。

下面是 doker 与 skopeo 的对比:

使用前先安装:

bash 复制代码
# 安装
yum install -y skopeo          # RHEL/CentOS
# apt-get install -y skopeo      # Ubuntu,注意版本要 ≥1.9 才支持 --multi-arch

配置镜像站::

bash 复制代码
mkdir -p /etc/containers/registries.conf.d
cat > /etc/containers/registries.conf.d/001-docker-mirror.conf <<'EOF'
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "docker.io"

# 按响应速度自行增删,失败会自动 fallback 到下一个
[[registry.mirror]]
location = "docker.m.daocloud.io"
[[registry.mirror]]
location = "docker.xuanyuan.me"
[[registry.mirror]]
location = "docker.1ms.run"
EOF

接下来就是登录并同步:

bash 复制代码
# 登录目标端(如果前面已经使用 docker login 登录,这一步可以省略)
skopeo login crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com \
  --username=你的阿里云账号 --password=访问凭证密码

# 同步
skopeo copy --multi-arch=all \
  docker://docker.io/library/nginx:1.22 \
  docker://crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2/nginx:1.22

可以在镜像版本中看到我们刚刚推送的 1.22 版:

并且本地没有:

上面只是同步一个镜像,如果是一组镜像,那么可以批量同步。

在当前目录下新建一个名为 sync.yaml 的文件,内容如下:

bash 复制代码
# sync.yaml
docker.io:
  images:
    library/nginx: ["1.21", "1.25", "latest"]
    library/redis: ["7-alpine"]

然后执行:

bash 复制代码
skopeo sync --src yaml --dest docker --multi-arch=all --scoped sync.yaml \
  crpi-hfmqoeaccnhb4dwm.cn-shenzhen.personal.cr.aliyuncs.com/jim2
相关推荐
资讯第一线2 小时前
斐讯R1免登录配网》 [APP] [安卓版] 下载
运维
ONLYOFFICE2 小时前
ONLYOFFICE成为Linux操作系统 – Winux的预装办公套件
linux·运维·服务器
其实防守也摸鱼2 小时前
OpenClaw Windows 踩坑实战指南
运维·服务器·数据库·windows·github·copilot
新时代牛马2 小时前
嵌入式 Linux WiFi 框架完整篇:从cfg80211、mac80211 到wpa_supplicant
linux·运维·服务器
DreamLife☼2 小时前
Agent开发环境搭建完全指南
python·docker·typescript·node·工业知识点
探索云原生2 小时前
Kueue + HAMi vGPU 实战:显存与算力配额管理
docker·ai·云原生·kubernetes·gpu
吴声子夜歌2 小时前
Linux命令——打印
linux·运维·服务器
Jae den2 小时前
负载均衡到底解决什么问题?
运维·负载均衡
企鹅的蚂蚁2 小时前
Linux 开发板串口调试:picocom 从识别到退出的完整用法
linux·运维·服务器