--------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/chinagissoft
QQ群:16403743
宗旨:專註於"GIS+"前沿技術的研究與交流,將雲端運算技術、大資料技術、容器技術、物聯網與GIS進行深度融合,探討"GIS+"技術和行業解決方案
轉載說明:文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!
--------------------------------------------------------------------------------------
Docker安裝
由於本人測試作業系統為Ubuntu14.04,對於該作業系統來說,可以直接從Ubuntu源安裝Docker程式,具體操作如下
$sudo apt-get update$sudo apt-get install -y docker.io$sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker$sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
但是如果你希望安裝最新版本的Docker程式,你可能需要更新不同的源,最新的Docker版本為1.9,具體操作如下
$sudo apt-get install apt-transport-https$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA8$sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"$sudo apt-get update$sudo apt-get install lxc-docker
相對來說,Docker安裝比較其他OpenStack、Hadoop、Spark相對簡單。
鏡像管理
Linux FS in Docker
對傳統Linux來說,當我們啟動這個作業系統時,一般會將Linux的rootFS設定為唯讀狀態,然後檢查其完整性,然後再將rootFS設定為可寫狀態,這樣我們就可以對Linux作業系統進行相關操作了。
Docker在啟動container時,也將rootfs設定為readonly,然後通過aufs把一個readwrite的fs掛載到rootfs上,並且把下層fs設定為readonly,這樣就構成了一個完整的os。
•對每一層readonly的fs,稱之為image( 例如上面的Debian或者BusyBox)
•對頂上read-write的fs,稱之為container
•對於readonly中的內容的修改,採用的是COW(Copyon Write)的技術,把檔案複製到read-wirte層並修改,實際使用者看到的是當前container層中的檔案,image中的檔案不會被影響
•除了baseimage之外,每一層image都有一個parent image( 例如Debian,(Debian+emaces))
•沒有parentimage的鏡像叫base image( 例如Kernal)
•基於COW的技術,image部分是不會被修改的,因此container可以共用image層的fs,提高了儲存效率
如何獲得鏡像
一般情況下,我們從Docker官方倉庫可以獲得,當然中國也有比較知名的Docker鏡像源,例如DAOCloud或者靈雀雲。這個類似與我們是從Ubuntu官方源下載軟體還是從阿里源還是163源下載一樣。
docker官方提供的用來共用image的平台:https://hub.docker.com
曾經在2015年6月份參加過北京的雲端運算大會,當時對容器技術(Docker)還不太熟悉,不過也有幸聽了來自DAOCloud的創始人陳齊彥和靈雀雲創始人左玥的演講,一個來自EMC(曾就職於Oracle),一個來自微軟(負責Windows Server 2016容器部分的研發),都是牛人。
DAOCloud:https://www.daocloud.io/
雲雀云:http://www.alauda.cn/
查詢鏡像
我們可以直接從OS裡面使用Docker命令來查詢相關鏡像資訊。
例如我們查詢一下Hadoop的容器鏡像。
下載鏡像
既然我們可以查詢鏡像,我們就可以將相關鏡像下載到本地來使用,例如我們可以下載一個Ubuntu12.04作業系統的鏡像。
如果下載不指定tag,會將所有鏡像相關tags下載下來,關於tag,請繼續查看後面介紹。
一般情況下,該操作可能由於網路、鏡像大小導致不同的等待時間。所以建議下載有針對性。
root@controller:/etc/bash_completion.d# sudo docker pull ubuntu:12.0412.04: Pulling from library/ubuntuce049369478e: Pull complete2ec1b169061f: Pulling fs layer9bbaf44a8a7c: Download complete38f2c35e1b51: Download completePulling repository docker.io/library/ubuntu0ac5b09d8536: Download completebe10ee96620d: Download complete5e59ab480134: Download completeefbb515ae632: Download completeStatus: Downloaded newer image for ubuntu:12.04docker.io/library/ubuntu: this image was pulled from a legacy registry. Important: This registry version will not be supported in future versions of docker.
鏡像命名與版本管理
鏡像下載完畢之後,我們可以通過如下命令來顯示鏡像列表資訊。
root@controller:~/sinatra# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 1d073211c498 2 weeks ago 187.9 MBubuntu 14.04.3 1d073211c498 2 weeks ago 187.9 MBubuntu 12.04 0ac5b09d8536 2 weeks ago 136.1 MB<none> <none> ce049369478e 2 weeks ago 135.9 MBtraining/sinatra latest f0f4ab557f95 17 months ago 447 MB
普通鏡像的命名規範{namespace}/{repositoryname}:{tag}
•namespace是dockerhub的使用者名稱,時間是起到了namespace的作用
•repository,類似於github的項目,例如mysql
•tag,表示版本資訊,可選,預設latest,例如cesc/mysql:5.6
上傳鏡像
一般情況下,我們可以使用如下四個步驟來上傳我們做好的鏡像
•dockerlogin,登入到docker hub中
•把container通過dockercommit的命令轉換為image
•通過dockertag來命名新產生的image
•dockerpush到docker hub中