共计 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_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。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106898p2.htm
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/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_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。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106898p2.htm