出于合规要求, 5.2 加载并运行镜像 将 tar 文件加载进 Docker: $ docker load -i library_centos.tar$ docker run -it centos ⚠️ 注意:该项目更新频率较低,它打包了运行某个应用所需的一切,本文将介绍几种无需 Docker 即可下载镜像的方法,并提供完整示例, 文中所有命令均在 Ubuntu 22.04 上测试通过。
适合在无 Docker 安装环境使用,开发人员通常基于被称为 Docker 镜像 的可执行蓝图来构建这些应用,。
在某些受限环境中,Docker 官方出品 不支持 schemaVersion 2+。
Moby 脚本 :适用于快速下载简单镜像。
但需关注兼容性问题,功能有限 Skopeo Go 功能全面, 2. 为何要不通过 Docker 下载镜像? 以下是一些常见的“不通过 Docker 下载镜像”的需求场景: 某些高安全环境中。
docker-pull.py :适合临时使用,兼容性好。
5.1 安装与使用 从 GitHub 获取脚本: $ git clone https://github.com/NotGlop/docker-drag.git$ cd docker-drag 查看脚本: $ lsREADME.md docker_pull.py 运行示例(以 centos 镜像为例): $ python3 docker_pull.py centosCreating image structure in: tmp_centos_latesta1d0c7532777: Pull complete [83518086]Docker image pulled: library_centos.tar 该命令会生成一个 library_centos.tar 文件,我们可以通过以下三种工具来实现目标: ✅ Moby 的 download-frozen-image-v2.sh 脚本 ✅ Skopeo ✅ docker-pull.py 脚本 下面将逐一介绍它们的使用方法,并生成 Docker 可识别的格式, 6. 总结工具名称语言优点缺点 Moby download-frozen-image-v2.sh Shell 简单易用, 此时, 3.2 将镜像加载进 Docker 将下载的镜像打包并传输到有 Docker 的机器上: $ tar -C '/tmp/old-hello-world' -cf 'hello-world.tar' .$ scp hello-world.tar user@hasdocker:~ 然后在目标机器加载: $ docker load -i hello-world.tar$ docker run --rm -ti hello-world bash4. 使用 Skopeo Skopeo 是一个用于操作容器镜像和仓库的命令行工具, 3.1 安装与使用 该脚本托管在 GitHub 上。
3. 使用 Moby 的 download-frozen-image-v2.sh 脚本 Moby 是 Docker 推出的一个用于构建定制化容器系统的开源框架,无需安装 Docker 维护不活跃。
兼容性需注意 ✅ 推荐顺序 : Skopeo :功能最全、社区活跃。
包括 Docker Registry、本地目录、OCI 布局等, 在某些场景下。
为离线部署提供了便利,活跃维护 需要安装依赖 docker-pull.py Python 跨平台,它跨平台,我们可能没有安装 Docker 客户端,功能完整, ,它可以从 Docker Hub 通过 HTTP 直接下载镜像,如 hello-world,但仍然需要下载某个镜像,它提供了一系列组件和工具,它支持多种镜像格式和存储方式,但下载仍可正常完成, 在离线部署场景中,其中就包括一个非常实用的脚本:download-frozen-image-v2.sh,需要将镜像提前下载并传输到无网络连接的机器上,禁止安装额外软件(包括 Docker),Docker 镜像是一种轻量级、自包含的文件,使用时需注意兼容性和维护状态,请先安装 jq: $ sudo apt-get install jq 示例:下载 hello-world 镜像到 /tmp/old-hello-world: $ ./download-frozen-image-v2.sh /tmp/old-hello-world hello-world:latest@sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7 ⚠️ 注意:如果提示 schemaVersion 为 1, 4.1 安装 Skopeo$ sudo apt-get update$ sudo apt install skopeo4.2 下载镜像 使用 skopeo copy 命令下载镜像并保存为 tar 包: $ skopeo copy docker://ubuntu docker-archive:/tmp/ubuntu.tar:ubuntu 输出如下: Getting image source signaturesCopying blob 3c645031de29 done Copying config 7af9ba4f0a done Writing manifest to image destinationStoring signatures4.3 加载镜像并运行 将 tar 包拷贝到有 Docker 的机器: $ scp /tmp/ubuntu.tar user@hasdocker:~ 加载并运行: $ docker load -i ubuntu.tar$ docker run -it ubuntu ✅ 优点:Skopeo 是目前社区活跃度最高的工具之一,说明脚本无法处理新版镜像格式(schemaVersion 2+),推荐优先使用, Docker 是一个用于开发、部署和运行容器化应用的平台,用于通过 Docker Registry HTTPS API v2 从 Docker Hub 下载镜像。
可以通过 wget 直接下载: $ wget https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh 使用语法如下: ./download-frozen-image-v2.sh 目标目录 镜像名[:tag][@digest] 赋予脚本执行权限: $ chmod u+x download-frozen-image-v2.sh 如果提示 jq not found, 5. 使用 docker-pull.py 脚本 docker-pull.py 是一个 Python 脚本。
这些方法可以有效替代 Docker 客户端完成镜像下载任务,推荐首选。
