精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

細(xì)說(shuō)如何利用Docker構(gòu)建開(kāi)發(fā)環(huán)境

云計(jì)算
最近接觸PAAS相關(guān)的知識(shí),在研發(fā)過(guò)程中開(kāi)始使用Docker搭建了自己完整的開(kāi)發(fā)環(huán)境,感覺(jué)生活在PAAS時(shí)代的程序員真是幸福,本文會(huì)簡(jiǎn)要介紹下Docker是什么,如何利用Docker來(lái)搭建自己的開(kāi)發(fā)環(huán)境(本文主要是面向Mac OS X),以及期間所遇到的一些坑和解決方案。

最近接觸PAAS相關(guān)的知識(shí),在研發(fā)過(guò)程中開(kāi)始使用Docker搭建了自己完整的開(kāi)發(fā)環(huán)境,感覺(jué)生活在PAAS時(shí)代的程序員真是幸福,本文會(huì)簡(jiǎn)要介紹下Docker是什么,如何利用Docker來(lái)搭建自己的開(kāi)發(fā)環(huán)境(本文主要是面向Mac OS X),以及期間所遇到的一些坑和解決方案。(本文會(huì)要求你對(duì)PAAS、LXC、CGroup、AUFS有一定的了解基礎(chǔ),請(qǐng)自行Google )

大背景–虛擬化技術(shù)歷史

計(jì)算機(jī)虛擬化技術(shù)由來(lái)已久,從硬件仿真到全虛擬化,再到準(zhǔn)虛擬化和操作系統(tǒng)虛擬化,各種技術(shù)粉墨登場(chǎng),種類繁多,說(shuō)實(shí)在的有點(diǎn)眼花繚亂和復(fù)雜;但用戶的核心訴求一直是比較簡(jiǎn)單的,降低信息技術(shù)(IT)的運(yùn)營(yíng)成本,提高資源利用率,提高安全性和可靠性等等;雖說(shuō)用戶的核心訴求比較簡(jiǎn)單,但每個(gè)時(shí)代的需求場(chǎng)景卻是不同的。在大型機(jī)時(shí)代,虛擬化技術(shù)被用來(lái)支持多個(gè)用戶能夠同時(shí)使用大型機(jī),在x86架構(gòu)時(shí)代,隨著企業(yè)服務(wù)的大規(guī)模部署,虛擬化技術(shù)主要是用來(lái)提高企業(yè)資源的利用率,而現(xiàn)如今,隨著云計(jì)算時(shí)代的到來(lái),人們對(duì)應(yīng)用的安全性、隔離性越來(lái)越高,對(duì)于部署的標(biāo)準(zhǔn)化以及虛擬機(jī)的性能要求越來(lái)越高。現(xiàn)如今,一種叫Linux容器的虛擬化技術(shù)逐漸得到廣泛的應(yīng)用,它的優(yōu)點(diǎn)有許多,本文不一一贅述,有太多的文章可以參考。

什么是Docker?

docker的英文本意是碼頭工人,也就是搬運(yùn)工,這種搬運(yùn)工搬運(yùn)的是集裝箱(Container),集裝箱里面裝的可不是商品貨物,而是任意類型的App,Docker把App(叫Payload)裝在Container內(nèi),通過(guò)Linux Container技術(shù)的包裝將App變成一種標(biāo)準(zhǔn)化的、可移植的、自管理的組件,這種組件可以在你的latop上開(kāi)發(fā)、調(diào)試、運(yùn)行,最終非常方便和一致地運(yùn)行在production環(huán)境下。

Docker的核心底層技術(shù)是LXC(Linux Container),Docker在其上面加了薄薄的一層,添加了許多有用的功能。這篇stackoverflow上的問(wèn)題和答案很好地詮釋了Docker和LXC的區(qū)別,能夠讓你更好的了解什么是Docker, 簡(jiǎn)單翻譯下就是以下幾點(diǎn):

  • Docker提供了一種可移植的配置標(biāo)準(zhǔn)化機(jī)制,允許你一致性地在不同的機(jī)器上運(yùn)行同一個(gè)Container;而LXC本身可能因?yàn)椴煌瑱C(jī)器的不同配置而無(wú)法方便地移植運(yùn)行;
  • Docker以App為中心,為應(yīng)用的部署做了很多優(yōu)化,而LXC的幫助腳本主要是聚焦于如何機(jī)器啟動(dòng)地更快和耗更少的內(nèi)存;
  • Docker為App提供了一種自動(dòng)化構(gòu)建機(jī)制(Dockerfile),包括打包,基礎(chǔ)設(shè)施依賴管理和安裝等等;
  • Docker提供了一種類似git的Container版本化的機(jī)制,允許你對(duì)你創(chuàng)建過(guò)的容器進(jìn)行版本管理,依靠這種機(jī)制,你還可以下載別人創(chuàng)建的Container,甚至像git那樣進(jìn)行合并;
  • Docker Container是可重用的,依賴于版本化機(jī)制,你很容易重用別人的Container(叫Image),作為基礎(chǔ)版本進(jìn)行擴(kuò)展;
  • Docker Container是可共享的,有點(diǎn)類似github一樣,Docker有自己的INDEX,你可以創(chuàng)建自己的Docker用戶并上傳和下載Docker Image;
  • Docker提供了很多的工具鏈,形成了一個(gè)生態(tài)系統(tǒng);這些工具的目標(biāo)是自動(dòng)化、個(gè)性化和集成化,包括對(duì)PAAS平臺(tái)的支持等;

那么Docker有什么用呢?對(duì)于運(yùn)維來(lái)說(shuō),Docker提供了一種可移植的標(biāo)準(zhǔn)化部署過(guò)程,使得規(guī)模化、自動(dòng)化、異構(gòu)化的部署成為可能甚至是輕松簡(jiǎn)單的事情;而對(duì)于開(kāi)發(fā)者來(lái)說(shuō),Docker提供了一種開(kāi)發(fā)環(huán)境的管理方法,包括映像、構(gòu)建、共享等功能,而后者是本文的主題。

Docker的安裝和構(gòu)成

Docker官方本身提供了非常具體的安裝教程,這里不說(shuō)具體的安裝過(guò)程,請(qǐng)參考Docker安裝(Mac系統(tǒng)),重要的是描述下原理和安裝完成后的結(jié)構(gòu),好對(duì)Docker更好的了解。 由于LXC本身不支持Mac內(nèi)核,因此需要跑一個(gè)VirtualBox虛擬機(jī)(TinyCoreLinux)來(lái)安裝,幸好Docker社區(qū)提供了一個(gè)非常方便的工具boot2docker(其實(shí)就是一個(gè)VBoxManage的包裝shell腳本),用于安裝Mac下的整個(gè)Docker環(huán)境。具體的結(jié)構(gòu)如下:

docker-install

如圖所示,安裝完成后,具體情況如下:

  • 在Mac的home目錄~/.boot2docker下創(chuàng)建了虛擬機(jī)所需要的文件,其中boot2docker.iso是虛擬機(jī)映像,這是一個(gè)由CD-ROM引導(dǎo)的TinyCoreLinux系統(tǒng);而boot2docker-vm.vmdk文件則是你的虛擬機(jī)磁盤(pán),你所有的持久化數(shù)據(jù)都存放在這里,包括docker創(chuàng)建的lxc容器等文件。
  • 在Mac下,docker被分為客戶端docker-client和服務(wù)端docker-daemon兩部分,如果是在linux(比如ubuntu),實(shí)際上則是同一個(gè)可執(zhí)行文件同時(shí)充當(dāng)客戶端和服務(wù)端。docker-daemon可以監(jiān)聽(tīng)unix scoket,也可以在tcp socket(默認(rèn)端口為4234),docker-client會(huì)通過(guò)一個(gè)叫DOCKER_HOST的環(huán)境變量讀取服務(wù)地址和端口,因此你應(yīng)該在你的bash_profile文件里面添加這么一行:

  1. export DOCKER_HOST=tcp://127.0.0.1:4243 

docker-daemon跑在虛擬機(jī)上,這個(gè)程序?qū)嶋H上就是接收docker-client發(fā)送過(guò)來(lái)的消息命令,創(chuàng)建、啟動(dòng)和銷毀lxc容器,以及docker本身的版本管理、映像存儲(chǔ)等等 運(yùn)行你的第一個(gè)docker容器 安裝完成后,就差不多可以開(kāi)始創(chuàng)建和運(yùn)行docker容器了,在這之前,你首先得下載一個(gè)Image,什么是Image?我們先來(lái)了解docker的2個(gè)基礎(chǔ)概念:ImageContainer

Container和Image 在Docker的世界里,Image是指一個(gè)只讀的層(Layer),這里的層是AUFS里的概念,最直觀的方式就是看一下docker官方給出的圖:

docker-filesystems-multilayer

Docker使用了一種叫AUFS的文件系統(tǒng),這種文件系統(tǒng)可以讓你一層一層地疊加修改你的文件,最底下的文件系統(tǒng)是只讀的,如果需要修改文件,AUFS會(huì)增加一個(gè)可寫(xiě)的層(Layer),這樣有很多好處,例如不同的Container可以共享底層的只讀文件系統(tǒng)(同一個(gè)Kernel),使得你可以跑N多個(gè)Container而不至于你的硬盤(pán)被擠爆了!這個(gè)只讀的層就是Image!而如你所看到的,一個(gè)可寫(xiě)的層就是Container。

那Image和Container的區(qū)別是什么?很簡(jiǎn)單,他們的區(qū)別僅僅是一個(gè)是只讀的層,一個(gè)是可寫(xiě)的層,你可以使用docker commit 命令,將你的Container變成一個(gè)Image,也就是提交你所運(yùn)行的Container的修改內(nèi)容,變成一個(gè)新的只讀的Image,這非常類似于git commit命令,感覺(jué)真棒!

實(shí)際上這就是Docker對(duì)Container映像的版本管理基石,AUFS文件系統(tǒng)實(shí)在是太美妙了,更多細(xì)節(jié)可以參考DotCloud的這篇文章

運(yùn)行和退出

在了解了Image和Container的概念后,我們可以開(kāi)始下載一個(gè)Image,Docker的好處就是提供了一個(gè)類似github的Image倉(cāng)庫(kù)管理,你可以非常方便pull別人的Image下來(lái)運(yùn)行,例如,我們可以下載一個(gè)ubuntu Image:

  1. docker pull ubuntu:13.10  

這里的13.10是一個(gè)Tag,類似于git的tag,這里的tag可以為你制定一個(gè)ubuntu的版本。下載完成后,執(zhí)行docker images命令可以列出你已經(jīng)下載或者自己構(gòu)建的image:(請(qǐng)?jiān)试S我使用可愛(ài)的馬賽克 :) )

QQ20140322-1

你可以看到ubuntu:13.10的大小為178MB,以及它的IMAGE ID。 現(xiàn)在我們開(kāi)始運(yùn)行一個(gè)Container,命令很簡(jiǎn)單,例如我們想運(yùn)行一個(gè)執(zhí)行Shell終端的Container:

QQ20140322-2

如你看到的,你已經(jīng)進(jìn)入到一個(gè)Shell里面,可以執(zhí)行你想執(zhí)行的任何命令,就和在ubuntu里面一樣,進(jìn)去后默認(rèn)是在根目錄/下,可以看到經(jīng)典的unix/linux目錄結(jié)構(gòu),以及你所運(yùn)行的bash版本等信息。你可以給你的Container定一個(gè)名字,通過(guò)–name選項(xiàng),例如這里命名了shell,日后你就可以直接用這個(gè)名字引用Contanier。

退出一個(gè)Container也很簡(jiǎn)單,你直接exit就好了。 其他更多的命令這里不做贅述,因?yàn)楣俜降奈臋n已經(jīng)非常全面,這里只是給一個(gè)直觀的初步印象。下面進(jìn)入主題。

利用Docker搭建開(kāi)發(fā)環(huán)境

我們先看看程序員在搭建開(kāi)發(fā)環(huán)境時(shí)遇到的一些問(wèn)題:

  • 軟件安裝麻煩,比如很多公司都使用redhat,一般開(kāi)發(fā)人員又不給root,安裝一個(gè)nginx或者是mysql都得自己下載編譯安裝 權(quán)限問(wèn)題,沒(méi)有root,一些軟件無(wú)法運(yùn)行,例如dnsmasq;
  • 沒(méi)有root,無(wú)法修改hosts,無(wú)法netstat -nptl,無(wú)法tcpdump,無(wú)法iptable
  • 隔離性差,例如不同的開(kāi)發(fā)人員如果在同一臺(tái)主機(jī)環(huán)境下共享開(kāi)發(fā),雖然是用戶隔離,但端口如果不規(guī)范可能會(huì)沖突;同一個(gè)Mysql如果權(quán)限管理不好很有可能誤刪別人的數(shù)據(jù)
  • 可移植性差,例如和生產(chǎn)環(huán)境不一致,開(kāi)發(fā)人員之間也無(wú)法共享;更嚴(yán)重的情況是當(dāng)有新人入職時(shí),通常需要又折騰一遍開(kāi)發(fā)環(huán)境,無(wú)法快速搭建

這些問(wèn)題可以通過(guò)在本地搭建虛擬機(jī)來(lái)解決,但虛擬機(jī)是一個(gè)很笨重的解決方案,Docker是一個(gè)非常輕量級(jí)的方案,而且還擁有虛擬機(jī)沒(méi)有的一些功能,例如標(biāo)準(zhǔn)化Image,Image共享等,更重要的是,利用Docker,你可以運(yùn)行非常多的容器,在你的Mac下搭建一個(gè)分布式的開(kāi)發(fā)環(huán)境根本不是什么大的問(wèn)題,而且對(duì)內(nèi)存、磁盤(pán)和cpu的消耗相比傳統(tǒng)的虛擬機(jī)要低許多,這些都要?dú)w功于AUFS和LXC這兩大神奇的技術(shù)。

構(gòu)建基礎(chǔ)Image

想要搭建一個(gè)節(jié)省磁盤(pán)空間和擴(kuò)展性良好的開(kāi)發(fā)環(huán)境,最重要的第一步就是構(gòu)建一個(gè)基礎(chǔ)性的Image,比如你的主要開(kāi)發(fā)語(yǔ)言是Ruby,那么你肯定需要一個(gè)已經(jīng)安裝好以下工具的基礎(chǔ)Image:

  • ruby
  • bundler
  • gem

然后在此基礎(chǔ)上,你可以擴(kuò)展這個(gè)基礎(chǔ)的Image(下面叫base)為不同的開(kāi)發(fā)環(huán)境,例如rails,或者是nats。當(dāng)然,你的這個(gè)base也可以從別人的Image擴(kuò)展而來(lái),還記得我們剛剛pull下來(lái)的ubuntu:13.10這個(gè)Image嗎?你可以從這個(gè)Image擴(kuò)展開(kāi)始構(gòu)建你的base,如何做呢?Docker提供了一種標(biāo)準(zhǔn)化的DSL方式,你只需要編寫(xiě)一個(gè)Dockerfile,運(yùn)行docker build指令,就可以構(gòu)建你自己的Image,這有點(diǎn)像Makefile和make命令一樣,只是大家要構(gòu)建的內(nèi)容和構(gòu)建語(yǔ)言不同。

Dockerfile的語(yǔ)法請(qǐng)參考Dockerfile Reference,這里給出上面提到的Ruby開(kāi)發(fā)的base Dockerfile示例:

  1. FROM ubuntu:13.10   
  2. RUN apt-get update   
  3. RUN apt-get install -y ruby ruby-dev gem   
  4. RUN gem install bundler  

這里只用到了很簡(jiǎn)單的2個(gè)指令:FROM和RUN,F(xiàn)ROM指定了我們要擴(kuò)展的Image,RUN指定我們要運(yùn)行的命令,這里是安裝ruby,gem、bundler等軟件。寫(xiě)好Dockerfile后,運(yùn)行以下指令就可以創(chuàng)建你的base image了:

  1. docker build --rm -t dev:base .  

-t 選項(xiàng)是你要構(gòu)建的base image的tag,就好比ubuntu:13.10一樣 –rm 選項(xiàng)是告訴Docker在構(gòu)建完成后刪除臨時(shí)的Container,Dockerfile的每一行指令都會(huì)創(chuàng)建一個(gè)臨時(shí)的Container,一般你是不需要這些臨時(shí)生成的Container的 如你所想,我們可以像運(yùn)行ubuntu:13.10那樣運(yùn)行我們的base了:

  1. docker run -i -t --name ruby dev:base irb  

這里我們使用dev:base這個(gè)Image運(yùn)行了一個(gè)irb解釋器(Ruby的交互式解釋器)。 在構(gòu)建完base之后,你可以依樣畫(huà)葫蘆構(gòu)建你的rails環(huán)境,很簡(jiǎn)單,只需要FROM dev:base,然后RUN安裝你的rails組件就可以了,不再贅述。最終你可能構(gòu)建的開(kāi)發(fā)環(huán)境是這樣的:

docker-dev

如上圖所示,base和service都是從ubutnu:13.10繼承而來(lái),他們作為不同的基礎(chǔ)開(kāi)發(fā)環(huán)境,base是ruby開(kāi)發(fā)環(huán)境(也許命名為dev:ruby更為合適?),而service是一些基礎(chǔ)數(shù)據(jù)服務(wù),例如mysql,memcache,我建議將這些第三方組件集中在一個(gè)Container中,因?yàn)樗麄兊沫h(huán)境不經(jīng)常修改,可以作為一種底層服務(wù)Container運(yùn)行,除非你需要構(gòu)建分布式的服務(wù),例如memcache集群,那可以繼續(xù)拆分。

指定Image入口

當(dāng)你構(gòu)建完你的base Image和其他應(yīng)用的Image之后,你就可以啟動(dòng)這些Image了,還記得前面我們給出的運(yùn)行命令嗎?

  1. docker run -i -t --name shell dev:base /bin/bash  

這里我們運(yùn)行了一個(gè)bash,這樣你就可以在shell里面執(zhí)行你所想要執(zhí)行的任何命令了,但是我們有時(shí)候并不想每次都啟動(dòng)一個(gè)shell,接著再在shell里面啟動(dòng)我們的程序,比如一個(gè)mysql,而是想一啟動(dòng)一個(gè)容器,mysql服務(wù)就自動(dòng)運(yùn)行了,這很簡(jiǎn)單,Dockerfile提供了CMD和ENTRYPOINT這2個(gè)指令,允許你指定一個(gè)Image啟動(dòng)時(shí)的默認(rèn)命令。CMD和ENTRYPOINT的區(qū)別是CMD的參數(shù)可以由docker run指令指定的參數(shù)覆蓋,而ENTRYPOINT則不可以。例如我們想運(yùn)行一個(gè)memcached服務(wù),可以這么寫(xiě)Dockerfile:

  1. FROM ubuntu:13.10   
  2. RUN apt-get install -y memcached CMD memcached -u root -p 40000  

或者可以這么寫(xiě):

  1. FROM ubuntu:13.10   
  2. RUN apt-get install -y memcached ENTRYPOINT ["memcached", "-u", "root", "-p", "40000"]   

注意不要把memcached啟動(dòng)為后臺(tái)進(jìn)程,即加上-d選項(xiàng),否則docker啟動(dòng)的container會(huì)馬上stop掉,這點(diǎn)我也覺(jué)得比較意外。 接著我們build這個(gè)Image:

  1. docker build -t dev:memcache .   

這樣,當(dāng)你build完你的Image后,你可以直接將該Image運(yùn)行為一個(gè)容器,它會(huì)自動(dòng)啟動(dòng)mysql服務(wù):

  1. docker run --name memcache_service -d dev:memcache  

注意使用-d (detach) 選項(xiàng),這樣這個(gè)container就會(huì)作為后臺(tái)進(jìn)程運(yùn)行了,接著你可以使用docker ps命令查看是否有在運(yùn)行。

#p#

磁盤(pán)映射

大部分時(shí)候你會(huì)需要把你host主機(jī)(宿主)上的目錄映射到Container里面,這樣你就非常方便地在host主機(jī)上編輯代碼,然后直接就可以在Container里面運(yùn)行它們,而不用手動(dòng)copy到Container里面再重啟Container。按理將host的目錄映射到guest(指Container)上應(yīng)該是一件很容易的事情,就好像VMWare那樣,但可惜的是,由于Mac上的Docker多了一層虛擬機(jī),因此多了一層周折,你必須先VM上的目錄通過(guò)sshfs mount到host(指Mac)上,然后再將你的目錄或文件copy到這個(gè)mount的目錄,再將VM上的這個(gè)目錄映射到Container里,聽(tīng)起來(lái)比較拗口,畫(huà)個(gè)圖會(huì)清晰很多。

docker-disk-map

如上圖所示,VM里面的/mnt/sda1/dev/目錄(你需要自己創(chuàng)建)通過(guò)sshfs命令mount到了host主機(jī)(Mac)的~/workspace/dev/目錄 ,而VM里的/mnt/sda1/dev/目錄又被映射到了Container的/src/目錄下,這樣你就可以在Container里面的/src/目錄下訪問(wèn)你的host文件了。具體如何做呢?首先你需要安裝sshfs命令,然后將VM的password寫(xiě)到一個(gè)文件中,例如~/.boot2docker/b2d-passwd,在用sshfs命令mount起VM的/mnt/sda1/dev目錄:

  1. brew install sshfs   
  2. cat tcuser > ~/.boot2docker/b2d-passwd   
  3. sshfs docker@localhost:/mnt/sda1/dev ~/workspace/dev -p 2022 -o reconnect -o password_stdin < ~/.boot2docker/b2d-passwd   

接著你在run一個(gè)Container的時(shí)候需要通過(guò)-v選項(xiàng)來(lái)將/mnt/sda1/dev/映射到/src目錄:

  1. docker run -i -t dev:base -v /mnt/sda1/dev:/src /bin/bash   

這樣你就可以在你的Container的/src目錄下看到你host里的文件了。 磁盤(pán)映射還有2個(gè)地方需要注意:

  • 你的文件實(shí)際上是存儲(chǔ)在VM里面的,也就是說(shuō)你需要將你的目錄或者文件copy到VM里面,你sshfs之后,就是copy到~/workspace/dev目錄下
  • 千萬(wàn)不要sshfs mount非/mnt/sda1下的目錄,因?yàn)閂M里面跑的是TinyCoreLinux,這個(gè)OS的rootfs是臨時(shí)性的(放在內(nèi)存的,實(shí)際上就是boot2docker.iso文件里面的一個(gè)rootfs),因此其根目錄/下的東西(包括/home)根本不會(huì)持久化,只有/mnt/sda1這個(gè)目錄下的才能持久化。如果你放在/home目錄下,只要VM一重啟,就會(huì)丟失的,/mnt/sda1則不會(huì),實(shí)際上就是那個(gè)~/.boot2docker-vm.vmdk文件掛載到了/mnt/sda1目錄下

端口映射

和磁盤(pán)映射一樣,你有時(shí)候會(huì)需要將Container的端口映射到host主機(jī)上,同樣蛋疼的是,由于多了一層VM,端口映射也顯得比較麻煩。首先你需要設(shè)置VirtualBox的端口映射,然后再將Container的端口映射到你的VM里面:

docker-port-map

具體是這么做的,通過(guò)2條命令:

  1. boot2docker ssh -L 8000:localhost:8000   
  2. docker run -i -t -p 8000:8000  

也就是說(shuō)在docker run的時(shí)候通過(guò)-p選項(xiàng)指定要映射的端口到VM,而boot2docker ssh命令則是將VM的8000端口映射到了host(Mac)的8000端口,這樣你就可以通過(guò)Mac的localhost:8000訪問(wèn)Container的8000端口了。 其實(shí),有另一種解決方案就是你不用映射到host(Mac),而是直接登錄到VM里面進(jìn)行訪問(wèn)就好了,boot2docker ssh就可以登錄到VM,這樣就類似于你的host是ubuntu,但這種解決方案的問(wèn)題是這個(gè)ubuntu太弱了(TinyCoreLinux),如果你在這個(gè)ubuntu里面開(kāi)發(fā)代碼,或者是運(yùn)行瀏覽器,是非常蛋疼的事情,關(guān)鍵還是這個(gè)ubuntu是每次重啟都會(huì)復(fù)原的!所以我建議還是做多一層映射好了。 最后,實(shí)際上在VM里面,你是可以直接訪問(wèn)所有的Container的端口的,因?yàn)閂M到Container的網(wǎng)絡(luò)都是橋接的。

其他的一些坑

在使用的過(guò)程中,還遇到一些不少的坑:

  1. /etc/hosts文件無(wú)法修改,這樣你就不能自己做域名解析
  2. VM的系統(tǒng)時(shí)間是UTC +0000的,而且貌似無(wú)法修改
  3. Container的IP無(wú)法指定為靜態(tài)IP,因此每次重啟Container時(shí),IP可能會(huì)變化

第1個(gè)問(wèn)題的解決方案是通過(guò)安裝dnsmasq軟件來(lái)做域名解析:

  1. # 首先,在你的Container里面安裝dnsmasq軟件:  
  2.    
  3. apt-get install dnsmasq  
  4.    
  5. # 將以下文本添加到 /etc/dnsmasq.conf文件的最后:  
  6.    
  7. listen-address=127.0.0.1 resolv-file=/etc/resolv.dnsmasq.conf conf-dir=/etc/dnsmasq.d user=root  
  8.    
  9. # 接著在/etc/dnsmasq.d/目錄下新建一個(gè)文件,隨意起個(gè)名字  
  10.    
  11. vi /etc/dnsmqsq.d/dns.conf  
  12.    
  13. # 指定你要映射的域名,例如google.com,則將下面貼進(jìn)dns.conf文件  
  14.    
  15. address="/google.com/172.17.0.4" 
  16.    
  17. # 最后退出容器,重啟啟動(dòng)容器時(shí),通過(guò)-dns選項(xiàng)指定域名服務(wù)器  
  18.    
  19. docker run -i -t -dns 127.0.0.1 -dns 8.8.8.8 dev:base /bin/bash  
  20.    
  21. # 一定要注意上面添加google的域名服務(wù)器8.8.8.8,否則你訪問(wèn)不了外網(wǎng)  
  22.    
  23. # 進(jìn)去Container后,啟動(dòng)dnsmasq,這樣你就能夠ping google.com了  
  24.    
  25. /etc/init.d/dnsmasq start 

第2個(gè)問(wèn)題的解決方案就稍微麻煩些,起碼我沒(méi)有找到更好的解決方案,我是將boot2docker.iso文件重新制作一次來(lái)解決這個(gè)問(wèn)題的:

  1. # 首先你需要將boot2docker.iso文件mount到一個(gè)目錄下  
  2.    
  3. hdiutil mount ~/.boot2docker/boot2docker.iso  
  4.    
  5. # 系統(tǒng)會(huì)mount到/Volumes/boot2docker目錄下,然后你最好將這下面的東西copy出來(lái)到一個(gè)另外的目錄,這樣我們好制作一張新的ISO  
  6.    
  7. cp -r /Volumes/boot2docker/* ~/tmp/  
  8.    
  9. # 接著我們修改以下文件  
  10.    
  11. vi ~/tmp/boot/isolinux/isolinux.cfg  
  12.    
  13. # 將其中的以下這行修改:  
  14.    
  15. append loglevel=3 user=docker console=ttyS0 console=tty0 nomodeset norestore base  
  16.    
  17. # 修改為:(其實(shí)就是加了tz的啟動(dòng)參數(shù)),然后保存  
  18.    
  19. append tz=CST-8 loglevel=3 user=docker console=ttyS0 console=tty0 nomodeset norestore base  
  20.    
  21. # 接著你必須在ubuntu環(huán)境下重新制作ISO文件,你可以利用docker跑一個(gè)ubuntu,哈哈,假設(shè)你將boot2docker目錄copy到了ubuntu的/src/目錄下,那么接著這么做  
  22.    
  23. # 安裝xorriso命令  
  24.    
  25. apt-get install xorriso  
  26.    
  27. # 構(gòu)建ISO映射  
  28.    
  29. xorriso -as mkisofs -J -R -V boot2docker -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -o /boot2docker.iso /src/  
  30.    
  31. # 這樣就生成了/boot2docker.iso文件,最后你就可以替換到VM的啟動(dòng)ISO文件了,然后重啟VM了  
  32.    
  33. boot2docker restart  
  34.    
  35. # 最后你必須設(shè)置你的VM為正確的時(shí)間,使用date -s 命令,最后用date命令查看,你就能看到CST時(shí)區(qū)的正確時(shí)間了  
  36.    
  37. Sun Mar 30 00:27:13 CST 2014  
  38.    
  39. # 對(duì)于你啟動(dòng)的container,你都必須重新設(shè)置TZ環(huán)境變量,否則即使VM是CST-8,你的container還是UCT +00:00的時(shí)間  
  40.    
  41. export TZ='CST-8' 

第三個(gè)問(wèn)題暫時(shí)無(wú)法解決(可能需要編輯底層的LXC配置文件)。

docker的限制以及后續(xù)的一些想法

docker其實(shí)還是有一些限制的:

  • 要求你的環(huán)境是Linux的,而且內(nèi)核必須很新(>= 2.6.27 (29)),這其實(shí)是LXC本身的限制,和docker無(wú)關(guān)
  • docker的Container目前host是不能修改的,當(dāng)然有解決方案(dnsmasq)
  • docker的Container也暫時(shí)無(wú)法指定靜態(tài)IP

用docker作為開(kāi)發(fā)環(huán)境甚至是生產(chǎn)環(huán)境其實(shí)還有很多地方值得嘗試:

  • 在團(tuán)隊(duì)內(nèi)部構(gòu)建本地的倉(cāng)庫(kù),標(biāo)準(zhǔn)化所有的開(kāi)發(fā)環(huán)境,使得團(tuán)隊(duì)的新人可以快速上手
  • 在生產(chǎn)環(huán)境部署docker,這其實(shí)是PAAS的虛擬化和自動(dòng)化的一種方式,利用LXC和Docker能夠更便捷地實(shí)施PAAS
  • 嘗試用docker做分布式集群模擬和測(cè)試,成本會(huì)更加低廉,更加容器維護(hù)

參考文章

  1. Linux虛擬化技術(shù)
  2. 利用Linux容器實(shí)現(xiàn)可移植的應(yīng)用部署
  3. 如何修改host
  4. Building a Development With Docker
  5. boot2docker的build
  6. PAAS Under the Hood

原文鏈接:http://tech.uc.cn/?p=2726

責(zé)任編輯:林師授 來(lái)源: UC技術(shù)博客
相關(guān)推薦

2014-01-07 10:36:32

EclipsSpark

2011-06-03 13:38:49

Android 開(kāi)發(fā)環(huán)境

2015-01-22 09:06:31

Docker云計(jì)算云應(yīng)用

2023-08-17 20:13:42

2017-02-05 09:13:58

PHP Cake框架構(gòu)建

2013-05-14 09:54:27

Android開(kāi)發(fā)開(kāi)源開(kāi)發(fā)環(huán)境

2009-07-14 13:14:13

2009-07-09 15:31:23

構(gòu)建Python開(kāi)發(fā)環(huán)

2019-07-29 08:00:18

文件容器Docker Comp

2015-03-30 08:56:18

Docker高效開(kāi)發(fā)環(huán)境虛擬化

2015-06-01 12:10:57

dockerhexo

2021-12-22 23:28:04

區(qū)塊鏈人工智能技術(shù)

2023-06-20 16:17:40

人工智能

2011-03-15 10:48:47

2010-06-12 16:29:00

BlackBerry開(kāi)

2011-08-25 15:02:17

Lua環(huán)境搭建EditPlus

2016-10-18 10:23:14

Docker容器SSL證書(shū)

2009-12-10 17:54:34

Visual Stud

2014-08-07 10:25:15

DockerPython

2016-11-03 09:49:04

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一级黄色片免费| 精品人伦一区二区| 538视频在线| 久久综合久久综合亚洲| 国产不卡视频在线| 日韩一级片大全| 国产日韩三级| 欧美日韩在线不卡| 国产一区二区片| 国产中文字幕在线| 国产精品系列在线播放| 日韩美女av在线免费观看| 亚洲视频重口味| 婷婷成人综合| 777久久久精品| 日韩欧美国产免费| 麻豆电影在线播放| 91亚洲大成网污www| 成人免费福利在线| 中文字幕黄色片| 欧美激情综合色综合啪啪| 亚洲乱码av中文一区二区| 手机精品视频在线| 成人免费直播| 亚洲午夜三级在线| 一区二区三区在线视频111| 视频一区 中文字幕| 久久国产精品72免费观看| 欧美亚洲视频一区二区| av激情在线观看| 亚洲春色h网| 精品对白一区国产伦| 亚洲欧美自拍另类日韩| 东京一区二区| 亚洲一区中文在线| 中文字幕一区二区三区四区五区人 | 久久久美女艺术照精彩视频福利播放| 91精品视频一区| 波多野结衣日韩| 国产情侣久久| 久久久久久91| 久久精品视频免费在线观看| 凹凸成人精品亚洲精品密奴| 日韩精品免费观看| 精品1卡二卡三卡四卡老狼| 成人在线视频国产| 欧美日韩视频在线第一区| aaaaaa亚洲| 日本在线啊啊| 午夜久久久久久久久久一区二区| 欧美少妇在线观看| 国产一二区在线| 中文字幕一区不卡| 亚洲欧洲精品一区二区| av中文字幕在线| 国产亚洲欧洲997久久综合 | 性猛交富婆╳xxx乱大交天津| 麻豆高清免费国产一区| 国产精品美女免费视频| 久久久精品毛片| 久久先锋资源| 国产成一区二区| 91在线视频免费播放| 久久精品盗摄| 国产精品成人一区| 中文字幕日本人妻久久久免费| 久久成人一区| 国产精品黄视频| 久久久999久久久| 麻豆国产91在线播放| 国产中文日韩欧美| 国产成人精品白浆久久69| 国产精品一区久久久久| 国产精品theporn88| 空姐吹箫视频大全| av一区二区三区在线| 精品国产一区二区三| 亚洲 另类 春色 国产| 久久综合成人精品亚洲另类欧美 | 天天干,夜夜爽| 99re成人在线| 日韩亚洲一区在线播放| 在线视频婷婷| 一区二区三区不卡视频在线观看| 99久久久精品视频| 校园春色亚洲| 欧美日韩在线精品一区二区三区激情| 亚洲一二三av| 美女av一区| 国产一区二区三区久久精品 | 人成网站在线观看| 2023国产精品| 中文有码久久| 超碰97国产精品人人cao| 欧美日韩亚洲系列| 五月天婷婷亚洲| 高清精品视频| 一区二区欧美在线| 久久高清无码视频| 老**午夜毛片一区二区三区 | 一级特黄aaaaaa大片| 国产精品一区二区在线播放 | 香蕉视频免费在线看| 国产午夜精品福利| 欧美狂野激情性xxxx在线观| 都市激情亚洲综合| 日韩欧美自拍偷拍| 四虎永久免费在线观看| 午夜精品剧场| 国产精品av网站| www.亚洲黄色| 欧美国产在线观看| 国产97在线 | 亚洲| 日韩久久一区| 亚洲视频自拍偷拍| 久久精品女人毛片国产| 麻豆精品国产传媒mv男同| 精品国产电影| 超鹏97在线| 欧美性生活影院| 午夜不卡久久精品无码免费| 91一区二区| 国产91成人在在线播放| 亚洲AV无码一区二区三区少妇| 国产欧美日韩另类视频免费观看| 日韩xxxx视频| 日本超碰一区二区| 色综合伊人色综合网| 在线天堂中文字幕| 丁香六月久久综合狠狠色| 一区二区三区四区国产| 日韩电影免费观| 亚洲第一黄色网| 全网免费在线播放视频入口| 蜜桃精品在线观看| 欧美一区观看| 在线观看爽视频| 亚洲成人av在线播放| 久久国产在线视频| 国产一区二区三区综合| 一区二区视频在线观看| 成人精品国产| 国产一区二区久久精品| 国产免费a视频| 久久蜜桃av一区二区天堂| 999一区二区三区| 亚洲午夜免费| 欧美日韩爱爱视频| 国产99对白在线播放| 亚洲人xxxx| 九九九久久久久久久| 亚洲精品91| 亚洲最大av在线| 韩国中文字幕在线| 日韩午夜激情电影| 激情综合五月网| 国产成人精品一区二| 成年丰满熟妇午夜免费视频| 国产色99精品9i| 久久999免费视频| 午夜精品久久久久久久第一页按摩 | 91精品国产综合久久香蕉麻豆| 欧美亚洲色综久久精品国产| 日本女人一区二区三区| 神马影院我不卡午夜| 福利一区二区免费视频| xvideos亚洲人网站| 国产日韩免费视频| 一区二区三区精品| 精品少妇人妻av一区二区三区| 一本色道88久久加勒比精品| 久久国产精品一区二区三区四区 | 狠狠躁天天躁日日躁欧美| 中文字幕一区二区三区人妻不卡| 久久精品五月| 亚洲三区在线观看| 麻豆视频久久| 97在线视频观看| 国产福利免费在线观看| 在线成人午夜影院| 日本少妇xxxx动漫| 国产三级久久久| 性欧美在线视频| 精品999成人| 欧美日韩在线观看一区二区三区| 欧美暴力调教| 超碰精品一区二区三区乱码 | 国产亚洲综合久久| 精品国产999久久久免费| 午夜精品久久久久久久99水蜜桃| 成人网站免费观看| 韩国v欧美v亚洲v日本v| 99色这里只有精品| 成人羞羞网站入口免费| 91九色在线观看| 亚洲欧洲美洲av| 久久夜色精品国产欧美乱| 神宫寺奈绪一区二区三区| 欧美日韩国产系列| 亚洲国产成人精品激情在线| 国产精品成人一区二区三区夜夜夜| 五月天国产视频| 久久久久久久波多野高潮日日| 一本一道久久久a久久久精品91 | 精品免费99久久| 国产真人无遮挡作爱免费视频| 一区二区三区在线不卡| 午夜时刻免费入口| 国产成人精品网址| 亚洲第一中文av| 日韩一级网站| 久久久久久久久久久久久国产| 亚洲婷婷伊人| av一区二区在线看| 欧美日韩免费电影| 青青草一区二区| 七七久久电影网| 最近2019年好看中文字幕视频| 手机看片福利永久| 日韩欧美www| 国产农村妇女毛片精品| 在线视频欧美精品| 在线天堂中文字幕| 性欧美大战久久久久久久久| 一区二区国产精品精华液| 久久久久久97三级| 99re久久精品国产| 国产精品99久久不卡二区| 激情视频免费网站| 巨乳诱惑日韩免费av| 成人综合视频在线| 极品尤物久久久av免费看| 青青视频免费在线观看| 99国产**精品****| 亚洲激情图片| 波多野结衣一区| 国内成+人亚洲| 91九色鹿精品国产综合久久香蕉| 91久久夜色精品国产网站| 国产精品原创视频| 国产精品小说在线| 电影亚洲精品噜噜在线观看| 欧美亚州一区二区三区| 激情国产在线| 69av在线视频| 99re6在线精品视频免费播放| 欧美人与性动交| 青青草视频在线免费直播| 欧美成人精品h版在线观看| 97超碰资源站在线观看| 久久久成人精品| 国产精品久久久久久福利| 久久精品久久久久| 久草中文在线| 久久91亚洲人成电影网站| 色呦呦网站在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 麻豆视频在线播放| 九九热精品视频在线播放| 欧洲在线视频| 久久久免费电影| 国内精彩免费自拍视频在线观看网址| 97精品在线视频| av日韩电影| 国产精品久久久久久久天堂 | 国产午夜久久| 日日碰狠狠躁久久躁婷婷| 日本亚洲天堂网| 日韩在线一区视频| 国产成人综合精品三级| 亚洲 欧美 日韩在线| 久久午夜电影网| 人妻熟人中文字幕一区二区| 日韩毛片一二三区| 国产亚洲精品成人| 欧美体内谢she精2性欧美| 中文字幕手机在线视频| 51精品国自产在线| 欧美一区,二区| 亚洲最新视频在线| 成人看av片| 66m—66摸成人免费视频| 成人啊v在线| 亚洲综合社区网| 亚洲bt欧美bt精品777| 亚洲欧美丝袜| 亚洲国产黄色| 久久撸在线视频| 丁香五精品蜜臀久久久久99网站 | 久久夜色撩人精品| av资源在线播放| 国产免费久久av| 风间由美一区二区av101 | 欧美另类亚洲| 久久久久国产精品熟女影院| 国产制服丝袜一区| 黑人巨大精品欧美| 亚洲三级在线免费观看| 六月丁香在线视频| 欧美日本一区二区三区四区| 人妻精品一区一区三区蜜桃91| 亚洲色图第一页| 青青青国内视频在线观看软件| 国产精品九九九| 成人台湾亚洲精品一区二区| 日本免费高清一区二区| 欧美日韩福利| 午夜激情av在线| 2021中文字幕一区亚洲| 五月天丁香激情| 在线中文字幕一区二区| 国产91麻豆视频| 久久久国产精品亚洲一区| 校园春色亚洲| 国产激情一区二区三区在线观看 | 99久久99久久免费精品蜜臀| 久久噜噜色综合一区二区| 婷婷夜色潮精品综合在线| 无码国产精品一区二区高潮| 99香蕉久久| 亚洲乱码一区二区| 黄网站在线观| 成人xvideos免费视频| 色狠狠久久av综合| 中文字幕の友人北条麻妃| 三级久久三级久久| 久久久久国产精品区片区无码| 亚洲美女在线一区| 国产一区二区三区四区视频| 亚洲色无码播放| 色黄视频在线观看| 国产精品国产三级欧美二区| 911久久香蕉国产线看观看| 91蝌蚪视频在线观看| 久久久噜噜噜久久人人看 | 无码国产精品久久一区免费| 国产精品青草综合久久久久99| 日韩精品成人一区| 欧美人妖在线| 日韩亚洲一区在线播放| 久久黄色影院| av直播在线观看| 亚洲成人你懂的| 国产精品久久久毛片| 91视频在线观看免费| 久久视频免费看| 日韩一级二级三级| 黄色免费在线网站| 国产精品99导航| 亚洲春色h网| 蜜臀av午夜一区二区三区| 久久婷婷国产综合精品青草| 黄色大片网站在线观看| 日韩av一卡二卡| h片在线观看视频免费| 97人人模人人爽人人少妇| 综合日韩在线| 日韩欧美亚洲另类| 亚洲色图一区二区| 国产三级小视频| 欧美极品少妇xxxxⅹ喷水 | 午夜亚洲福利| 中文字幕一二三| 亚洲一区二区三区免费视频| 国产伦精品一区二区三区四区| 久久精品视频播放| 日韩在线观看一区二区三区| 国产欧美久久久久| 国产a精品视频| 日韩男人的天堂| 亚洲人成亚洲人成在线观看| 天天免费亚洲黑人免费| 日日夜夜精品网站| 激情久久五月天| 久青草视频在线观看| 亚洲精品视频在线播放| 久久久成人av毛片免费观看| 亚洲精品国产精品国自产| 国产揄拍国内精品对白| 欧美日韩精品一区二区三区视频播放| 精品国产乱码久久久久久老虎| 男人天堂视频在线观看| 免费影院在线观看一区| 日本中文一区二区三区| 国产精品18在线| 亚洲精品在线网站| 日韩国产激情| 手机看片日韩国产| 99久久免费国产| 在线观看国产精品入口男同| 久热国产精品视频| 视频福利一区| 成人免费观看毛片| 亚洲美女视频一区| 午夜视频www| 成人欧美一区二区三区黑人| 99精品国产一区二区青青牛奶 | 亚洲乱码精品久久久久..| 2019中文字幕在线免费观看| 四虎成人av|