其他制作镜像的方式

目录

从 rootfs 压缩包导入

使用 docker import 命令从本地文件、远程 Web 文件或标准输入导入镜像。压缩包将在镜像 / 目录展开,直接作为镜像第一层提交。

格式:

docker import [选项] <文件>|<URL>|- [<仓库名>[:标签]]

示例:创建 OpenVZ 的 Ubuntu 14.04 模板镜像

docker import http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz openvz/ubuntu:14.04
# Downloading from http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
# sha256:f477a6e18e989839d25223f301ef738b69621c4877600ae6467c4e5289822a79 B/78.42 MB

验证:

docker image ls openvz/ubuntu
# REPOSITORY          TAG     IMAGE ID        CREATED              SIZE
# openvz/ubuntu       14.04   f477a6e18e98    55 seconds ago       214.9 MB

docker history openvz/ubuntu:14.04
# IMAGE               CREATED              CREATED BY                                                    SIZE
# f477a6e18e98        About a minute ago   Imported from http://download.openvz.org/...                214.9 MB

docker save 和 docker load

Docker 提供 docker savedocker load 命令用于将镜像保存为 tar 文件并在其他位置加载。这是没有 Registry 时的做法,现在已不推荐,镜像迁移应使用 Registry。

保存镜像

将 alpine 镜像保存为压缩 tar 文件:

docker image ls alpine
# REPOSITORY    TAG      IMAGE ID        CREATED       SIZE
# alpine        latest   baa5d63471ea    5 weeks ago   4.803 MB

docker save alpine | gzip > alpine-latest.tar.gz

加载镜像

将镜像文件复制到目标机器,加载镜像:

docker load -i alpine-latest.tar.gz
# Loaded image: alpine:latest

镜像迁移

结合 sshpv 等工具,可以编写一条命令完成镜像从一个机器迁移到另一个机器,并显示进度条:

docker save <镜像> | bzip2 | pv | ssh <用户>@<主机> 'cat | docker load'

总结

  • docker import 适合从已有的 rootfs 快速创建镜像
  • docker save/load 适合在无 Registry 的环境中进行镜像备份和迁移
  • 现代部署中推荐使用 Docker Registry(Docker Hub 或私有 Registry)进行镜像管理

#docker