今天是Docker討論系列的終章,咱們先從docker的命令開始介紹,再說明Docker run命令關鍵參數。java
若是你還沒看過前面的內容:sql
第一篇《容器的本質是什麼?容器從何而來?》docker
第二篇《Docker的安裝及架構介紹》數據庫
上圖摘自:http://bingohuang.com/simplify-docker-image-2/centos
Images:docker鏡像。可將容器轉化爲鏡像,也可從鏡像運行出一個個的容器實例。相似於虛擬機模板的概念。服務器
Container:容器。網絡
有running\stopped\pause三種狀態,相似於虛擬機的概念。架構
Tar files:能夠將鏡像打包爲tar文件,也能夠將打包後的tar文件從新load爲鏡像分佈式
Dockerfile:構建鏡像的聲明式配置文件。Docker技術的核心亮點之一。當咱們從一個基礎鏡像(centos鏡像)構建一個另外一個基礎鏡像(如java鏡像)時,通常不會使用的在centos鏡像中直接安裝java的方式,而是將java軟件與centos鏡像放置於一塊兒,在相同目錄下編寫好dockerfile,dockerfile中定義了java鏡像安裝的命令和環境配置參數等安裝信息,而後使用docker build命令就能夠將這些軟件及配置文件打包成一個java鏡像。這樣作的好處就是經過這種聲明式的構建方式最終構建了一個純淨的鏡像文件。ide
Registry:鏡像倉庫。用於存儲鏡像文件。
Engine:docker引擎
Docker version 查看docker版本
Docker info 顯示 Docker 系統信息,包括鏡像和容器數.
Docker events 從服務器獲取實時事件
狀態操做命令:
Docker start 從stop到running
Docker kill 從running到stop,直接kill容器進程
Docker stop 從running到stop,容器在中止前先完成一些保護性的動做以後再中止容器
Docker pause 暫停容器中全部的進程
Docker unpause 恢復容器中全部的進程
容器與鏡像相關的操做命令:
Docker commit 將容器保存爲一個新的鏡像
Docker create 從鏡像建立一個容器,該容器狀態爲stop
Docker run 從鏡像建立一個容器並將該容器啓動
Docker diff 檢查自鏡像運行以後,容器裏文件結構的更改
容器與tar文件相關的操做命令:
Docker export 將容器導出爲一個tar文件
容器自身的其餘操做命令:
Docker inspect 獲取容器/鏡像的元數據
Docker attach 鏈接到正在運行中的容器
Docker port 列出指定的容器的端口映射
Docker ps 查看系統中的容器
Docker top 查看容器中運行的進程信息
Docker rm 刪除容器
Docker logs 獲取容器的日誌
Docker wait 阻塞運行直到容器中止,而後打印出它的退出代碼
Docker exec 在運行的容器中執行命令
Docker network 操做容器網絡
容器與鏡像相關的操做命令:
Docker commit 將容器保存爲一個新的鏡像
Docker create 從鏡像建立一個容器,該容器狀態爲stop
Docker run 從鏡像建立一個容器並將該容器啓動
Docker diff 檢查自鏡像運行以後,容器裏文件結構的更改
鏡像與tar files相關的命令:
Docker import 將tar文件load爲鏡像,會丟失相關的元數據和歷史記錄
Docker load 將tar文件load爲鏡像
Docker save 將鏡像保存爲tar文件
鏡像與dockerfile相關的命令:
Docker build 基於dockerfile構建鏡像
鏡像與倉庫相關的命令:
Docker pull 從倉庫下載鏡像
Docker push 將鏡像上傳至倉庫
鏡像自身的命令:
Docker images 列舉鏡像
Docker rmi 刪除鏡像
Docker tag 爲鏡像打上標籤
Docker inspect 列出鏡像的詳細信息
Docker history 列出鏡像的構建歷史
Docker export 將容器導出tar文件
Docker import 將tar文件load爲鏡像,會丟失相關的元數據和歷史記錄
Docker load 將tar文件load爲鏡像
Docker save 將鏡像保存爲tar文件
Docker build 基於dockerfile構建鏡像
鏡像與倉庫相關的命令:
Docker pull 從倉庫下載鏡像
Docker push 將鏡像上傳至倉庫
倉庫自身的命令:
Docker search 在倉庫中查找某個鏡像
Docker login 登陸倉庫
Docker logout 登出倉庫
Docker命令學習示意圖:
圖片來源:https://blog.csdn.net/yuanfenger/article/details/73316481
Docker命令學習示意圖:
圖片來源:https://www.twblogs.net/a/5c290471bd9eee01606d2e41
Docker run命令的做用在於從一個容器鏡像生成一個容器實例並將其啓動。
Docker run的主要命令參數以下:
使用docker run -it [IMAGE_NAME] 能夠啓動一個容器,並進入命令行交互界面:
使用exit可退出此容器
使用-d可讓容器在後臺運行:
--ip能夠爲容器指定ip地址,先使用docker network ls查看主機上的docker網絡:
使用--ip參數啓動容器:
此時會報錯,若是要使用自定義ip,只能使用自定義的容器網絡。先建立自定義的容器網絡:
也能夠在建立時手動指定容器的子網:
從新運行指定容器ip的命令:
執行成功,查看容器ip地址:
-h指定容器中的主機名,--name指定容器的名字
-p 能夠將主機上的端口映射到容器中。-p 8088:80 表示將主機的8088端口映射到容器的80端口上:
--privileged表示將對主機的文件更改的權限賦予此容器, -v 表示將主機的 /host/v1 目錄映射給容器上的 /con/logs目錄 ,若是容器中沒有此目錄,則會自動建立。執行命令
docker run -it --privileged -v /host/v1:/con/logs centos
在主機上的相應目錄可看到容器中對該目錄寫入的內容
爲容器掛載主機上的卷並設置容器只有對此卷的只讀權限:
docker run -it –privileged -v /host/v1:/con/logs:ro centos
-m用來指定容器內存,-c可用於指定容器的cpu配額
咱們能夠下載progrium/stress容器來測試容器的配額指定。使用如下命令查看該容器有哪些測試功能:
使用docker run -m 2000m可啓動一個內存佔用2000MB的容器,但該容器中未進行什麼進程時,該容器並不會直接佔用主機2000MB的內存。此時咱們能夠啓動stress容器,並使用--vm 1和 –vm-bytes 2000M表示啓動stress容器時在其中啓動一個佔用內存2000M的進程:
若是咱們在一個總限額爲2000MB的stress容器中啓動3個佔用500MB的進程,總共1500MB,那麼狀況以下:
在容器中是運行超過容器內存限額的進程的:
關於cpu限制,--cpu-share表示主機上運行的容器的cpu使用權重的定義。因爲主機上有4個cpu核,全部需 --cpu 4參數在容器中啓動4個進程以便將主機的cpu所有佔滿。
關於docker run中的 --cpus 參數,則是指定cpu的個數。當主機上有4個cpu時,容器只會使用總共1個cpu,也就是4分之1。
此數值也能夠爲小數,如0.5 ,那麼容器只會使用此主機8分之1的cpu。
當數值與主機的cpu核數相同時,將可以使用此主機的全部cpu配額,能夠看到4個cpu全滿。
咱們能夠啓動5個佔滿cpu的進程而不是4個,狀況以下:
做者:沈曉龍
Docker操做實踐(1):容器的本質是什麼?容器從何而來?