原文出自:http://blog.csdn.net/anxpp/article/details/52476339
容器是Docker的另一個核心概念。
一般來說,鏡像的一個運行執行個體就是容器,容器提供了一個可寫的檔案層。
本文同上一篇介紹鏡像一樣的結構,逐步介紹容器。 1、建立容器
Docker的容器非常輕量級,建立和刪除都很容易。 1.1、建立容器
建立容器使用docker create命令:
docker create -it ubuntu:latest
此時建立好的容器處於停止狀態,使用docker pa -a可以查看容器列表。
停止的容器可以使用docker start命令啟動。 1.2、啟動容器
啟動容器有兩種方式:
1、基於鏡像建立容器並啟動
2、啟動終止狀態的容器
主要涉及的命令為docker run,等價於先執行docker create,然後執行docker start命令。
比如:
docker run ubuntu /bin/bash 'hello word'
會啟動容器並輸出hello word然後自動終止。
利用docker run建立並啟動容器時,docker在後台啟動並執行標準操作包括:
檢查本地是否存在指定的鏡像,不存在就從倉庫下載 利用鏡像建立並啟動一個容器 分配一個檔案系統,並在唯讀鏡像層外面掛載一層可讀寫層 從宿主主機配置的橋接器介面中橋接一個虛擬介面道容器中去。 從位址集區中分配一個IP給容器 執行使用者指定的應用程式 執行完畢後容器被終止 下面啟動一個bash終端與使用者互動:
docker run -t -i ubuntu /bin/bash
-t:讓docker分配一個偽終端並綁定到容器的標準輸入上。
-i:讓容器的標準輸入保持開啟。
互動模式下使用者可以通過所建立的中斷來輸入命令,這和一般linux的中斷使用起來是一樣的。
輸入exit或者按ctrl+d可以退出容器。
對於所建立的bash容器,當使用exit命令退出後,docker容器也會自動終止,因為對於docker來說,沒有運行中的應用後,容器也沒有必要繼續運行了。
1.3、守護態運行 可以通過-d參數讓docker容器在後台以守護態(Daemonized)形式運行。
比如:
docker run -d ubuntu /bin/bash -c "while true;do each hello word; sleep 1 done"
使用docker ps命令查看容器資訊。
使用docker logs擷取容器的輸出資訊。
2、終止容器
終止一個運行中的命令是docker stop,格式:
docker stop [-t|--time[=10]]
這時會首先向容器發送SIGTERM訊號,等待一段時間後(預設為10s),再次發送SIGNKILL訊號終止容器。
同樣的,像剛剛前面說的一樣,當Docker容器中指定的應用終結時,容器頁自動終止。
可以通過docker ps命令查看:
docker ps -a -q
這裡參數表示查看所有退出的容器。
容器(被)終止後,可以通過docker start重新啟動。
而docker restart命令,頁如我們所料,會首先終止一個運行態的容器,然後再重新啟動它。
3、進入容器 啟動容器時若加上參數-d會進入後台,無法直接看到容器中的內容。
如果想進入容器,有多種方法:docker attach命令、docker exec命令以及nsenter工具等。
3.1、attach命令
這是Docker內建的命令。
如果我們有如下啟動並執行容器:
docker run -idt ubuntu
可以這樣進入:
docker attach 容器Name
但是,當多個視窗(終端)同時attach到一個容器時,所有視窗都會同步顯示,當某個視窗因為命令等阻塞後,其他視窗也會被阻塞而不能執行操作。
3.2、exec命令 exec是docker中1.3版本開始提供的工具,可以直接在容器中運行命令。
還是剛剛那個啟動並執行容器的例子,如果想要進入並啟動一個bash:
docker exec -ti 容器ID /bin/bash
3.3、nsenter工具 nsenter工具包含在util-linux 2.23版本及以後,如果系統中的對應包版本較低,可以如下安裝新版:
。。。。。。
4、刪除容器 刪除容器使用docker rm命令,格式為:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
支援的選項:
-f、--force=false:因為運行中的容器預設是不能被刪除的,這個參數就是強行終止並刪除一個運行中的容器。 -l、--link=false:刪除容器的串連,但保留容器。 -v、--volumes=false:刪除容器掛在的資料卷。 例如,刪除終止狀態的容器:
docker rm 容器ID
刪除運行中的容器:
docker rm -f 容器ID
5、匯入匯出容器 跟鏡像一樣,容器也可以匯出為一個檔案和從檔案中匯入容器。
5.1、匯出容器到檔案 匯出容器是將一個以及從鏡像建立為容器的執行個體匯出到一個檔案,而不管此時這個容器是否處於運行狀態。
命令為dicker export,格式:
docker export CONTAINER
一個匯出的樣本:
docker export 容器ID >匯出後的檔案名稱.tar
然後可以將檔案發送到其他地方以實現容器的遷移。
5.2、從檔案匯入容器 對於剛剛匯出的容器,對應使用docker import命令匯入,然後成為 鏡像:
cat 檔案名稱.tar | docker import - 鏡像名字:TAG
比如:
cat test.tar | docker import - test/ubuntu:v0.0.1
鏡像的匯入使用的是docker load,下面是兩者的區別:
容器快照檔案將丟失所有的記錄和中繼資料資訊(僅儲存容器的快照狀態),所以從容器快照匯入時一般會重新指定標籤等中繼資料資訊。 鏡像檔案儲存完整記錄,所以體積頁更大。
小結 容器是直接提供應用服務的組件,操作都非常輕量級,是docker實現快速的啟停和高效服務效能的基礎。