1. 程式人生 > >Docker學習筆記:Docker容器常用命令

Docker學習筆記:Docker容器常用命令

       容器是映象的一個執行例項。兩者不同的是,映象是靜態的只讀檔案,而容器帶有執行時需要的可寫檔案層。

一、建立容器

       1、新建容器

       docker create:新建一個容器

       create命令命令支援的選項十分複雜,主要包括如下幾大類:與容器執行模式相關、與容器和環境配置相關、與容器資源限制和安全保護相關。

       2、啟動容器

       docker start:啟動一個已經建立的容器

       3、新建並啟動容器

       docker run:直接新建並啟動容器

       當利用docker run來建立並啟動容器時,Docker在後臺執行的標準操作包括:

       1)檢查本地是否存在指定的映象,不存在就從公有倉庫下載;

       2)利用映象建立一個容器,並啟動該容器;

       3)分配一個檔案系統給容器,並在只讀的映象層外面掛載一層可讀寫層;

       4)從宿主主機配置的網橋介面中橋接一個虛擬介面道容器中;

       5)從網橋的地址池配置一個IP地址給容器;

       6)執行使用者指定的應用程式;

       7)執行完畢後容器被自動終止。

       通過如下命令可以啟動一個bash終端,允許使用者進行互動:docker run -it ubuntu:14.04 /bin/bash,其中,-t選項讓Docker分配一個偽終端(pseudo-tty)並繫結到容器的標準輸入上,-i則讓容器的標準輸入保持開啟。對於所建立的bash容器,當使用exit命令來退出之後,容器就自動處於退出狀態了。

       docker run常見錯誤碼:

       125:Docker daemon執行出錯,例如指定了不支援的Docker命令引數;

       126:所指定命令無法執行,例如許可權出錯;

       127:容器內命令無法找到。

       4、守護態執行

       通過新增-d選項實現後臺執行。

二、終止容器

       docker stop:終止一個執行中的容器

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

       命令執行時,首先向容器傳送SIGTERM訊號,等待一段超時時間(預設為10s)後,再發送SIGKILL訊號來終止容器。當Docker容器中指定的應用終結時,容器也會自動終止。

       docker restart:將一個執行態的容器先終止,然後再重新啟動它。

三、進入容器

       使用-d引數時,容器啟動後會進入後臺,使用者無法看到容器中的資訊,也無法進行操作。此時,可通過官方的attach或exec命令,以及第三方的nsenter工具等。

       1、attach

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

       支援三個主要選項:

       --detach-keys[=[]]:指定退出attach模式的快捷鍵序列,預設是CTRL-p CTRL-q;

       --no-stdin=true|false:是否關閉標準輸入,預設是保持開啟;

       --sig-proxy=true|false:是否代理收到的系統訊號給應用程序,預設為true。

       當多個視窗同時用attach命令連到同一個容器的時候,所有視窗都會同步顯示。當某個視窗因命令阻塞時,其他視窗也無法執行操作了。

       2、exec

       命令格式:docker exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [p--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]

       比較重要的引數有:

       -i,--interactive=true|false:開啟標準輸入接受使用者輸入命令,預設為false;

       --privileged=true|false:是否給執行命令以最高許可權,預設為false;

       -t,--tty=true|false:分配偽終端,預設為false;

       -u,--user=””:執行命令的使用者名稱或ID。

       在不影響容器內其他應用的前提下,使用者可以很容易與容器進行互動。

       3、nsenter工具

       使用nsenter連結之前,需要找到容器程序的PID:PID=$(docker inspect –format “{{ .State.Pid }}” <container>)

       通過PID,連線到這個容器:nsenter –target $PID –mount –uts –ipc –net –pid

四、刪除容器

       docker rm:刪除處於終止或退出狀態的容器

       命令格式:docker rm [-f|--force] [-l|--link] [-v|--volumns] CONTAINER [CONTAINER...]

       主要支援的選項包括:

       -f,--force|false:是否強行終止並刪除一個執行中的容器;

       -l,--link=false:刪除容器的連線,但保留容器;

       -v,--volumns=false:刪除容器掛載的資料卷。

五、匯入和匯出容器

       1、匯出容器

       docker export:匯出一個已經建立的容器到一個檔案,不管此時這個容器是否處於執行狀態

       命令格式:docker export [-o|--output[=””]] CONTAINER,可以通過-o選項來指定匯出的tar檔名,也可以直接通過重定向來實現。例如,docker export -o test.tar CONTAINERID,或者,docker export CONTAINERID >test.tar。

       2、匯入容器

       docker import:將匯出檔案匯入變成映象

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

       docker load是匯入映象儲存檔案到本地映象庫,docker import是匯入一個容器快照到本地映象庫。區別在於容器快照檔案將丟棄所有的歷史記錄和元資料資訊(僅儲存容器當前的快照狀態),從容器快照檔案匯入時可以重新指定標籤等元資料資訊,而映象儲存檔案將儲存完整記錄,體積更大。