阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Vagrant 和 Docker:如何在 OS X 上安装和设置 Postgres, Elasticsearch 和 Redis

131次阅读
没有评论

共计 6953 个字符,预计需要花费 18 分钟才能阅读完成。

当听到很多人在说 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 的方法来描述你的环境。

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

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm 

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm 

Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Docker 和一个正常的虚拟机有何区别? http://www.linuxidc.com/Linux/2013-12/93740.htm 

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm 

Docker 将改变所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm 

Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

安装 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_VERSIONdo |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。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106898p2.htm

Docker 容器的 Vagrant 文件

这是 Vagrantfile 的主要内容:

VAGRANTFILE_API_VERSION "2"  Vagrant.configure(VAGRANTFILE_API_VERSIONdo |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/redisdockerfile/elasticsearch 和 paintedfox/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“ 的路在哪里。不过,在看过可能的情况后,我不禁思考它可以用于什么其他地方。另外,它是我遇到过的最好玩的虚拟化,乐趣就在于编程。

Docker 的详细介绍 :请点这里
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 的方法来描述你的环境。

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

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm 

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm 

Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Docker 和一个正常的虚拟机有何区别? http://www.linuxidc.com/Linux/2013-12/93740.htm 

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm 

Docker 将改变所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm 

Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

安装 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_VERSIONdo |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。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106898p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计6953字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中