好的,这让我发疯了。我已经阅读了很多关于Docker的内容,但仍然无法理解 - 对我来说是码头工具......
我使用Mac OS X进行工作,并使用Ubuntu开发虚拟机来开发虚拟机。我为每个项目使用vagrant因为我想拥有与我在生产服务器上使用的相同的操作系统和库。我讨厌像rbenv和nvm这样的工具,因为它们的使用增加了终端的启动时间。如果两者都被激活,我需要等待2..4秒才能准备好新的终端选项卡。我打字很快,这种延误会降低我的工作效率。
我对流浪汉很好,但是使用虚拟机,每个虚拟机需要大约800 MB的RAM ......太多了。
所以问题是:我可以像流浪汉一样使用docker吗?假设我有两个项目,我需要将Ruby 2.0用于项目A,将Ruby 2.3用于项目B,是否可能/正确使用docker创建两个容器,每个容器都有自己的Ruby版本?而且我不希望这些版本的Ruby与系统Ruby交叉。
对于vagrant,我只用Ruby 2.0创建两个VM,第二个用Ruby 2.3创建。如果我不需要其中任何一个,我将销毁VM,我的系统将保持畅通,而不会在客户机上安装软件。
编辑:我知道我不能在操作系统X本身使用Docker。让我们假设一些Linux Ubuntu / Debian / Arch /等。如果我知道Linux + Docker会给我我想要的东西,我已经准备好转向Linux了。
答案 0 :(得分:6)
您可以使用适用于Mac OS X的新docker beta在Mac OS X中使用Docker。它仍然使用VM,但它比Virtualbox轻。此外,它支持更好地与OS X集成。截至目前,它有点错误。
要回答您的问题,是的,您可以使用Docker容器中所需的运行时创建您的环境,而不会影响其他容器或系统。请记住,容器通常在其中运行一个进程,因此不要像在流浪盒中那样运行多个服务。它不是一个完整的操作系统,它只是一个在不同的内核命名空间中运行的可执行文件。如果你想运行多个进程,有一些解决方法,但"正确"这样做的方法是使用像docker-compose这样的东西连接在一起的多个容器。
答案 1 :(得分:3)
是的,您绝对可以创建两个不同的Docker容器,每个容器运行不同版本的Ruby,这些容器根本不会影响主机的安装。
创建Dockerfile时,指定要扩展的基本映像。例如:
CREATE TEMPORARY TABLE temp_hex SELECT '11B3' AS szVersion;
SELECT CONV(szVersion,16,10) & 0x1880 FROM temp_hex;
-> 4224
Ruby官方Docker图像只能回到2.1,但不要让它阻止你。看看2.3 Dockerfile,重写自己的但是安装旧版本的Ruby,你就完成了。创建任何类型的自定义Docker镜像真的很简单。
来源: