1. 程式人生 > >Docker映象與容器命令

Docker映象與容器命令

         Docker是一個開源的引擎,可以輕鬆的為任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機器)、bare metal、OpenStack 叢集和其他的基礎應用平臺。
Docker通常用於如下場景:
web應用的自動化打包和釋出;
自動化測試和持續整合、釋出;
在服務型環境中部署和調整資料庫或其他的後臺應用;

從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

一、映象相關命令

1、獲取映象

sudo docker pull ubuntu:12.04

2、列出本地映象

sudo docker images

在列出資訊中,可以看到幾個欄位資訊

來自於哪個倉庫,比如 ubuntu
映象的標記,比如 14.04
它的 ID 號(唯一)
建立時間
映象大小
其中映象的 ID 唯一標識了映象,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的映象 ID,說明它們實際上是同一映象。
TAG 資訊用來標記來自同一個倉庫的不同映象。例如 ubuntu 倉庫中有多個映象,通過 TAG 資訊來區分發行版本,例如 10.04、12.04、12.10、13.04、14.04 等。例如下面的命令指定使用映象 ubuntu:14.04 來啟動一個容器。

3、建立映象

方法一:

docker commit

方法二:

dockerFile

4、移除本地映象

可以使用 docker rmi 命令。注意 docker rm 命令是移除容器。

*注意:在刪除映象之前要先用 docker rm 刪掉依賴於這個映象的所有容器。

5、存出和載入映象
存出鏡像
如果要匯出映象到本地檔案,可以使用 docker save 命令。


6、載入映象

可以使用 docker load 從匯出的本地檔案中再匯入到本地映象庫,例如

sudo docker load --input ubuntu_14.04.tar

$ sudo docker load < ubuntu_14.04.tar

這將匯入映象以及其相關的元資料資訊(包括標籤等)。

二、容器相關命令

1、啟動容器

啟動容器有兩種方式,一種是基於映象新建一個容器並啟動,另外一個是將在終止狀態(stopped)的容器重新啟動。

因為 Docker 的容器實在太輕量級了,很多時候使用者都是隨時刪除和新建立容器。所需要的命令主要為 docker run。
(1)新建並啟動

下面的命令則啟動一個 bash 終端,允許使用者進行互動。

sudo docker run -t -i training/sinatra /bin/bash

其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)並繫結到容器的標準輸入上, -i 則讓容器的標準輸入保持開啟。也可以合併起來寫

sudo docker run -ti ubuntu:14.04 /bin/bash

可見,容器中僅運行了指定的 bash 應用。這種特點使得 Docker 對資源的利用率極高,是貨真價實的輕量級虛擬化。不加-t -i的話,執行完就退出容器例如,下面的命令輸出一個 “Hello World”,之後終止容器。

sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

這跟在本地直接執行 /bin/echo 'hello world' 幾乎感覺不出任何區別。

在互動模式下,使用者可以通過所建立的終端來輸入命令,例如

如果,只想讓容器在後臺執行呢?那就看下面的吧!

(2)守護態執行更多的時候,需要讓 Docker 容器在後臺以守護態(Daemonized)形式執行。此時,可以通過新增 -d 引數來實現。例如下面的命令會在後臺執行容器。

容器啟動後會返回一個唯一的 id,也可以通過 docker ps 命令來檢視容器資訊。

然後使用

docker attach 容器name
就可以進入容器互動介面
容器name可以通過以下獲得
docker ps -a 
如進入上面的:


然後進入:

當利用 docker run 來建立容器時,Docker 在後臺執行的標準操作包括:
檢查本地是否存在指定的映象,不存在就從公有倉庫下載
利用映象建立並啟動一個容器
分配一個檔案系統,並在只讀的映象層外面掛載一層可讀寫層
從宿主主機配置的網橋介面中橋接一個虛擬介面到容器中去
從地址池配置一個 ip 地址給容器
執行使用者指定的應用程式
執行完畢後容器被終止

(3)啟動終止的容器

可以利用 docker start + 容器ID,命令,直接將一個已經終止的容器啟動執行。

先找到要啟動容器的id

docker ps -a


Exited表示的就是終止的。然後使用

docker start b3f9d3239bed 

上面我以後臺執行的方式啟動了兩個新的容器

這是以後臺執行的方式來執行的,那怎樣才能再進入容器呢?可以用docker attact +容器name

先通過docker ps -a 取得正在執行的容器名字,然後

docker attach goofy_mclean

如下:


容器的核心為所執行的應用程式,所需要的資源都是應用程式執行所必需的。除此之外,並沒有其它的資源。可以在偽終端中利用 ps 或 top 來檢視程序資訊。

(4)退出container但是保持執行

預設情況下,如果使用ctrl-d退出container,那麼container也會stop,按ctrl-p ctrl-q可以退出到宿主機,而保持container仍然在執行.然後要進入再使用docker attach

2、停止容器

輸入exit或ctrl+d

3、獲取容器資訊

要獲取容器的輸出資訊,可以通過 docker logs 命令。

docker logs 容器name


4、在容器中安裝新的程式

下一步我們要做的事情是在容器裡面安裝一個簡單的程式(ping)。我們之前下載的tutorial映象是基於ubuntu的,所以你可以使用ubuntu的apt-get命令來安裝ping程式:apt-get install -y ping。
備註:apt-get 命令執行完畢之後,容器就會停止,但對容器的改動不會丟失。


5、儲存對容器的修改
當你對某一個容器做了修改之後(通過在容器中執行某一個命令),可以把對容器的修改儲存下來,這樣下次可以從儲存後的最新狀態執行該容器。docker中儲存狀態的過程稱之為committing,它儲存的新舊狀態之間的區別,從而產生一個新的版本。或者當結束後,我們使用 exit 來退出,現在我們的容器已經被我們改變了,使用 docker commit 命令來提交更新後的副本。

先取得修改後的容器ID

儲存容器,實際上就是儲存成了一個新的映象

其中,-m 來指定提交的說明資訊,跟我們使用的版本控制工具一樣;-a 可以指定更新的使用者資訊;之後是用來建立映象的容器的 ID;最後指定目標映象的倉庫名和 tag 資訊。建立成功後會返回這個映象的 ID 資訊。

使用 docker images 來檢視新建立的映象。


之後,可以使用新的映象來啟動容器

6、刪除容器

可以使用 docker rm 來刪除一個處於終止狀態的容器。 例如


如果要刪除一個執行中的容器,可以新增 -f 引數。Docker 會發送 SIGKILL 訊號給容器。

7、檢查執行中的容器

使用docker ps命令可以檢視所有正在執行中的容器列表,使用docker inspect命令我們可以檢視更詳細的關於某一個容器的資訊。查詢某一個執行中容器的id,然後使用docker inspect命令檢視容器的資訊。可以使用映象id的前面部分,不需要完整的id。


備註:

刪除命令彙總

docker images往往不知不覺就佔滿了硬碟空間,為了清理冗餘的image,可採用以下方法:

1.進入root許可權

sudo su

2.停止所有的container,這樣才能夠刪除其中的images:

docker stop $(docker ps -a -q)

如果想要刪除所有container的話再加一個指令:

docker rm $(docker ps -a -q)

3.檢視當前有些什麼images

docker images

4.刪除images,通過image的id來指定刪除誰

docker rmi <image id>

想要刪除untagged images,也就是那些id為<None>的image的話可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要刪除全部image的話

docker rmi $(docker images -q)