docker import 参数

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 参数 正文

docker import 命令用于从一个归档文件(如 .tar 文件)、URL 或标准输入流创建一个新的 Docker 镜像,它不像 docker load 那样会保留镜像的历史记录层,而是将归档文件的内容直接作为镜像的新的一层。

docker import 参数
(图片来源网络,侵删)

命令格式

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

核心参数详解

docker import 的参数主要分为两类:控制镜像元数据的选项和指定源数据与目标镜像的参数。

控制镜像元数据的选项

这些选项用于在创建镜像时设置其标签信息。

选项 简写 描述
-c, --change 在导入时应用 Dockerfile 指令,可以多次使用,这对于在导入时添加 LABELENV 等信息非常有用。
-m, --message 为导入的镜像创建提交信息,类似于 git commit 中的 -m 参数,用于记录镜像的变更或来源。

源数据和目标镜像参数

这部分是命令的必需部分。

参数 描述
file \| URL \| - 源数据:指定要导入的内容来源。
- file: 一个本地归档文件路径(my-app.tar)。
- URL: 一个指向归档文件的 HTTP/HTTPS URL。
- : 标准输入流,你可以通过管道将一个归档文件的内容直接导入,cat my-app.tar \| docker import - my-app:v1
[REPOSITORY[:TAG]] 目标镜像:指定要创建的镜像的仓库名和标签。
- REPOSITORY: 镜像仓库名,通常以用户名或组织名开头,myusername/myapp
- TAG: 镜像标签,用于区分版本,v1.0, latest,如果省略标签,默认为 latest
> 注意: 这个部分是可选的,但强烈推荐使用,以便于后续管理。

使用场景与示例

从本地 .tar 文件创建镜像

这是最常见的用法,通常用于备份或分发一个系统的文件系统。

docker import 参数
(图片来源网络,侵删)

示例:

假设你有一个 ubuntu-base.tar 文件,它是一个干净的最小化 Ubuntu 系统的文件系统压缩包。

# 1. 导入 tar 文件,创建名为 my-custom-ubuntu:v2.0 的新镜像
#    -m "..." 添加了镜像的提交信息
docker import -m "基于 Ubuntu 20.04 的最小化系统" ubuntu-base.tar my-custom-ubuntu:v2.0

执行后,你可以用 docker images 查看新创建的镜像:

REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
my-custom-ubuntu    v2.0      <image-id>     a few seconds ago   120MB

从 URL 创建镜像

你可以直接从一个网络链接导入镜像,这在你不想下载文件到本地时很有用。

示例:

从某个 URL 下载一个归档文件并直接导入。

# 从 URL 导入,并指定标签为 latest
docker import https://example.com/path/to/my-app.tar my-app-from-url:latest

从标准输入流 创建镜像

这种方式非常适合与管道结合使用,尤其是在自动化脚本中。

示例:

  1. 创建一个容器,并在其中完成一些操作,比如安装软件。
  2. 将这个容器的文件系统导出为 tar 包,并通过管道直接导入为一个新的镜像。
# 1. 运行一个 ubuntu 容器
docker run -it --name temp-workspace ubuntu bash
# 2. 在容器内部(进入 bash 后)执行一些操作,比如安装 nginx
#    apt-get update && apt-get install -y nginx && exit
# 3. 退出容器后,将容器的文件系统导出,并通过管道导入为镜像
#    -m "..." 记录了镜像的变更
#    my-nginx-image:v1 是新镜像的名称和标签
docker export temp-workspace | docker import -m "基于 Ubuntu 官方镜像,预装了 Nginx" - my-nginx-image:v1
# 4. 启动新镜像的容器验证
docker run -it --rm my-nginx-image:v1 nginx -v
# 输出类似:nginx version: nginx/1.18.0 (Ubuntu)

使用 -c 选项添加元数据

docker import 本身不处理 Dockerfile 指令,但你可以使用 -c 选项来添加一些简单的元数据。

示例:

在导入时添加作者信息和环境变量。

docker import -c "LABEL maintainer=\"Your Name <your.email@example.com>\"" \
              -c "ENV APP_VERSION=1.0.0" \
              ubuntu-base.tar my-labeled-ubuntu:v1.0

docker import vs. docker load (重要区别)

这是一个非常常见的混淆点,理解它们的区别至关重要。

特性 docker import docker load
源数据 一个文件系统归档 (.tar 文件),不包含镜像的元数据和历史记录。 一个完整的镜像归档 (通过 docker save 生成),包含镜像的所有层、历史记录和元数据。
镜像历史 会丢弃,创建的镜像只有一层,即导入的文件系统。 会保留,加载的镜像拥有完整的历史记录层。
用途 用于创建基础镜像或从一个现有的文件系统构建镜像。 用于备份和恢复一个或多个完整的镜像。
命令示例 docker import archive.tar myimage:v1 docker load -i myimage.tar
文件来源 可以是本地文件、URL 或标准输入流。 通常是本地文件或标准输入流。

简单总结:

  • docker save 保存一个完整的、有历史的镜像,用 docker load 恢复它。
  • docker export 导出一个容器的文件系统,用 docker import 将其转换成一个新的、无历史的基础镜像。

最佳实践

  1. 为镜像打上标签:始终为 docker import 创建的镜像指定 [REPOSITORY:TAG],否则它会被标记为 <none>:<none>,难以管理。
  2. 使用 -m 提交信息:养成使用 -m 选项记录镜像来源或变更内容的习惯,便于团队协作和后续维护。
  3. 谨慎使用 -c:虽然 -c 可以添加标签,但对于复杂的镜像构建(如安装软件、设置环境变量),推荐使用 Dockerfiledocker build 命令。docker import 更适合用于创建一个干净的、基础的环境。
  4. 明确来源:清楚地知道你的 .tar 文件来自哪里,确保其安全性和完整性,特别是从 URL 导入时。
-- 展开阅读全文 --
头像
Dell Precision M4800拆机步骤是怎样的?
« 上一篇 01-05
smamoo智能奶瓶价格
下一篇 » 01-05

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]