在Mac OS上安装Vagrant和Docker的教程

当听到很多人在说Docker是多么多么的棒,很多新潮的孩子都在使用它时,我决定在我的开发环境上也来尝试下。在下面的这篇文章中,我将讲解在Mac OS X怎样建立Postgres,Elasticsearch和Redis。

什么是Docker

Docker用轻量容器把一个APP从它运行的OS中隔离开。它把APP放入到一个孤立的盒子中,对外只呈现需要使用的文件夹和端口。

这样,基于建立和使用APP的容器是可重用,共享的。目前,在Docker集中已经存在了15,000种以上的容器。Docker就像一个商店的存储库,当你需要建立一个你想要的APP时,你首先去挑出它,然后把它下载下来打开即可。

在OS X上安装Docker

Docker不是天生就能运行在OS X上的,它需要一个包含LINUX容器的Linux内核。因此,当你想像我一样要安装OS X时,你将需要一套虚拟器。

不要使用boot2docker

当试图让docker工作时,我发现“非常容易”安装。这将使用一个称之为boot2docker的工具,该工具是一个像virtualBox的虚拟机上的瘦包装。

我马上发现,这个工具有一些严重的问题,例如:在一个稳定状态下将会终止任何获取Docker的进程。我不想在这方面浪费太多的体力和脑细胞,所以我继续寻找了一个可替代的解决方案。

使用Vargrant

自从Vagrant的1.6版本之后,已经集成了支持Docker的配套组件。Vargrant是一种类似于VirtualBox的虚拟软件,它采用一种声明Ruby DSL的方法来描述你的环境。

我非常喜欢这种定义虚拟环境的方式,因为当你的环境发生故障时,你可以记录下来当时的信息,再次开始使用,而不用遗漏下大量的类似环境变量的信息。
安装Stuff

首先,让我们浏览下我们需要安装的各种事宜。

Homebrew安装:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

Cask安装:

brew tap caskroom/homebrew-cask
brew install brew-cask

Vagrant 和 VirtualBox安装:

brew cask install virtualbox
brew cask install vagrant

Vagrant文件

一个vagrant文件来描述一个使用Ruby DSL虚拟机环境的需求。当描述Docker容器时,Vagrant使每一个容器都好像在使用自己独有的虚拟机一样。事实上这是一个假象,因为每一个Docker容器实际上是允许在各种的代理虚拟机上的。

因此,两个vagrant文件是非常必须的,一个文件是用来定义代理虚拟机(Provisioner),另外一个文件是用来定义Docker容器的(Providers)。
代理虚拟Vagrant文件

代理虚拟Vagrant文件被叫做:Vagrantfile.proxy

VAGRANTFILE_API_VERSION = "2"Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
 config.vm.box = "hashicorp/precise64"
 config.vm.provision "docker"
 config.vm.provision "shell", inline:
  "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"

 config.vm.network :forwarded_port, guest: 6379, host: 6379
 config.vm.network :forwarded_port, guest: 5432, host: 5432
 config.vm.network :forwarded_port, guest: 9200, host: 9200end

这使用hashicorp/precise64 Ubuntu 12.04的64位来处理代理虚拟机。它也提供Docker和一些神奇的shell命令来让Docker工作。

最后的事情就是设置转发端口了。它使用config.vm.network来为Redis, Elasticsearch 和Postgres来进行配置,用代理虚拟机映射到OS X。

Docker 容器的 Vagrant 文件

这是Vagrantfile的主要内容:

VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

 config.vm.define "redis" do |v|
  v.vm.provider "docker" do |d|
   d.image = "dockerfile/redis"
   d.volumes = ["/var/docker/redis:/data"]
   d.ports = ["6379:6379"]
   d.vagrant_vagrantfile = "./Vagrantfile.proxy"
  end
 end

 config.vm.define "elasticsearch" do |v|
  v.vm.provider "docker" do |d|
   d.image = "dockerfile/elasticsearch"
   d.ports = ["9200:9200"]
   d.vagrant_vagrantfile = "./Vagrantfile.proxy"
  end
 end

 config.vm.define "postgres" do |v|
  v.vm.provider "docker" do |d|
   d.image = "paintedfox/postgresql"
   d.volumes = ["/var/docker/postgresql:/data"]
   d.ports = ["5432:5432"]
   d.env = {    USER: "root",    PASS: "abcdEF123456",    DB: "root"
   }
   d.vagrant_vagrantfile = "./Vagrantfile.proxy"
  end
 endend

这个文件定义了三个容器: Redis , Elasticsearch, 和 Postgres 带有图片dockerfile/redis, dockerfile/elasticsearchpaintedfox/postgresql

每个文件定义 vagrant_vagrantfile 作为 proxy VM 文件,这使得它们在同一个 proxy 虚拟机上运行。

Redis 和 Postgres 的 volumes 定义是为了它们的信息可以存储在 proxy VM 上,而不是在容器中。这也是容器可以更删除或升级而数据不会丢失的原因。下一步是映射这些文件从proxy VM 到 OS X ,但是没必要让其运转着。

每个容器上的 ports 定义哪个端口转到 proxy VM 。这些需要匹配 proxy VM 到 OS X 的端口。

Postgres 容器也定义了需要设置它的服务器的环境变量。这些可以用来在OS X 里设置缺省的Postgres 服务器,通过设置环境变量 PGHOST=localhost PGUSER=root PGPASSWORD=abcdEF123456 来实现。

使用Vagrant工作

在你的Vagrant文件相同的目录内,你可以运行:

vagrant up --provider=docker

第一次运行这个时,Vagrant将下载然后启动proxy VM,然后下载并启动Docker容器。在这些初始化下载之后每次运行Vagrant都将重复使用现有的图片。

可以查看Docker容器的状态:

vagrant status

应该输出一些东西类似:
 

代码如下:

Current machine states:
 
redis                     running (docker) 
elasticsearch             running (docker) 
db                        running (docker)

要测试Docker容器是否正确运行,可以使用 Redis 和 Postgres 客户端, 和 curl for Elasticsearch。只需要检查redis-cli和psql到服务器的连接,和curl http://localhost:9200响应。

如果需要连接到proxy VM(非常有助于调试),运行vagrant global-status,这将列出所有VM,包括proxy。然后调用vagrant ssh <ID>,ID为proxy的ID。建议不要手动改变这个proxy VM,使用一个Chef(或类似的)脚本,这样改变可以更容易的测试和分布。

性能

使用虚拟化时,第一个问题总是会问“性能的影响有多少?”。要找出性能影响是多么的糟糕,我的同事和我都做了一个Postgres,在相同的硬件上做了Elasticsearch 和 Redis 加强测试。唯一的区别是一个测试有本机安装的软件而另一个有Docker自定义容器。带有本机软件的运行了2分钟,而带有容器的运行了3分钟。

这个性能影响并不像我想象的那样小,甚至可能会更糟。即使这样,我将继续使用Docker做开发,但并不推荐大家将它作为所有开发环境问题的灵丹妙药。

注意:一些其他使用Vagrant 和 Docker的限制在 这里 列出
总结

我还看不到"Vagrant with Docker"的路在哪里。不过,在看过可能的情况后,我不禁思考它可以用于什么其他地方。另外,它是我遇到过的最好玩的虚拟化,乐趣就在于编程。

(0)

相关推荐

  • win10下使用virtualbox + vagrant配置ruby开发机环境

    在写本文前,笔者已经尝试了多种其他的替代方法,例如wmware虚拟机安装kylin.然而发现总是还有各种问题.经大佬指点安装了virtualbox + vagrant.于是发现配置起来如此简单.接下来笔者将详细阐述. (注:笔者自己的服务器上的配置是centos7.2 + ruby2.3.4 + mariadb + redis,自己的笔记本为win10,另外,很多网上的类似文章都写于很长时间以前,很多内容现在已经不适用,甚至很多关键的环节还不讲清楚,导致笔者配置初期踩了很多的坑.所以写下此文,总

  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

    1.阿里云的一键安装web全环境 下载一键安装web全环境 sh.zip 压缩包 上传至服务器,解压.执行脚本,具体步骤详见这里 $ mv sh.zip /home/tmp/ & cd /home/tmp $ unzip sh.zip $ chmod -R 777 sh & cd sh # 任意选择一种方法执行脚本 # 方法一 $ ./install.sh # 方法二 $ ./install_nginx_xxx.sh $ ./install_mysql_xxx.sh 2.安装RVM与指定的

  • Windows下Ruby on Rails开发环境安装配置图文教程

    本文详细介绍如何在Windows配置Ruby on Rails 开发环境,希望对ROR初学者能有帮助. 一.下载并安装Ruby Windows下安装Ruby最好选择 RubyInstaller(一键安装包). 下载地址: http://rubyforge.org/frs/?group_id=167 . 我们这里下载目前较新的rubyinstaller-1.9.3-p0.exe 一键安装包.这个安装包除了包含ruby本身,还有许多有用的扩展(比如gems)和 帮助文档. 双击安装,安装过程出现如下

  • Vagrant基本命令使用详解

    Vagrant基本命令详解,具体如下: 1.检查当前的版本 # vagrant --version Vagrant 1.8.1 2.列出所有的box # vagrant box list centos/7 (virtualbox, 1603.01) ubuntu/trusty64 (virtualbox, 20160406.0.0) 3.添加一个box # vagrant box add ADDRESS 1)box名简写 Vagrant可以从这里https://atlas.hashicorp.c

  • win7安装ruby on rails开发环境

    前言 看到很多文章都说ruby环境在windows上是非常难搭建,会出现各种各样的怪问题,所以都推荐到linux和mac上安装开发.但是我按照教程搭了下,问题也不算太多.总过大概花费了2个半小时左右就完成了.所以大家不要被吓尿了,下面就把安装的步骤及具体的版本记录了一下供大家参考. 安装步骤: 开发机环境:我使用的开发机:win7 旗舰版 - 64位 (cpu是i5). 1 安装 rubyinstaller-2.0.0-p481.exe     1 选择安装目录:(如:D:\server\Rub

  • VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通(图文教程)

    网上搜出来的比较乱,讲的不明不白,因此根据自己弄过一次,确认可行的方式,做个备份,方便日后查阅. 环境: 在Oracle VM VirtualBox中安装的Ubuntu,具体版本名是:ubuntu-14.10-server-amd64 Step1: VirtualBox在虚拟机关机状态下,如图进行设置: Step 2: 虚拟机开机,输入命令:sudo ifconfig或者sudo ifconfig -a查看当前网卡配置 查看当前ip地址 Step3: 输入命令:vim /etc/network/

  • VirtualBox详细安装使用教程(图文)

    1.Sun xVM VirtualBox简介 VirtualBox官方网站:http://www.virtualbox.org 下载最新版本的VirtualBox:http://www.virtualbox.org/wiki/Downloads VirtualBox是Sun公司出品的一款小巧.开源.性能优异的跨平台虚拟机软件.我想会有许多朋友问,VirtualBOx比起老牌的VMware,微软VirtualPC表现如何呢? 下面是各虚拟机对比,大家可以参考一下:http://en.wikiped

  • CentOS中配置Ruby on Rails环境

    详细安装步骤: 一.更新Python centos 中默认安装的python是2.4的版本,因为新版的rails需要提供nodejs的相关支持,需要更新python,更新文章可以直接移步到这个链接 http://www.tomtalk.net/wiki/Python 复制代码 代码如下: yum install -y bzip2*           #nodejs 0.8.5需要,请安装python前,先安装此模块.   wget http://www.python.org/ftp/pytho

  • 在Mac OS上安装Vagrant和Docker的教程

    当听到很多人在说Docker是多么多么的棒,很多新潮的孩子都在使用它时,我决定在我的开发环境上也来尝试下.在下面的这篇文章中,我将讲解在Mac OS X怎样建立Postgres,Elasticsearch和Redis. 什么是Docker Docker用轻量容器把一个APP从它运行的OS中隔离开.它把APP放入到一个孤立的盒子中,对外只呈现需要使用的文件夹和端口. 这样,基于建立和使用APP的容器是可重用,共享的.目前,在Docker集中已经存在了15,000种以上的容器.Docker就像一个商

  • 在Mac OS上安装Go语言编译器的方法

    我用的是mac mini然后在上边装好了sublime text2 插件依然是go sublime和go build这两个就不介绍了,因为之前已经介绍了安装了,go的mac os安装包可以直接下的,下载地址是http://code.google.com/p/go/downloads/list?q=OpSys-OSX+Type-Installer,根据你自己的电脑来说话,下载对应的就可以了.然后直接安装,安装好之后还是配置环境变量,一般的linux上边都是这样的 cd ls -a #显示的用户环境

  • 在Mac OS上安装Oracle数据库的基本方法

    基本环境:Snow Leopard10.6.2,Oracle10.2.0.4 打开Mac的终端,执行: sudo -i 创建oinstall组和oracle用户,注意需要保证组合用户的ID与现有系统信息不冲突,这里采用700 创建组: dscl . -create /groups/oinstall dscl . -append /groups/oinstall gid 700 dscl . -append /groups/oinstall passwd "*" 创建用户: dscl .

  • 在Mac OS上安装Java以及配置环境变量的基本方法

    安装 因为并非所有用户都用得着 Java ,所以在默认状态下 OS X 不预装 Java , 如果你需要的话可以手动安装. 1. http://support.apple.com/kb/DL1572 到苹果官网下载. http://support.apple.com/downloads/DL1572/en_US/JavaForOSX2014-001.dmg 2.http://www.oracle.com/technetwor ... ownloads/index.html 到 Oracle 下载

  • 在Mac OS上安装Tomcat服务器的教程

    对于Apache Tomcat 估计很多童鞋都会,那么今天就简单说下在mac上进行tomcat的安装: 第一步:下载Tomcat 这里Himi下载的tomcat version:7.0.27 直接上下载地址:http://tomcat.apache.org/download-70.cgi 直接下载如下选中即可: 第二步:   下载完成后 ,然后随意放目录吧,这里Himi放入    /usr/local/ 右键你的mac的Finder->前往文件夹->/usr/local  将刚才解压后的tom

  • 在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

    安装 node.js 首先需要安装 node.js, 通常情况下,只需要到 Node.js 官网下载安装包安装就可以了.不过我可耻的失败了,弹出了如下错误: 于是我换成了 brew 大法: brew install nodejs 安装 Gulp gulp 使用 Node.js 的 npm 命令安装: npm install --global gulp 然后在项目目录中还要安装一遍: npm install --save-dev gulp 我对这步的操作比较费解.以我多年码农经验,即然全局安装过了

  • Mac OS上安装PostgreSQL的教程

    容我开头啰嗦一下.一直以来,我和 MySQL 这位久经考验的老朋友合作愉快.但自从了解了一点 PostgreSQL 后, 对其丰富的功能特性就十分着迷.比如字段类型原生支持 json, xml 和 array.跟 MySQL 比起来,感觉 PostgreSQL 更高级一些. 安装brew 官方文档: http://mxcl.github.com/homebrew/ 先安装Git,打开一个shell: cd /usr/local sudo mkdir homebrew curl -L https:

  • 在Mac OS上安装使用MongoDB的教程

    概念 MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 什么是NoSql? NoSql,全称是 Not Only Sql,指的是非关系型的数据库.下一代数据库主要解决几个要点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由.支持简易复制.简单的API.最终的一致性(非ACID).大容量数据等.NoSQL被我们用得最多的当数key-va

  • Mac OS上安装Tomcat服务器的简单步骤

    一. 下载tomcat 首先要到tomcat官网去下载安装包,官网下载地址如下:http://tomcat.apache.org/download-70.cgi , 注意请下载飞windows版本.和windows操作系统不一样,这个里面没有令人厌烦的注册表. 将压缩包解压到任意一个目录,我这里是存放到/ProgramFile/tomcat 目录下面 二. 修改授权 tomcat中的几个运行服务程序都是以*.sh结尾的,在运行之前需要授权.打开终端输入如下命令: 输入如下命令: sudo chm

  • Ubuntu 20.04 上安装和使用 Docker的详细过程(安装包)

    目录 一.解压文件 二.拷贝解压后的文件到/usr/bin/下面 三.加入系统文件 四.启动Docker 五.Docker配置文件 六.重启Docker 七.检查Docker是否安装成功 八.总结 安装前将所有的软件包上传到系统的/opt路径,所有的操作都在/opt目录下 一.解压文件 tar -xzvf docker-19.03.0.tgz 二.拷贝解压后的文件到/usr/bin/下面 cp docker/* /usr/bin/ 三.加入系统文件 cat >/etc/systemd/syste

随机推荐