从包含操作系统的.img文件创建Docker镜像是否可能?

10

是否可以将包含操作系统(Arch Linux)的.img文件转换为Docker镜像?更准确地说,我想将RuneAudio Raspberry Pi镜像dockerize


请查看 docker loaddocker save https://docs.docker.com/engine/reference/commandline/load/ 和 https://docs.docker.com/engine/reference/commandline/save/。 - user2915097
似乎docker load只接受使用docker save创建的tar文件。不幸的是,它无法处理我的.img文件。 $ docker load -i RuneAudio_rpi2_0.3-beta_20150304_2GB.img 错误响应来自守护程序:Untar重新执行错误:退出状态1:输出:archive/tar:无效的tar头 - Andrej Guráň
1
你可以理解一下,对你的操作系统做一个tar包并试一试。 - user2915097
1
看一下Docker hub上的基础操作系统镜像是如何从tar文件构建的。例如:https://github.com/CentOS/sig-cloud-instance-images/blob/f0b1738ab545dccaae07a57eab0fc7356a96d404/docker/Dockerfile - Michael
1个回答

16

从完整的操作系统镜像生成Docker镜像通常是一种次优的过程。操作系统镜像将包含许多在Docker环境中根本不必要的内容,这意味着生成的镜像会变得不必要地庞大。

话虽如此,如果您仍想尝试这样做,libguestfs软件包中的guestfish命令可以使此过程非常简单:

guestfish --ro -a RuneAudio_rpi_0.3-beta_20141029_2GB.img -m /dev/sda5:/ tar-out / - |
docker import - runeaudio 

这将创建一个包含 RuneAudio_rpi_0.3-beta_20141029_2GB.img 磁盘映像内容的 runeaudio Docker 镜像。请注意,这当然只能在运行在 Raspberry Pi 上的 Docker 中运行,并且生成的镜像可能需要进一步修改才能正常工作。

您也可以通过本地挂载磁盘映像来实现相同的功能:

losetup -P /dev/loop0 RuneAudio_rpi_0.3-beta_20141029_2GB.img
mount /dev/loop0p5 /mnt
tar -C /mnt -cf - | docker import - runeaudio
umount /mnt
losetup -d /dev/loop0

我喜欢guestfish,因为它不需要root访问权限,并且不需要使用循环设备和挂载点,所以设置和清理更少。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接