Docker介紹
目前容器技術(shù)非常的火熱,其中Docker是目前最流行的。國內(nèi)外很多技術(shù)大會都會談到相關(guān)話題。當(dāng)然還有很多人都沒有接觸過,或者沒有聽說過,沒關(guān)系,現(xiàn)在就開始學(xué)習(xí)吧!
大家應(yīng)該都用過云服務(wù)器(比如:阿里云ECS),購買之后,平臺自動按照我們的購買需求在幾分鐘內(nèi)生成一個虛擬機,這個虛擬機是通過某種虛擬化技術(shù)在真實的基礎(chǔ)設(shè)施上創(chuàng)建的,它會占用內(nèi)存、儲存、CPU等物理資源。大體如張圖所示(圖片來自Docker官網(wǎng)):
類似的,我們應(yīng)該也有在自己個人電腦上安裝虛擬操作系統(tǒng)的經(jīng)歷,虛擬系統(tǒng)安裝需要很長時間,啟動、關(guān)閉等等都如同一個實際的電腦,需要一定的時間(分鐘級別)。
通過技術(shù)大神的不斷探索和努力,容器技術(shù)在不斷發(fā)展和廣泛應(yīng)用,其中包括:Docker、rkt等等。通過容器技術(shù),實現(xiàn)了直接在宿主系統(tǒng)上運行虛擬操作系統(tǒng)。而這些虛擬系統(tǒng)可以通過自定義創(chuàng)建,啟動和關(guān)閉都非常的快,且占用的資源少很多。通過通過容器技術(shù)運行的操作系統(tǒng)稱為容器化應(yīng)用。大體如圖所示(圖片來自Docker官網(wǎng)):
什么是容器,直接看Docker官方的介紹:
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
翻譯:容器是一個標(biāo)準(zhǔn)的軟件單元,它將代碼及其所有依賴打包,以便應(yīng)用程序從一個計算環(huán)境快速可靠地運行到另一個計算環(huán)境。 Docker容器鏡像是一個輕量級,獨立的可執(zhí)行軟件包,包含運行應(yīng)用程序所需的一切:代碼,運行時,系統(tǒng)工具,系統(tǒng)庫和設(shè)置。
Container images become containers at runtime and in the case of Docker containers - images become containers when they run on Docker Engine. Available for both Linux and Windows-based applications, containerized software will always run the same, regardless of the infrastructure. Containers isolate software from its environment and ensure that it works uniformly despite differences for instance between development and staging.
翻譯:容器鏡像在運行時成為容器,在Docker容器的情況下- 鏡像在Docker Engine上運行時成為容器。 適用于基于Linux和Windows的應(yīng)用程序,無論基礎(chǔ)架構(gòu)如何,容器化軟件都將始終運行相同。 容器將軟件與其環(huán)境隔離開來,并確保它可以統(tǒng)一工作,盡管開發(fā)和演示之間存在差異。
從介紹中,其中有兩個概念,一個是鏡像,一個是容器。鏡像就像一個操作系統(tǒng)鏡像文件(里面包括系統(tǒng)文件、軟件文件等等),容器就像一個操作系統(tǒng)鏡像文件被虛擬機軟件加載運行。
Docker 組成可參考官方文檔:https://docs.docker.com/engine/docker-overview/
Docker命令
在操作系統(tǒng)上安裝好Docker Engine后,來看看它有哪些命令(執(zhí)行后,這些命令工具會與Docker Engine通信,完成相應(yīng)的操作)。
可以通過命令管image、container、network、volume等對象:
鏡像管理:
可以看出Docker命令的風(fēng)格是:docker 某對象? 某操作。比如列出所有的鏡像(list images):docker? image ls 。 其他對象的操作也類似。比如列出所有狀態(tài)為running的容器(list running containers):docker container ls ,后面還可以跟參數(shù),比如列出所的容器(包括停止等):docker container ls -a
小實踐
了解基本使用。下面我們?nèi)ハ螺d一個鏡像,然后運行這個鏡像,使之成為容器。
執(zhí)行命令:docker image pull nginx(注:docker pull nginx 這種寫法也能完成同樣效果,可以執(zhí)行docker help查看具體命令使用)
完成后,我們就有了一個nginx鏡像。這里你可能會問,這個過程發(fā)生了什么?
當(dāng)我們執(zhí)行命令后,命令會作為一個client端,與Docker daemon發(fā)起通信,并告知我們的請求,這里我們是需要pull nginx鏡像,所以Docker daemon會查看本地是否有指定的nginx鏡像,假設(shè)沒有,則會去Registry(鏡像倉庫)中查看,存在的話,則執(zhí)行遠(yuǎn)程下載至本地。
現(xiàn)在來運行這個鏡像,使它成為一個Docker容器。
docker container run --name my-nginx -d nginx
運行后,我們得到一個容器,容器名為my-nginx(由--name my-nginx指定),并后臺運行(由-d參數(shù)指定),當(dāng)docker container ls執(zhí)行后,就能看到該容器了。
這兩個過程可以參考下圖理解。(圖片來自Docker官網(wǎng))
這次先介紹到這里,更多Docker相關(guān)知識,大家可以先到官網(wǎng)了解。初學(xué)者的話,可以先看看get-started。
參考資料:
1、https://www.docker.com/resources/what-container
2、https://docs.docker.com/get-started/
3、https://docs.docker.com/
4、https://github.com/docker/labs/