Docker是一個開源的容器運行和管理引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個輕量級的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測試通過的容器可以批量地在生產(chǎn)環(huán)境中部署。既可以在物理服務(wù)器上運行,也可以在虛擬機(jī)上運行。容器本身由多個只讀層(容器鏡像)加上一個讀寫層構(gòu)成。如下圖所示:

本文主要圍繞容器和容器的相關(guān)操作命令進(jìn)行描述。
Docker可以在一臺物理機(jī)上同時運行多個容器而不互相影響。與傳統(tǒng)的虛擬化技術(shù)不同,傳統(tǒng)的虛擬化技術(shù)是將一臺物理機(jī)模擬成多個互不影響的虛擬機(jī),各個虛擬機(jī)都是獨立而完整的操作系統(tǒng),資源使用和較多。而一臺物理機(jī)上的多個Docker容器是共享宿主機(jī)的操作系統(tǒng),從而資源使用較少。除此之外,Docker容器還具有以下特點:
啟動速度快:可以秒級啟動
應(yīng)用在沙箱內(nèi)獨立運行,相互沒有影響
性能開銷?。簬缀鯖]有額外資源開銷
天然具備開發(fā),運維一體部署的特性。
所以,Docker通常用于如下場景:
Web應(yīng)用的自動化打包和發(fā)布。
自動化測試的持續(xù)集成和發(fā)布。
復(fù)雜應(yīng)用的自動編排部署。
構(gòu)建自身的的PaaS環(huán)境。
Docker的核心概念主要包括:容器,鏡像,倉庫。如下圖所示:

Docker的整體架構(gòu)如下:

Docker的命令狀態(tài)轉(zhuǎn)換圖如下:

與容器相關(guān)的操作命令如下:
docker version ?#查看宿主機(jī)上的Docker版本信息
docker info # 查看Docker宿主上的容器詳細(xì)信息,包括鏡像和容器數(shù)量。
docker ps [options] # 查看當(dāng)前Docke宿主機(jī)上的容器信息
主要的參數(shù)如下:
-a 列出所有的容器,包括停止和死亡狀態(tài)(dead)的容器。
-f []列出滿足過濾條件的容器
-l 僅列出最新創(chuàng)建的一個容器
-q 僅列出容器ID
docker create [options] image:tag #基于某個鏡像創(chuàng)建一個容器而不啟動
docker start CONTAINER_ID ... # 啟動一個或多個容器,容器ID之間用空格隔開。
docker restart CONTAINER_ID ... #重啟一個或多個容器,容器ID之間用空格隔開。
docker pause|unpause CONTAINER_ID ...#暫停|恢復(fù)一個或多個容器進(jìn)程,容器ID之間用空格隔開。
docker kill CONTAINER_ID ...#殺掉一個或多個容器進(jìn)程,容器ID之間用空格隔開。
docker stop CONTAINER_ID ...# 停止一個或多個容器,容器ID之間用空格隔開。
docker run [options] image:tag [ commands ]?
# 基于某個鏡像運行一個容器。等同于[docker pull]+docker create + docker start三個命令的集合。基本原理如下:如果當(dāng)前宿主機(jī)的本地沒有指定的鏡像(imageName:imageTag),需要利用docker pull 從鏡像倉庫(默認(rèn)Docker Hub)中拉取該鏡像 ;如果有指定的鏡像,則運行docker create 命令進(jìn)行容器的創(chuàng)建,如果創(chuàng)建成功,則執(zhí)行docker start 命令進(jìn)行啟動;如果失敗,則返回容器運行失敗。
docker rm [options] CONTAINER_ID...
#刪除一個或者多個容器,默認(rèn)運行狀態(tài)的容器不能刪除,可以通過增加 -f 參數(shù)來進(jìn)行強(qiáng)制刪除。此外,-l參數(shù)移除容器之間的網(wǎng)絡(luò)關(guān)聯(lián);-v參數(shù)移除容器關(guān)聯(lián)的數(shù)據(jù)卷。批量操作宿主機(jī)上的容器可以用如下命令來實現(xiàn):
批量停止容器:docker stop $(docker ps -q)
批量重啟容器:docker restart$(docker ps -q)
批量刪除容器:docker rm [-f] $(docker ps -a -q)
批量殺掉容器進(jìn)程:docker kill [-f] $(docker images -q)
docker attach CONTAINER_ID
#進(jìn)入到指定ID的容器中,attach命令彈出的窗口是同步顯示的,一個窗口阻塞之后,其他窗口也無法進(jìn)行操作。執(zhí)行exit或者Ctrl+c 退出后,容器也隨之停止。
docke exec -it CONTAINER_ID /bin/bash?
#以偽終端的方式和指定的容器進(jìn)行交互,輸入exit退出后,當(dāng)前容器仍然可以繼續(xù)運行。
docker login #登錄到Docker Hub中
docker logout #退出Docker Hub。
docker logs CONTAINER_ID #查看指定容器的輸入日志。
下一篇我們將就Docker 鏡像以及對鏡像的詳細(xì)操作來進(jìn)行描述。