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
相关推荐
誰能久伴不乏1 分钟前
保姆级 Docker 入门教程
docker·容器·eureka
分布式存储与RustFS13 分钟前
模型 checkpoint 放对象存储:分片上传、断点续传与残留清理
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
一条破秋裤1 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
FED_AF3 小时前
Linux运维“邪修”功法之通配符
linux·运维
YOLO数据集集合4 小时前
风机叶片表面损伤检测数据集 | 风机叶片 表面损伤 污渍检测 无人机巡检 风电运维9119期
运维·人工智能·计算机视觉·目标跟踪·无人机·智慧城市·电力巡检
j7~4 小时前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接
分布式存储与RustFS4 小时前
用RustFS给Harbor当S3存储后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
泡海椒5 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
vipxieliang5 小时前
Docker vs Podman vs containerd:容器运行时全景
docker·容器
vipxieliang5 小时前
数据持久化方案:卷、挂载、权限与备份恢复
docker·容器