最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年04月21日 15:47:03   投稿:goldensun  
這篇文章主要介紹了在Mac OS上安裝Vagrant和Docker的教程,并安裝和設(shè)置Postgres和Elasticsearch和Redis,需要的朋友可以參考下

當(dāng)聽到很多人在說Docker是多么多么的棒,很多新潮的孩子都在使用它時(shí),我決定在我的開發(fā)環(huán)境上也來嘗試下。在下面的這篇文章中,我將講解在Mac OS X怎樣建立Postgres,Elasticsearch和Redis。

什么是Docker

Docker用輕量容器把一個(gè)APP從它運(yùn)行的OS中隔離開。它把APP放入到一個(gè)孤立的盒子中,對(duì)外只呈現(xiàn)需要使用的文件夾和端口。

這樣,基于建立和使用APP的容器是可重用,共享的。目前,在Docker集中已經(jīng)存在了15,000種以上的容器。Docker就像一個(gè)商店的存儲(chǔ)庫,當(dāng)你需要建立一個(gè)你想要的APP時(shí),你首先去挑出它,然后把它下載下來打開即可。


在OS X上安裝Docker

Docker不是天生就能運(yùn)行在OS X上的,它需要一個(gè)包含LINUX容器的Linux內(nèi)核。因此,當(dāng)你想像我一樣要安裝OS X時(shí),你將需要一套虛擬器。

不要使用boot2docker

當(dāng)試圖讓docker工作時(shí),我發(fā)現(xiàn)“非常容易”安裝。這將使用一個(gè)稱之為boot2docker的工具,該工具是一個(gè)像virtualBox的虛擬機(jī)上的瘦包裝。

我馬上發(fā)現(xiàn),這個(gè)工具有一些嚴(yán)重的問題,例如:在一個(gè)穩(wěn)定狀態(tài)下將會(huì)終止任何獲取Docker的進(jìn)程。我不想在這方面浪費(fèi)太多的體力和腦細(xì)胞,所以我繼續(xù)尋找了一個(gè)可替代的解決方案。

使用Vargrant

自從Vagrant的1.6版本之后,已經(jīng)集成了支持Docker的配套組件。Vargrant是一種類似于VirtualBox的虛擬軟件,它采用一種聲明Ruby DSL的方法來描述你的環(huán)境。

我非常喜歡這種定義虛擬環(huán)境的方式,因?yàn)楫?dāng)你的環(huán)境發(fā)生故障時(shí),你可以記錄下來當(dāng)時(shí)的信息,再次開始使用,而不用遺漏下大量的類似環(huán)境變量的信息。
安裝Stuff

首先,讓我們?yōu)g覽下我們需要安裝的各種事宜。

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文件

一個(gè)vagrant文件來描述一個(gè)使用Ruby DSL虛擬機(jī)環(huán)境的需求。當(dāng)描述Docker容器時(shí),Vagrant使每一個(gè)容器都好像在使用自己獨(dú)有的虛擬機(jī)一樣。事實(shí)上這是一個(gè)假象,因?yàn)槊恳粋€(gè)Docker容器實(shí)際上是允許在各種的代理虛擬機(jī)上的。

因此,兩個(gè)vagrant文件是非常必須的,一個(gè)文件是用來定義代理虛擬機(jī)(Provisioner),另外一個(gè)文件是用來定義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位來處理代理虛擬機(jī)。它也提供Docker和一些神奇的shell命令來讓Docker工作。

最后的事情就是設(shè)置轉(zhuǎn)發(fā)端口了。它使用config.vm.network來為Redis, Elasticsearch 和Postgres來進(jìn)行配置,用代理虛擬機(jī)映射到OS X。

Docker 容器的 Vagrant 文件

這是Vagrantfile的主要內(nèi)容:

 

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

這個(gè)文件定義了三個(gè)容器: Redis , Elasticsearch, 和 Postgres 帶有圖片dockerfile/redis, dockerfile/elasticsearch paintedfox/postgresql

每個(gè)文件定義 vagrant_vagrantfile 作為 proxy VM 文件,這使得它們?cè)谕粋€(gè) proxy 虛擬機(jī)上運(yùn)行。

Redis 和 Postgres 的 volumes 定義是為了它們的信息可以存儲(chǔ)在 proxy VM 上,而不是在容器中。這也是容器可以更刪除或升級(jí)而數(shù)據(jù)不會(huì)丟失的原因。下一步是映射這些文件從proxy VM 到 OS X ,但是沒必要讓其運(yùn)轉(zhuǎn)著。

每個(gè)容器上的 ports 定義哪個(gè)端口轉(zhuǎn)到 proxy VM 。這些需要匹配 proxy VM 到 OS X 的端口。

Postgres 容器也定義了需要設(shè)置它的服務(wù)器的環(huán)境變量。這些可以用來在OS X 里設(shè)置缺省的Postgres 服務(wù)器,通過設(shè)置環(huán)境變量 PGHOST=localhost PGUSER=root PGPASSWORD=abcdEF123456 來實(shí)現(xiàn)。

使用Vagrant工作

在你的Vagrant文件相同的目錄內(nèi),你可以運(yùn)行:
 

vagrant up --provider=docker

第一次運(yùn)行這個(gè)時(shí),Vagrant將下載然后啟動(dòng)proxy VM,然后下載并啟動(dòng)Docker容器。在這些初始化下載之后每次運(yùn)行Vagrant都將重復(fù)使用現(xiàn)有的圖片。

可以查看Docker容器的狀態(tài):
 

vagrant status

應(yīng)該輸出一些東西類似:
 

復(fù)制代碼 代碼如下:

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

要測(cè)試Docker容器是否正確運(yùn)行,可以使用 Redis 和 Postgres 客戶端, 和 curl for Elasticsearch。只需要檢查redis-cli和psql到服務(wù)器的連接,和curl http://localhost:9200響應(yīng)。

如果需要連接到proxy VM(非常有助于調(diào)試),運(yùn)行vagrant global-status,這將列出所有VM,包括proxy。然后調(diào)用vagrant ssh <ID>,ID為proxy的ID。建議不要手動(dòng)改變這個(gè)proxy VM,使用一個(gè)Chef(或類似的)腳本,這樣改變可以更容易的測(cè)試和分布。

性能

使用虛擬化時(shí),第一個(gè)問題總是會(huì)問“性能的影響有多少?”。要找出性能影響是多么的糟糕,我的同事和我都做了一個(gè)Postgres,在相同的硬件上做了Elasticsearch 和 Redis 加強(qiáng)測(cè)試。唯一的區(qū)別是一個(gè)測(cè)試有本機(jī)安裝的軟件而另一個(gè)有Docker自定義容器。帶有本機(jī)軟件的運(yùn)行了2分鐘,而帶有容器的運(yùn)行了3分鐘。

這個(gè)性能影響并不像我想象的那樣小,甚至可能會(huì)更糟。即使這樣,我將繼續(xù)使用Docker做開發(fā),但并不推薦大家將它作為所有開發(fā)環(huán)境問題的靈丹妙藥。


注意:一些其他使用Vagrant 和 Docker的限制在 這里 列出
總結(jié)

我還看不到"Vagrant with Docker"的路在哪里。不過,在看過可能的情況后,我不禁思考它可以用于什么其他地方。另外,它是我遇到過的最好玩的虛擬化,樂趣就在于編程。

相關(guān)文章

  • Redis通過scan查找不過期的 key(方法詳解)

    Redis通過scan查找不過期的 key(方法詳解)

    SCAN 命令是一個(gè)基于游標(biāo)的迭代器,每次被調(diào)用之后, 都會(huì)向用戶返回一個(gè)新的游標(biāo), 用戶在下次迭代時(shí)需要使用這個(gè)新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來延續(xù)之前的迭代過程,對(duì)Redis scan 查找 key相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-08-08
  • Redis集群下過期key監(jiān)聽的實(shí)現(xiàn)代碼

    Redis集群下過期key監(jiān)聽的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Redis集群下過期key監(jiān)聽的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • redis主從+哨兵搭建的實(shí)現(xiàn)示例

    redis主從+哨兵搭建的實(shí)現(xiàn)示例

    本文主要介紹了redis主從+哨兵搭建的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 如何使用docker?compose一鍵部署redis服務(wù)

    如何使用docker?compose一鍵部署redis服務(wù)

    這篇文章主要介紹了如何使用Docker和docker-compose搭建Redis服務(wù),包括創(chuàng)建安裝目錄、配置文件、啟動(dòng)服務(wù)、查看狀態(tài)、登錄驗(yàn)證、連接測(cè)試和查看信息等步驟,需要的朋友可以參考下
    2025-02-02
  • Redis如何使用HyperLogLog的實(shí)現(xiàn)

    Redis如何使用HyperLogLog的實(shí)現(xiàn)

    本文主要介紹了Redis如何使用HyperLogLog的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • redis-cli創(chuàng)建redis集群的實(shí)現(xiàn)

    redis-cli創(chuàng)建redis集群的實(shí)現(xiàn)

    本文主要介紹了redis-cli創(chuàng)建redis集群的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Redis一鍵巡檢腳本的實(shí)現(xiàn)

    Redis一鍵巡檢腳本的實(shí)現(xiàn)

    在使用Redis作為數(shù)據(jù)存儲(chǔ)的時(shí)候,定期進(jìn)行巡檢是非常重要的,本文主要介紹了Redis一鍵巡檢腳本的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • redis的string類型及bitmap介紹

    redis的string類型及bitmap介紹

    這篇文章主要介紹了redis的string類型及bitmap介紹,redis有很多的客戶端連接進(jìn)來,站在redis所在機(jī)器的角度來說,就是有很多socket的連接
    2022-07-07
  • 一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過程實(shí)戰(zhàn)記錄

    一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過程實(shí)戰(zhàn)記錄

    這篇文章主要給大家分享了一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過程實(shí)戰(zhàn)記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Redis+AOP+自定義注解實(shí)現(xiàn)限流

    Redis+AOP+自定義注解實(shí)現(xiàn)限流

    這篇文章主要為大家詳細(xì)介紹了如何利用Redis+AOP+自定義注解實(shí)現(xiàn)個(gè)小功能:自定義攔截器限制訪問次數(shù),也就是限流,感興趣的可以了解一下
    2022-06-06

最新評(píng)論

花垣县| 浮梁县| 溧水县| 腾冲县| 饶河县| 淮南市| 陆河县| 博爱县| 黎川县| 固始县| 新干县| 榆中县| 沙田区| 同德县| 郎溪县| 泗阳县| 香河县| 鲜城| 马龙县| 治多县| 临洮县| 新河县| 琼结县| 通山县| 普兰店市| 新野县| 静安区| 嘉黎县| 个旧市| 饶平县| 耿马| 禹城市| 富蕴县| 神农架林区| 上杭县| 泾源县| 万年县| 大渡口区| 额尔古纳市| 错那县| 河津市|