Docker學習②

操作Docker容器

容器是Docker的另一個核心概念。簡單來說,容器是鏡像的一個運行實例。不同的是,鏡像是靜態的只讀文件,而容器帶有運行時需要的可寫文件層,同時,容器中的應用進程處於運行狀態。

本章將具體介紹圍繞容器的重要操作,包括創建一個容器 、 啓動容器、終止一個容器、進入容器內執行操作、刪除容器和通過導人導出容器來實現容器遷移等。

 

創建容器

主要介紹Docker容器的create、start、run、wait和logs子命令

 

1、新建容器

命令:docker [container] create

作用:新建一個容器

由於容器是整個 Docker 技術攏的核心, create 命令和後續的 run 命令支持的選項都十分複雜,需要讀者在實踐中不斷體會 。選項主要包括如下幾大類 :

  1. 與容器運行模式相關;
  2. 與容器環境配置相關;
  3. 與容器資源限制和安全保護相關;

參見表 4-1~表 4-3

 

2、啓動容器

命令:docker [container] start

作用:啓動一個已經創建的容器

docker容器的啓動有三種方式:

交互方式:基於鏡像新建容器並啓動

  1. 使用docker run命令來啓動容器,docker在後臺運行的標準操作包括
  2. 檢查本地是否存在指定的鏡像,不存在則從公有倉庫下載
  3. 使用鏡像創建並啓動容器
  4. 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀可寫層
  5. 從宿主主機配置的網橋接口中橋接一個虛擬接口道容器中去
  6. 從地址池分配一個ip地址給容器
  7. 執行用戶指定的應用程序
  8. 執行完畢之後容器被終止

短暫方式:直接將一個已經終止的容器啓動運行起來

以上,命令執行完,控制檯會打印"hello world",容器就終止了,不過並沒有消失,可以用"docker ps -n 3 "看一下最新前3個的容器,第一個就是剛剛執行過的容器,可以再次執行一遍:docker start [ container_id ],不過這次控制檯看不到”hello world”了,只能看到容器ID,用logs命令才能看得到:docker logs [ container_id ]。這時可以看到兩個”hello world”了,因爲這個容器運行了兩次。

Daemon方式,守護態運行:即讓軟件作爲長時間服務運行

通過-d參數實現Docker容器在後臺以守護態形式運行

容器啓動後會返回一個唯一的id,也可以通過docker ps或docker container ls命令來查看容器信息:

 

3、查看容器輸出

命令:docker [container] logs

【參數解析】

  1. -details:打印詳細信息;
  2. -f,-follow:持續保持輸出;
  3. -since string:輸出從某個時間開始的日誌;
  4. -tail string:輸出最近的若干日誌;
  5. -t,-timestamps:顯示時間戳信息;
  6. -until string:輸出某個時間之前的日誌;

具體例子可看上一序號的示例。

 

停止容器

主要介紹Docker容器的pause/unpause、stop和prune子命令

1、暫停容器

命令:docker [container] pause CONTAINER [CONTAINER...]

作用:暫停一個運行中的容器

命令:docker [container] unpause CONTAINER [CONTAINER...]

作用:恢復處於暫停狀態的容器

 

2、終止容器

命令:docker [container] stop [ -t | --time[=10] ] [CONTAINER...]

作用:終止一個運行中的容器

該命令會首先向容器發送SIGTERM信號,等待一段超時時間後(默認爲10秒),再發送SIGKILL信號來終止容器

此時,執行docker container prune命令,會自動清除掉所有處於停止狀態的容器。

此外,還可以通過docker [container] kill直接發送SIGKILL信號來強行終止容器。

 

進入容器

在使用-d參數時,容器啓動後會進入後臺,用戶無法看到容器中的信息,也無法進行操作。

這個時候如果需要進入容器進行操作,推薦使用官方的attach或exec命令。

 

1、attach命令

命令:docker [container] attach [ --detach-keys [ = [ ] ] ] [--no-stdin] [ --sig-proxy [ =true ] ] CONTAINER

【參數解析】

  1. --detach-keys[ = [ ] ]:指定退出attach模式的快捷鍵序列,默認是CTRL-p、CTRL-q;
  2. --no-stdin=true | false:是否關閉標準輸入,默認是保持打開;
  3. --sig-proxy=true | false:是否代理收到的系統信號給應用進程,默認爲true;

【注】然而使用attach命令有時候不方便,當多個窗口同時attach到同一個容器的時候,所有窗口都會同步顯示;當某個窗口因命令阻塞時,其他窗口也無法操作了。

 

2、exec命令

命令:docker [ container ] exec [ -di -detach ] [ detach-keys [= [ ] ] ] [ -il--interactive ] [ - -piivileged][ -t | --tty ] [ -u I --user [ =USER ] ] CONTAINER COMMAND [ARG . . . ]

【參數解析】

  1. -d, --detach : 在容器中後臺執行命令;
  2. -detach-keys ="":指定將容器切回後臺的按鍵;
  3. -e, - - env= []:指定環境變量列表 ;
  4. -i, --interactive=true | false :打開標準輸入接受用戶輸入命令, 默認值爲false;
  5. -- privileged=trueifalse : 是否給執行命令以高權限,默認值爲 false;
  6. -t, --tty = true | false : 分配僞終端,默認值爲 false;
  7.  - u,--user="":執行命令的用戶名或 ID;

例:進入到剛剛創建容器中,並啓動一個bash

此時,可以在不影響容器內其他應用的前提下,與容器進行交互。

 

刪除容器

命令:docker [container) rm  [ -f | --force)  [ -l  | --link ] [-v | --volumes ] CONTAINER [ CONTAINER... ]

【參數解析】

  1. -f,--force=false:是否強行終止並刪除一個運行中的容器;
  2. -l,--link=false:刪除容器的連接,但保留容器;
  3. -v,--volumes=false:刪除容器掛載的數據卷;

【注】

  • 默認情況下,docker rm命令只能刪除已經處於終止或退出狀態的容器,並不能刪除處於運行狀態的容器;
  • 如果要直接刪除一個運行中的容器,可以添加-f參數,Docker會先發送SIGKILL信號給容器,終止其中應用,之後強行刪除;

 

導入和導出容器

某些時候,需要將容器從一個系統遷移到另外一個系統,此時可以使用Docker的導入和導出功能,這也是Docker自身提供的一個重要特性。

 

1、導出容器

導出容器是指,導出一個已經創建的容器到一個文件,不管此時這個容器是否處於運行狀態。

命令:docker [container) export [-o l - -output [ =” ” ] ] CONTAINER

【參數解析】

  • -o:指定導出的tar文件名,也可通過重定向來實現

之後可以將導出的tar文件傳輸到其他機器上,然後再通過導入命令導入到系統中,實現容器的遷移。

 

2、導入容器

命令:docker import [ -c | --change [ = [ ] ] ] [ -m | --message [ =MESSAGE ] ] file | URL | -[ REPOSITORY [ :TAG] ]

【注】用戶通過-c,--change=[ ]選項在導入的同時執行對容器進行修改的Dockerfile指令。

例:將導出的ubuntu_18_04.tar.gz文件導入到系統中

【Import和Load的區別】

相同:

  • load命令可用來導入鏡像存儲文件到本地鏡像庫,import命令可用來導入一個容器快照到本地鏡像庫;

不同:

  • 容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態);
  • 鏡像存儲文件將保存完整記錄,體積更大;

因此,從容器快照文件導入時可以重新指定標籤等元數據信息。

 

查看容器

主要介紹Docker容器的inspect、top和stats子命令

 

1、查看容器詳情

命令:docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

例:查看某容器的具體信息,會以JSON格式返回包括容器id、創建時間、路徑、狀態、鏡像、配置等在內的各項信息。

 

2、查看容器內進程

命令:docker [container] top [OPTIONS] CONTAINER [CONTAINER...]

作用:類似於Linux系統中的top命令,會打印出容器內的進程信息,包括PID、用戶、時間、命令等。

例:查看某容器內的進程信息

 

3、查看統計信息

命令:docker [container] stats [OPTIONS] [CONTIANER...]

作用:顯示CPU、內存、存儲、網絡等使用情況的統計信息

【參數解析】

  1. -a,-all:輸出所有容器統計信息,默認僅在運行中;
  2. -format string:格式化輸出信息;
  3. -no-stream:不持續輸出信息,默認會自動更新持續實時結果;
  4. -no-trunc:不截斷輸出信息;

例:查看當前運行中容器的系統資源使用統計

 

其他容器命令

主要介紹Docker容器的cp、diff、port和update子命令

 

1、複製文件

命令:docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -

【參數解析】

  1. -a,-archive:打包模式,複製文件會帶有原始的uid/gid信息;
  2. -L,-follow-link:跟隨軟連接。當原路徑爲軟連接時,默認只複製鏈接信息,使用該選項會複製鏈接的目標內容;

 

2、查看變更

命令:docker [container] diff CONTAINER

例:查看容器內的數據修改

 

3、查看端口映射

命令:docker container port CONTAINER [PRIVATE_PORT [ / PROTO ] ]

例:查看容器的端口映射情況(寫者未做對應端口映射,查詢無結果)

 

4、更新配置

命令:docker [contianer] update [OPTIONS] CONTAINER [CONTAINER...]

【參數解析】

  1. - blkio-weight uint16 :更新塊 IO 限制,10~1000,默認值爲 0,代表着無限制;
  2. - cpu-period int :限制 CPU 調度器 CFS (Completely Fair Scheduler)使用時間,單位爲微秒,最小 1000;
  3. - cpu-quota int :限制 CPU 調度器 CFS 配額,單位爲微秒,最小 1000;
  4. - cpu-rt - period int :限制 CPU 調度器的實時週期,單位爲微秒 ;
  5. - cpu-rt - runtime int :限制 CPU 調度器的實時運行時,單位爲微秒;
  6. - c, -cpu-shares int : 限制 CPU 使用份額;
  7. - cpus decimal :限制 CPU 個數;
  8. - cpuset-cpus string :允許使用的 CPU 核,如 0-3, 0, 1;
  9. - cpuset - mems string :允許使用的內存塊,如 0-3, 0, 1;
  10. - kernel-memory bytes :限制使用的內核內存;
  11. - m, -memory bytes : 限制使用的內存;
  12. - memory-reservation bytes :內存軟限制;
  13. - memory-swap bytes :內存加上緩存區的限制, -1表示爲對緩衝區無限制;
  14. - restart stri口g : 容器退出後的重啓策略;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章