Docker 是 Golang 編寫的铣揉, 自 2013 年推出以來,受到越來越多的開發(fā)者的關注餐曹。如果你關注最新的技術發(fā)展逛拱,那么你一定聽說過 Docker。不管是云服務還是微服務(Microservices)台猴,越來越多的廠商都開始基于 Docker 作為基礎設施自動化的工具朽合。那么什么是 Docker?Docker與傳統(tǒng)的虛擬機有什么區(qū)別饱狂?為何要采用 Docker曹步?如何使用 Docker?
本文休讳,就針對上述提到的問題讲婚,來簡單介紹下 Docker。
什么是 Docker
Docker 是開源的應用容器引擎俊柔。
Docker 可以讓你將所有應用軟件以及它的以來打包成軟件開發(fā)的標準化單元筹麸。
Docker 容器將軟件以及它運行安裝所需的一切文件(代碼、運行時婆咸、系統(tǒng)工具竹捉、系統(tǒng)庫)打包到一起,這就保證了不管是在什么樣的運行環(huán)境尚骄,總是能以相同的方式運行块差。就好像 Java 虛擬機一樣,“一次編寫倔丈,到處運行(Write once, run anywhere)”憨闰,而 Docker 是“一次構建,到處運行(Build once需五,run anywhere)”鹉动。
Docker 是一種“容器即服務”(Docker Containers as a Service ,簡稱 CaaS)宏邮,使得開發(fā)和IT運營團隊可以對于應用的構建泽示、發(fā)布、運行更加敏捷和可控蜜氨。
概括的說:Docker 是為開發(fā)人員和系統(tǒng)管理員用于構建械筛、發(fā)布、并運行分布式應用程序的開放式平臺飒炎。該平臺由 Docker 引擎(一個便攜埋哟、輕巧的運行時和打包工具) 和 Docker Hub (一個共享應用程序和自動化工作流的云服務)等組成。Docker 可以使應用程序從組件迅速組裝并消除了開發(fā)郎汪、質量保證和生產(chǎn)環(huán)境之間的摩擦問題赤赊。這樣一來闯狱,IT部門可以更快地發(fā)布,而這些應用程序不管是運行在筆記本電腦抛计、數(shù)據(jù)中心的虛擬機哄孤,還是任何的云,其運行過程和結果都是一致的吹截。
我們再來看下 Docker 的 Logo 录豺。很明顯,這是一只鯨魚饭弓,它托著許多集裝箱。我們可以把宿主機可當做這只鯨魚媒抠,把相互隔離的容器可看成集裝箱弟断,每個集裝箱中都包含自己的應用程序。這 Logo 簡直的太形象了趴生!
Docker 的優(yōu)點
輕量級:所有容器在一臺機器上共享同一個操作系統(tǒng)內核阀趴,這樣他們立即開始,并更有效地利用內存苍匆。Image 是從分層文件系統(tǒng)的構建刘急,這樣他們能夠共享公共文件,使得磁盤使用率和 Image 的下載更加高效浸踩。
開放:Docker 容器是基于開發(fā)的標準叔汁,允許容器運行在主流的 Linux 發(fā)布版和 Microsoft 操作系統(tǒng)作為所有的基礎設施。
安全:容器使得應用程序彼此隔離检碗,而基礎架構同時為應用程序提供了額外的保護層据块。
Docker 與 虛擬機的區(qū)別
容器與虛擬機有著類似的資源隔離和分配的優(yōu)點,但不同的架構方法使容器能夠更加便攜折剃,高效等另假。
虛擬機的架構
每個虛擬機都包括應用程序、必要的二進制文件和庫以及一個完整的客戶操作系統(tǒng)(Guest OS)怕犁,盡管它們被分離边篮,它們共享并利用主機的硬件資源,將近需要十幾個 GB 的大小奏甫。
容器的架構
容器包括應用程序及其所有的依賴戈轿,但與其他容器共享內核。它們以獨立的用戶空間進程形式運行在主機操作系統(tǒng)上扶檐。他們也不依賴于任何特定的基礎設施凶杖,Docker 容器可以運行在任何計算機上,任何基礎設施和任何云上款筑。
Docker 的容器利用了 LXC智蝠,管理利用了 namespaces 來做權限的控制和隔離腾么,cgroups 來進行資源的配置,并且還通過 aufs 來進一步提高文件系統(tǒng)的資源利用率杈湾,而這些技術都不是 Docker 獨創(chuàng)解虱。
LXC
LXC 與虛擬機的不同之處在于,它是一個操作系統(tǒng)級別的虛擬化環(huán)境漆撞,而不是硬件虛擬化環(huán)境殴泰。他們都做同樣的事情,但 LXC 是操作系統(tǒng)級別的虛擬化環(huán)境浮驳,虛擬環(huán)境有它自己的進程和網(wǎng)絡空間悍汛,而不是創(chuàng)建一個完整成熟的虛擬機。因此至会,一個 LXC 虛擬操作系統(tǒng)具有最小的資源需求离咐,并啟動只需幾秒鐘。
正如你可以在下圖中看到的奉件,左側是 LXC 虛擬的 Ubuntu 宵蛀,默認安裝使用 11 MB 大小。
Docker 與 Microservices 的關系
Microservices(微服務) 依賴于“基礎設施自動化”县貌,而 Docker 正是“基礎設施自動化”的利器术陶。可以說 Docker 的火爆煤痕,一定程度上也帶動了微服務架構的興起梧宫,而微服務的廣泛應用也促進了 Docker 繁榮“诘铮可以說兩者相輔相成祟敛。
有關微服務的介紹,可以移步至《簡述 Microservices(微服務)》兆解。
http://www.importnew.com/24651.html
為什么要用 Docker
開發(fā)更加敏捷:Docker 讓開發(fā)人員可以自由定義環(huán)境馆铁,創(chuàng)建和部署的應用程序更快、更容易锅睛,IT 運維人員快速應對變化也更加靈活性埠巨。
更加可控:Docker 使得開發(fā)人員保存從基礎設施到應用的代碼,幫助 IT 運維人管理擁有標準的现拒、安全的辣垒、可擴展的操作環(huán)境。
高可移植性:Docker 允許自由選擇印蔬,可以是從筆記本電腦到一個團隊勋桶,從私人基礎設施到公共云提供商。
這樣,你可以專注于開發(fā)應用例驹,其他的繁瑣事交給 Docker 去做吧捐韩。
如何使用 Docker
這可真是一個大話題,如果完整闡述足夠寫一本書了鹃锈。好在我們的目的是做入門普及荤胁,因此我們就簡單講一下 Docker 的安裝、基本使用和常用命令屎债。
Docker安裝
建議在linux環(huán)境下安裝Docker仅政,window環(huán)境搭建比較復雜且容易出錯,使用Centos7+yum來安裝Docker環(huán)境很方便盆驹。
Docker 軟件包已經(jīng)包括在默認的 CentOS-Extras 軟件源里圆丹。因此想要安裝 docker,只需要運行下面的 yum 命令:
yum?install?docker
安裝完成后躯喇,使用下面的命令來啟動 docker 服務运褪,并將其設置為開機啟動:
service docker?start
chkconfig docker?on
LCTT 譯注:此處采用了舊式的 sysv 語法,如采用CentOS 7中支持的新式 systemd 語法玖瘸,如下:
service docker?start
chkconfig docker?on
測試
docker?version
輸入上述命令,返回docker的版本相關信息檀咙,證明docker安裝成功雅倒。
Hello World
下面,我們通過最簡單的 image 文件"hello world"弧可,感受一下 Docker蔑匣。
因為國內連接 Docker 的官方倉庫很慢,因此我們在日常使用中會使用Docker 中國加速器棕诵。通過 Docker 官方鏡像加速裁良,中國區(qū)用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像托管于中國大陸校套,本地用戶現(xiàn)在將會享受到更快的下載速度和更強的穩(wěn)定性价脾,從而能夠更敏捷地開發(fā)和交付 Docker 化應用。
Docker 中國官方鏡像加速可通過 registry.docker-cn.com訪問笛匙。該鏡像庫只包含流行的公有鏡像侨把,私有鏡像仍需要從美國鏡像庫中拉取。
修改系統(tǒng)中docker對應的配置文件即可妹孙,如下:
vi /etc/docker/daemon.json
#添加后
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore":?true
}
運行下面的命令秋柄,將 image 文件從倉庫抓取到本地。
docker?pull library/hello-world
上面代碼中蠢正,docker image pull是抓取 image 文件的命令骇笔。library/hello-world是 image 文件在倉庫里面的位置,其中l(wèi)ibrary是 image 文件所在的組,hello-world是 image 文件的名字笨触。
抓取成功以后懦傍,就可以在本機看到這個 image 文件了。
docker images
#顯示結果
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest f2a91732366c 3 months ago 1.848 kB
現(xiàn)在旭旭,運行這個 image 文件谎脯。
docker run hello-world
#顯示結果
Hello from Docker!
This message shows that your installation appears?to?be?working correctly.
...
輸出這段提示以后,hello world就會停止運行持寄,容器自動終止源梭。有些容器不會自動終止,因為提供的是服務稍味,比如Mysql鏡像等废麻。
常用命令
除過以上我們使用的Docker命令外,Docker還有一些其它常用的命令模庐。
拉取docker鏡像
docker?pull image_name
查看宿主機上的鏡像烛愧,Docker鏡像保存在/var/lib/docker目錄下:
docker?images
刪除鏡像
docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30
查看當前有哪些容器正在運行
docker?ps
查看所有容器
docker?ps?-a
啟動、停止掂碱、重啟容器命令:
docker?start?container_name/container_id
docker?stop?container_name/container_id
docker restart container_name/container_id
后臺啟動一個容器后怜姿,如果想進入到這個容器,可以使用attach命令:
docker?attach container_name/container_id
刪除容器的命令
docker?rm container_name/container_id
查看當前系統(tǒng)Docker信息
docker?info
從Docker hub上下載某個鏡像:
docker pull centos:latest
docker pull centos:latest
執(zhí)行docker pull centos會將Centos這個倉庫下面的所有鏡像下載到本地repository疼燥。