容器Docker学习系列五~命令学习history,save, import

文章是Docker学习系列内容,在本地镜像管理命令学习接近尾声时,介绍了最后三个命令。包括用docker history查看指定镜像创建历史,docker save将指定镜像保存为tar归档文件,docker import可将归档tar文件恢复成docker文件,并给出了各命令语法及示例。

随着我们几篇文章Docker的命令学习,关于Docker本地镜像管理的命令学习已经接近尾声。今天我们就学习下本地镜像管理的最后三个命令history,save, import。当然前面命令没有掌握熟练的同学可以先回顾下原先的命令,在学习本章知识。

Linux学习桌面系统生成快捷方式与普通用户权限

容器Docker学习系列二~权限控制与命令了解

容器Docker学习系列三~每天几个小命令

容器Docker学习系列四~源的修改增加效率

那么现在开始我们现在的命令学习

history
docker history命令是用来查看指定镜像的创建历史。

语法糖 : docker history [OPTIONS] image

OPTION还是原先的可选参数:

● -H:按照可读的格式打印镜像大小和日期,默认为true
● –no-runc: 显示提交记录
● -q:列出提交记录的ID. 例子如下:

docker@ubuntu:~$ docker history mongo

IMAGE CREATED CREATED BY SIZE COMMENT

8bf72137439e 8 days ago /bin/sh -c #(nop) CMD [“mongod”] 0B

8 days ago /bin/sh -c #(nop) EXPOSE 27017/tcp 0B

8 days ago /bin/sh -c #(nop) ENTRYPOINT [“docker-entry… 0B

8 days ago /bin/sh -c #(nop) COPY file:18c5d9b642a89adf… 10.4kB

8 days ago /bin/sh -c #(nop) VOLUME [/data/db /data/co… 0B

8 days ago /bin/sh -c mkdir -p /data/db /data/configdb … 0B

8 days ago /bin/sh -c set -x && apt-get update && apt… 256MB

8 days ago /bin/sh -c echo “deb http://$MONGO_REPO/apt/… 73B

8 days ago /bin/sh -c #(nop) ENV MONGO_VERSION=4.0.1 0B

2 weeks ago /bin/sh -c #(nop) ENV MONGO_MAJOR=4.0 0B

2 weeks ago /bin/sh -c #(nop) ENV MONGO_PACKAGE=mongodb… 0B

2 weeks ago /bin/sh -c #(nop) ARG MONGO_REPO=repo.mongo… 0B

2 weeks ago /bin/sh -c #(nop) ARG MONGO_PACKAGE=mongodb… 0B

docker@ubuntu:~$ docker history -q mongo

8bf72137439e


save
docker save 是值将指定镜像保存为tar归档文件。我们可以将docker文件转发给别人直接来使用。

语法糖 docker save [OPTIONS] IMAGE[]数组

OPTIONS 说明:

● -o:输出到的文件
例子:

docker@ubuntu:~$ docker save -o mongo.tar mongo

docker@ubuntu:~$ ls

Desktop Downloads mongo.tar Pictures Templates

Documents examples.desktop Music Public Videos
import
我们刚才在上面使用了save命令来进行docker文件的归档,那么我们如果拿到归档tar文件,我们怎么恢复成docker文件呢?现在我们就可以使用到import命令了

语法糖 docker import [OPTIONS] file[URL] [REPOSITORY:TAG]

OPTIONS:

● -c:应用docker指令创建镜像
● -m: 提交时的说明文字
例子:

docker@ubuntu:~$ docker import mongo.tar mong:v1

sha256:9a611936a0107c2f07e04ea586722dba2b6c6451c3f1ae68fda30496b91c606e

docker@ubuntu:~$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

mong v1 9a611936a010 26 seconds ago 386MB

mongo 13.2 8bf72137439e 8 days ago 380MB

mongo latest 8bf72137439e 8 days ago 380MB
我们可以看到里面新增了一个TAG为V1的mong 。这就是我们新增加的。

<think>我们正在讨论Docker的`import`命令。根据引用[3]和[4],`docker import`命令用于将文件系统(通常是一个tar归档文件)导入为新的Docker镜像。这个命令不会保留原始镜像的历史和元数据,因此通常用于从容器快照创建新镜像。 使用步骤: 1. 首先,我们需要有一个容器的文件系统快照(通常通过`docker export`命令导出)。 2. 然后,使用`docker import`命令将该快照导入为一个新的镜像。 语法: ``` docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] ``` 参数说明: - `[OPTIONS]`:可选参数,目前支持的主要选项有: - `-c, --change`:应用Dockerfile指令来修改镜像配置,例如设置环境变量、工作目录等。 - `-m, --message`:设置导入镜像的提交信息。 - `file|URL|-`:指定要导入的文件路径、URL或者从标准输入(使用`-`)读取。 - `[REPOSITORY[:TAG]]`:可选,指定新镜像的仓库名和标签。 示例: 1. 从本地tar文件导入镜像并指定仓库和标签: ``` docker import /path/to/container_fs.tar my-new-image:tag ``` 2. 从标准输入导入(通常结合重定向使用): ``` cat container_fs.tar | docker import - my-new-image:tag ``` 3. 在导入时应用修改(例如设置环境变量): ``` docker import --change "ENV DEBUG=true" container_fs.tar my-new-image:tag ``` 4. 从URL导入(注意:URL必须指向一个tar文件): ``` docker import http://example.com/container_fs.tar my-new-image:tag ``` 注意事项(引用[4]): ① 导入的镜像不会保留原始镜像的历史和元数据。 ② 使用`-c`选项可以应用类似Dockerfile的指令(如`ENV`、`WORKDIR`、`CMD`等)来配置新镜像。 ③ 导入的tar文件必须是使用`docker export`导出的容器快照,或者是兼容的格式。 使用场景: - 当你有一个正在运行的容器,并且希望将其当前状态保存为一个新的镜像,但又不希望使用`docker commit`(因为`docker commit`会保留历史层,而`export`导出的快照是扁平的)。 - 当你需要将容器的文件系统迁移到另一台机器时,可以先导出再导入。 与`docker load`的区别: - `docker load`用于导入由`docker save`保存的镜像(保留所有历史层和元数据),而`docker import`导入的是容器快照(单层)。 因此,用户可以根据需要选择:如果需要完整的镜像历史,使用`save/load`;如果只需要当前文件系统状态,使用`export/import`。 下面是一个完整的示例流程: 步骤1:导出容器的文件系统 首先,运行一个容器(例如运行一个ubuntu容器并安装一些软件): ``` docker run -it --name mycontainer ubuntu:20.04 bash ``` 在容器内进行一些操作(例如安装vim)后退出。 然后,导出该容器的文件系统: ``` docker export mycontainer > mycontainer.tar ``` 步骤2:导入为新的镜像 ``` docker import mycontainer.tar my-ubuntu-vim:latest ``` 步骤3:验证 ``` docker images ``` 应该能看到`my-ubuntu-vim`镜像。 步骤4:运行新镜像的容器 ``` docker run -it my-ubuntu-vim:latest bash ``` 检查vim是否已经安装。 注意:由于导入的镜像丢失了原始镜像的元数据(如默认的启动命令),你可能需要在导入时通过`--change`指定`CMD`或`ENTRYPOINT`。例如,如果原始镜像的默认命令是`bash`,你可以在导入时指定: ``` docker import --change 'CMD ["bash"]' mycontainer.tar my-ubuntu-vim:latest ``` 这样,运行容器时就会进入bash。 引用: [^1]: Docker export和import命令的概述 [^2]: docker export命令的语法 [^3]: docker import命令的语法和参数 [^4]: docker import的注意事项 §§ 相关问题 §§ 1. `docker import`和`docker load`命令有什么区别? 2. 如何在使用`docker import`时设置镜像的元数据(如作者、环境变量等)? 3. 从容器快照创建的镜像能否回滚到之前的层? 4. 使用`docker import`导入的镜像是否支持多阶段构建?</think>### Docker `import` 命令使用指南 `docker import` 用于将容器文件系统快照导入为新的 Docker 镜像,适合从备份恢复或自定义镜像创建。以下是详细操作流程: --- #### 📦 **一、核心语法** ```bash docker import [OPTIONS] 文件/URL - [REPOSITORY[:TAG]] ``` - **关键参数**: - `文件/URL`:容器快照的 `.tar` 文件路径或 URL - `-`:从标准输入读取数据(如管道传递) - `REPOSITORY:TAG`:新镜像的名称和标签(可选) - **常用选项**: ```bash -c, --change # 应用 Dockerfile 指令(如设置环境变量) -m, --message # 添加提交信息 ``` --- #### 🔧 **二、操作步骤** 1. **导出容器快照**(参考引用[2]): ```bash docker export my_container > my_container.tar ``` > 或直接使用容器 ID: > ```bash > docker export c3f279d17e0a > backup.tar > ``` 2. **导入为镜像**(参考引用[3][4]): ```bash # 基础导入 docker import my_container.tar my_custom_image:latest # 添加元数据 docker import \ --change "ENV DEBUG=true" \ --change "WORKDIR /app" \ --message "Imported from backup" \ my_container.tar my_app:v1 ``` 3. **从 URL 导入**: ```bash docker import http://example.com/container.tar.gz custom_image:remote ``` 4. **通过管道导入**: ```bash cat backup.tar | docker import - stream_image:pipe ``` --- #### ⚠️ **三、注意事项**(参考引用[4]) 1. **历史记录丢失**: 导入的镜像**不保留原始镜像的历史层**,仅生成单层新镜像[^4]。 2. **兼容性要求**: 需使用 `docker export` 生成的 `.tar` 文件,或其他兼容格式(如 `tar`、`tar.gz`)[^4]。 3. **元数据配置**: 通过 `-c` 参数可设置: ```bash --change "CMD [\"nginx\", \"-g\", \"daemon off;\"]" # 设置启动命令 --change "EXPOSE 80" # 声明端口 ``` --- #### 🔍 **四、验证与使用** ```bash # 检查镜像列表 docker images | grep my_custom_image # 运行测试容器 docker run -it --rm my_custom_image:latest /bin/bash # 查看镜像历史(无分层记录) docker history my_custom_image:latest ``` --- #### 💡 **、典型应用场景** 1. **容器备份恢复**: ```bash docker export old_container > backup.tar docker import backup.tar restored_image:latest ``` 2. **自定义基础镜像**: ```bash tar -cvf minimal_os.tar /path/to/minimal-rootfs/ docker import minimal_os.tar my_os:base ``` 3. **跨环境迁移**: 将导出的 `.tar` 文件复制到新主机后导入。 --- > 📌 **与 `docker load` 的区别**: > - `docker import`:基于**容器文件系统**(无历史层) > - `docker load`:基于**完整镜像**(保留历史层和元数据) [^2]: 容器导出命令语法 [^3]: 导入命令参数说明 [^4]: 元数据和兼容性限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值