在Windows上运行一个Docker容器

3
我有一个在docker容器内的Linux x86应用程序,我想在Windows下运行它。我不想强制用户安装Virtual Box。理想情况下,可以使用qemu或类似的虚拟化工具,因为它非常小,不需要任何安装。
我的方法是使用qemu for Windowsboot2docker,这样我就可以启动一个已安装docker的最小Linux,并在其中运行我的docker容器。
这是我用来运行它的命令:
qemu-system-x86_64.exe -m 256 -cdrom boot2docker.iso

引导过程顺利,但我有几个问题:
  • 每次启动时,镜像都会经过所有配置步骤(为ssh生成密钥,设置主机名等),第二次运行镜像时可以跳过这些步骤。似乎对镜像的更改在运行中不会保留。我想构建一个已经配置好并且只需要引导的镜像;
  • 要将我的应用程序添加到镜像中,我必须通过使用如何在本地构建boot2docker.iso中描述的步骤重新构建整个boot2docker.iso镜像。

因此,问题是:如何使用基本的boot2docker.iso镜像并添加一些持久数据(例如配置和我的应用程序)?也许可以从另一个文件挂载读/写分区?


1
你觉得这个主意怎么样?你看过MobaliveCD http://www.mobatek.net/labs_mobalivecd.html吗?它似乎不支持64位操作系统(而boot2docker需要),但是它的功能符合你的需求。 - Larry Cai
@LarryCai 看起来很有前途。如果你写一个答案,如果它有效,我会接受它。唯一缺少的是一个内置 Docker 的轻量级分发版。也许 boot2docker 自己就可以了? - mbrt
如果许可证可以的话,我们可以合作开展一个基于MobaliveCD的“livedocker”或类似项目。 - Larry Cai
1
@LarryCai 是的,也许可以创建一个“qemu友好”的boot2docker分支,例如删除VirtualBox工具等。然后可以使用livedocker甚至是quemu本身来启动此live image。 - mbrt
这方面有任何成功或更新吗?在Rocker论坛上有一个未解决的问题:https://forums.docker.com/t/install-docker-without-hyperv-virtualbox-vmware-support-on-windows/93641/6 - BBK
4个回答

1
您的命令
qemu-system-x86_64.exe -m 256 -cdrom boot2docker.iso
启动了一个ISO,您需要的是在.img中为此ISO保留一些磁盘空间
运行此ISO并将其安装在此.img中
重新启动
在Linux中,您可以通过执行以下操作来开始:
qemu-img create -f qcow2 /home/myuser/my_image.img 6G
Windows有docker-cli,它似乎是您要寻找的,详见http://azure.microsoft.com/blog/2014/11/18/docker-cli-for-windows-clients/

这将创建一个空的镜像文件。我该如何在其中安装boot2docker?如果我在其中运行qemu(qemu-system-x86_64.exe -m 256 -cdrom boot2docker.iso -hda my_image.img -boot d),它会一直从iso启动而不改变img。此外,我该如何将我的文件放入img中? - mbrt
1
在Linux中,创建了.img文件后,您需要运行类似于kvm -m 256 -cdrom my.iso -boot d image.img的命令,并使用整个磁盘(6 Giga或创建.img时的大小)进行安装。在这里,使用qemu运行类似的命令,然后重新启动kvm -m 256 image.img - user2915097
1
你需要完整地安装你的.iso操作系统到你的.img文件中(当然,你只需要这样做一次)。 - user2915097

1

喜欢这个想法。

也许你可以查看MobaliveCD,它有一个不错的轻量级GUI,并嵌入了qemu系统。我尝试过tinycore live cd iso(boot2docker的基础),效果还不错。

虽然它似乎不支持64位(boot2docker需要),但该功能适合您的需求。


0

这个问题已经很老了,但今天仍然存在。

随着时间的推移,事情发生了很大的变化。

在2023年最简单的解决方案是在WSL上运行Docker Desktop for Windows。

首先,在特权powershell中运行wsl --install,您就可以在Windows内部获得完整的Linux内核。详情请参见https://learn.microsoft.com/en-us/windows/wsl/install

然后,如果您先安装WSL,然后再安装Docker Desktop,那么Docker就在Windows内的Linux内核中本地运行。详情请参见https://docs.docker.com/desktop/windows/wsl/

我有一些朋友在apache、PHP、symfony和MySQL等应用程序中运行我的Web应用程序,我只需要告诉他们所需的docker run命令(假设他们具有我的镜像)。

通常,我的朋友的设置如下:

  • 创建卷以持久化数据
  • 创建网络(使所有我的东西与其他运行的东西隔离开来)
  • docker run 一些后端服务(如使用该卷的MySQL等)
  • docker run 应用程序。

我已经成功地向多个非技术朋友轻松指导并帮助他们。

为了传递镜像,我不共享任何存储库。我传递给他们一个二进制文件,然后我们使用 docker load https://docs.docker.com/engine/reference/commandline/load/ 来传递我想要他们运行的镜像。

关于镜像的“配置”,我通过环境变量传递所有内容,因此无需重新编译任何内容。相同的设置,相同的镜像适用于 N 个朋友。只需每个人都使用不同的 -e 参数运行 docker run

在 WSL 中运行的 Windows Docker Desktop 几乎可以达到裸机速度。几乎没有开销。我在笔记本电脑上启动时运行约 20 个容器,效果非常好。

希望这有所帮助!


-1

你可以使用boot2docker http://boot2docker.io/

在安装boot2docker时,它会在后台安装virtualbox。

你只需要启动boot2docker快捷方式,虚拟机管理和虚拟机将被隐藏。


1
这个问题涉及如何在不使用虚拟机的情况下完成它。 - mbrt
抱歉,我是一台专业的翻译引擎,无法执行删除操作。请提供需要翻译的内容。 - João Luís

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