【问题标题】:how to load all saved docker images in parallel如何并行加载所有保存的 docker 图像
【发布时间】:2020-11-24 18:25:48
【问题描述】:

我有 20 张图像 TARed,现在我想将这些图像加载到另一个系统上。但是,加载本身需要 30 到 40 分钟。我相信所有图像都是相互独立的,因此所有图像加载都应该并行进行。
我尝试了诸如在后台(&)和wait 中运行加载命令直到加载完成的解决方案,但观察到它需要更多时间。非常感谢这里的任何帮助。

注意:- 不确定 -idocker load 命令的选项。

【问题讨论】:

  • 我想这会占用大量内存。您的服务器是否已用尽内存?您可以增加 docker 引擎的最大内存量以加快速度。我不认为您可以一次真正有效地加载所有 20 张图像。也许顺序是最适合您的方法。
  • 是一个大的 tar 文件还是 20 个单独的文件?您可以使用 Docker 注册表和 docker pull 代替吗?
  • @arjabbar如何为我的 docker 引擎增加内存?

标签: docker parallel-processing load


【解决方案1】:

试试

find /path/to/image/archives/ -iname "*.tar" -o -iname "*.tar.xz" |xargs -r -P4 -i docker load -i {}

这将并行加载 Docker 映像存档(将 -P4 调整为所需的并行加载数量或设置为 -P0 以实现无限并发)。

【讨论】:

    【解决方案2】:

    为了加快提取/保存过程,您可以使用以下 sn-p 的想法:

    #!/usr/bin/env bash
    
    TEMP_FILE="docker-compose.image.pull.yaml"
    
    image_name()
    {
        local name="$1"
        echo "$name" | awk -F '[:/]' '{ print $1 }'
    }
    
    pull_images_file_gen()
    {
        local from_file="$1"
        cat <<EOF >"$TEMP_FILE"
    version: '3.4'
    services:
    EOF
        while read -r line; do
            cat <<EOF >>"$TEMP_FILE"
        $(image_name "$line"):
            image: $line
    EOF
        done < "$from_file"
    
    }
    
    save_images()
    {
        local from_file="$1"
        while read -r line; do
            docker save -o /tmp/"$(image_name "$line")".tar "$line"  &>/dev/null & disown;
        done < "$from_file"
    }
    
    pull_images_file_gen "images"
    docker-compose -f $TEMP_FILE pull
    save_images "images"
    rm -f $TEMP_FILE
    

    images - 逐行包含所需的 Docker 图像名称列表。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多