1.docker? ? 鏡像? 容器
2.docker與虛擬機
3.docker簡單操作
1.docker? ? 鏡像? 容器
1.1 docker
? ? ? Docker是一個基于輕量級虛擬化技術的容器癌瘾,整個項目基于Go語言開發(fā)川无,并采用了Apache 2.0協(xié)議。Docker可以將我們的應用程序打包封裝到一個容器中,該容器包含了應用程序的代碼县匠、運行環(huán)境、依賴庫证膨、配置文件等必需的資源夺脾,通過容器就可以實現(xiàn)方便快速并且與平臺解耦的自動化部署方式,無論你部署時的環(huán)境如何吊奢,容器中的應用程序都會運行在同一種環(huán)境下盖彭。
舉例:
? ? ? ? 我寫了一個5g基站通訊系統(tǒng),該系統(tǒng)的技術棧非常廣,需要依賴于各種開源庫和中間件召边。如果按照純手動的部署方式铺呵,我需要安裝各種開源軟件,還需要寫好每個開源軟件的配置文件隧熙。如果只是部署一次片挂,這點時間開銷還是可以接受的,但如果我每隔幾天就需要換個服務器去部署這個程序贞盯,那么這些繁瑣的重復工作無疑是會令人發(fā)狂的音念。這時候,Docker的用處就派上場了邻悬,我只需要根據(jù)應用程序的部署步驟編寫一份Dockerfile文件(將安裝症昏、配置等操作交由Docker自動化處理),然后構建并發(fā)布他的鏡像父丰,這樣肝谭,不管在什么機器上,我都只需要拉取他需要的鏡像蛾扇,然后就可以直接部署運行了攘烛,這正是Docker的魅力所在。
1.2? 鏡像
鏡像是Docker中的一個重要概念:
? ? ? 它類似于虛擬機中使用到的鏡像镀首,由于任何應用程序都需要有它自己的運行環(huán)境坟漱,Image就是用來提供所需運行環(huán)境的一個模板。
? ? ? Docker你可以與其他人共享你的Image更哄,但是提倡每個Image都遵循單一職責原則芋齿,也就是只做好一件事。
1.3? 容器
? ? ? Container是Docker提供的一個抽象層成翩,它就像一個輕量級的沙盒觅捆,其中包含了一個極簡的Linux系統(tǒng)環(huán)境與運行在其中的應用程序。
? ? Container是Image的運行實例(Image本身是只讀的麻敌,Container啟動時栅炒,Docker會在Image的上層創(chuàng)建一個可寫層,任何在Container中的修改都不會影響到Image术羔,如果想要在Image保存Container中的修改赢赊,Docker采用了基于Container生成新的Image層的策略),Docker引擎利用Container來操作并隔離每個應用(也就是說级历,每個容器中的應用都是互相獨立的)释移。
? ? ? ? 我們可以從從Docker與Container的英文單詞原意中就可以體會出Docker的思想。
? ? ? ? Container可以釋義為集裝箱鱼喉,集裝箱是一個可以便于機械設備裝卸的封裝貨物的通用標準規(guī)格秀鞭,它的發(fā)明簡化了物流運輸?shù)臋C械化過程趋观,使其建立起了一套標準化的物流運輸體系。
? ? ? ? Docker的意思為碼頭工人锋边,可以認為皱坛,Docker就像是在碼頭上辛勤工作的工人,把應用打包成一個個具有某種標準化規(guī)格的"集裝箱"(其實這里指出的集裝箱對應的是Image豆巨,在Docker中Container更像是一個運行中的沙盒)剩辟,當貨物運輸?shù)侥康牡睾螅a頭工人們(Docker)就可以把集裝箱拆開取出其中的貨物(基于Image來創(chuàng)建Container并運行)往扔。這種標準化與隔離性可以很方便地組合使用多個Image來構建你的應用環(huán)境贩猎。
2. docker 與虛擬機
? ? ? ? 我們知道Docker是基于輕量級虛擬化技術的,所以它與我們平常使用的虛擬機是不一樣的萍膛。
虛擬機技術可以分成以下兩類:
系統(tǒng)虛擬機:通過軟件對計算機系統(tǒng)的模擬來提供一個真實計算機的替代品吭服。它是物理硬件的抽象并提供了運行完整操作系統(tǒng)所需的功能。虛擬機通過物理機器來管理和共享硬件蝗罗,這樣實現(xiàn)了多個虛擬機環(huán)境彼此之間的隔離艇棕,一臺機器上可以運行多個虛擬機,每個虛擬機包括一個操作系統(tǒng)的完整副本串塑。在系統(tǒng)虛擬機中沼琉,所運行的所有軟件或操作都只會影響到該虛擬機的環(huán)境。我們經(jīng)常使用的VMWare就是系統(tǒng)虛擬機的實現(xiàn)桩匪。
程序虛擬機:允許程序獨立運行在平臺之外打瘪。比較典型的例子就是JVM,Java通過JVM這一抽象層使得Java程序與操作系統(tǒng)和硬件平臺解耦(因為每個Java程序都是運行在JVM中的)傻昙,因此實現(xiàn)了所謂的compile once, run everywhere闺骚。
? ? ? ? Docker所用到的技術與上述兩種都不相同,它使用了更輕量級的虛擬化技術妆档,多個Container共享了同一個操作系統(tǒng)內核葛碧,并且就像運行在本地上一樣。Container技術相對于虛擬機來說过吻,只是一個應用程序層的抽象,它將代碼與依賴關系打包到一起蔗衡,多個Container可以在同一臺機器上運行(意味著一個虛擬機上也可以運行多個Container)纤虽,并與其它Container共享操作系統(tǒng)內核,每一個Container都在用戶空間中作為一個獨立的進程運行绞惦,這些特性都證明了Container要比虛擬機更加靈活與輕量(一般都是結合虛擬機與Docker一起使用)逼纸。
? ? ? ? Container技術其實并不是個新鮮事物,最早可以追溯到UNIX中的chroot(在1979年的V7 Unix中引入)济蝉,它可以改變當前正在運行的進程及其子目錄的根目錄杰刽,在這種修改過的環(huán)境下運行的程序不能在指定的目錄樹之外訪問文件菠发,從而限制用戶的活動范圍,為進程提供了隔離空間贺嫂。之后各種Unix版本涌現(xiàn)出很多Container技術滓鸠,在2006年,Google提出了"Process Containers"期望在Linux內核中實現(xiàn)進程資源隔離的相關特性第喳,由于Container在Linux內核中的定義過于寬泛混亂糜俗,后來該項目改名為CGroups(Control Groups),實現(xiàn)了對進程的資源限制曲饱。2008年悠抹,LXC(Linux Containers)發(fā)布,它是一種在操作系統(tǒng)層級上的虛擬化方法扩淀,用于在Linux系統(tǒng)上通過共享一個內核來運行多個互相隔離的程序(Container)楔敌。LXC正是結合了Linux內核中的CGroups和對分離的名稱空間的支持來為應用程序提供了一個隔離的環(huán)境。而Docker也是基于LXC實現(xiàn)的(Docker的前身是dotClound公司中的內部項目驻谆,它是一家提供PaaS服務的公司卵凑。),并作出了許多改進旺韭。
3.docker的簡單操作
1.docker ps 顯示當前正在運行的容器
2.docker ps -a 顯示所有狀態(tài)的容器
3.docker ps -n 3 顯示最后被創(chuàng)建的n個容器(注意:不限狀態(tài))
4.docker ps -q 只顯示容器ID
5.docker ps -s 顯示容器文件大小
6.docker –version 查看當前docker版本
7.docker run hello-word 測試docker安裝是否有效
8.docker image ls 顯示當前計算機的鏡像
9.docker container ls 顯示正在運行的容器
10.docker container ls –all 顯示所有容器
11.docker build -t image_name . 創(chuàng)建一個docker鏡像氛谜,使用-t表示鏡像的名稱
12.sudo service docker start 啟動docker服務
13.sudo service docker stop 關閉docker服務
14.sudo service docker restart 重啟docker服務
15.docker container stop ID 結束這個進程
16.docker build -t image_name . 創(chuàng)建一個docker鏡像
17.docker container rm ID 刪除容器
18.docker image rm ID 刪除鏡像
19.docker login 登錄docker
20.docker tag image(鏡像名稱) username(docker注冊的用戶名)/respository(倉庫名):tag(tag名)
21.docker push username/resposity:tag 上傳鏡像
22.docker run -p 4000:80 username/respository:tag 可以在任何計算機上運行
? ? ? ? Docker提供了非常強大的自動化部署方式與靈活性,對多個應用程序之間做到了解耦区端,提供了開發(fā)上的敏捷性值漫、可控性以及可移植性。同時织盼,Docker也在不斷地幫助越來越多的企業(yè)實現(xiàn)了向云端遷移杨何、向微服務轉型以及向DevOps模式的實踐。