虛擬機技術和容器技術最大的區別就是對資源的佔用。linux
Docker客戶端向服務器端發出請求,也就是守護進程。守護進程處理完全部工做將結果返回給客戶端。Docker客戶端對服務器端的訪問既能夠在本地也能夠在遠程。git
Docker鏡像是容器的基石,保存了啓動容器的條件,容器基於鏡像啓動和運行。 Docker鏡像是一個層疊的只讀文件系統,他的最底端是一個引導文件系統及bootfs。 Docker用戶幾乎永遠都不會和引導文件系統有交互,實際上當一個容器啓動後,bootfs會被移到內存中,引導文件將被卸載。github
Docker鏡像的第二層是rootfs(root文件系統),位於引導文件系統之上,能夠有多種操做系統。 在傳統的linux系統中root文件系統最早會以只讀的方式加載,當引導和啓動完成後他纔會被切換成讀寫模式。 可是在Docker裏,root文件系統永遠只能是隻讀,而且Docker會用聯合加載系統在rootfs之上加載更多的只讀文件系統。 聯合加載只得是一次加載多個文件系統。可是在外面開來只有一個文件系統。聯合加載會將各層文件系統加載到一塊兒, 這樣最終的文件系統會包含全部的文件及目錄。Docker將這樣的文件系統稱爲鏡像。 一個鏡像能夠放到另外一個鏡像頂部,位於下面的鏡像稱爲父鏡像。以此類推,直到鏡像棧的最底部。最底部的鏡像稱爲基礎鏡像。 也就是bootfs文件系統。docker
一個容器中能夠運行用戶的一個或多個進程。當一個容器啓動時,Docker會在鏡像的最頂層增長一個讀寫文件系統,咱們在Docker中運行的程序就是在這個層運行並執行的。第一次啓動Docker時,讀寫層是空的,當文件發生變化後都會應用到這一層。好比修改一個文件,先將該文件從只讀層複製到讀寫層,而後隱藏只讀層,這就是Docker的寫時複製。shell
當建立一個容器時,Docker會建立一個鏡像棧,在棧的最頂層增長讀寫層,這個讀寫層和下面的鏡像層以及一些配置數據就構成了一個容器。 容器的這個特色及鏡像分層,可讓咱們快速的構建鏡像,並運行包含咱們本身的應用程序和服務的容器。編程
Docker用倉庫來保存用戶構建的鏡像。ubuntu
從上圖能夠看出,Docker客戶端調用守護進程從而操做Docker的容器,而容器是經過鏡像來建立的,而鏡像又保存在倉庫中。bash
編程語言中命名空間實現封裝,即代碼隔離。 操做系統中命名空間實現系統資源的隔離,進程、網絡、文件系統...服務器
各類隔離的資源時如何管理起來的,這就用到了Cgroups。網絡
內核版本
$ uname -a
檢查Device Mapper
$ ls -l /sys/class/misc/device-mapper
安裝Ubuntu維護的版本
$ sudo apt-get install -y docker.io $ source /etc/bash_completion.d/docker.io
安裝Docker維護的版本
檢查APT對HTTPS的支持,查看/usr/lib/apt/methods/https文件是否存在。若是不存在,運行安裝命令。
$ apt-get update $ apt-get install -y apt-transport-https
添加Docker的APT倉庫
$ echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list
添加倉庫的key
$ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
安裝
$ apt-get update $ apt-get install -y lxc-docker
安裝Docker維護的版本(簡易步驟,使用Docker提供的sh腳本)
$ sudo apt-get install -y curl $ curl -sSL https://get.docker.io/ubuntu/ | sudo sh
啓動docker若出現下面錯誤:
FATA[0000] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()
請安裝apparmor軟件便可
$ sudo apt-get install apparmor
通常安裝完Docker運行時須要加sudo來操做,其實能夠增長用戶歸屬的用戶組來實現不用root權限運行Docker。
添加名字爲docker的用戶組
$ sudo groupadd docker
將當前用戶添加到當前用戶組中
$ sudo gpasswd -a ${user} dokcer
從新啓動docker服務
$ sudo service docker restart
針對當前用戶不會立馬生效,須要註銷後從新登陸以獲取用戶組權限。
使用虛擬機實現,守護進程在虛擬機中。
略
在OS X上安裝Docker前咱們先看一下Docker的運行要求.
OS X的內核是Unix,並且通常root用戶蘋果是不給用戶的。因此要運行Docker在OS X上和在Windows上同樣,須要藉助虛擬機來實現。
訪問github上的Boot2Docker
https://github.com/boot2docker/boot2docker
運行命令 $ docker run ubuntu echo hello world 若是打印以下日誌,說明安裝成功
bash-3.2$ docker run ubuntu echo hello world Unable to find image 'ubuntu:latest' locally latest: Pulling from ubuntu 428b411c28f0: Pull complete 435050075b3f: Pull complete 9fd3c8c9af32: Pull complete 6d4946999d4f: Already exists ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Digest: sha256:45e42b43f2ff4850dcf52960ee89c21cda79ec657302d36faaaa07d880215dd9 Status: Downloaded newer image for ubuntu:latest hello world bash-3.2$
mac安裝docker指南: http://docs.docker.com/installation/mac/#command-line-docker-with-boot2docker
極客學院視頻: http://www.jikexueyuan.com/path/docker/
doker入門指南: http://my.oschina.net/dlpinghailinfeng/blog/384803
pdf文件下載地址: http://pan.baidu.com/s/1c1corG8