Docker學(xué)習(xí)筆記(容器篇)

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)行描述。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容