Docker鏡像與容器命令

jopen 9年前發布 | 22K 次閱讀 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。


版權聲明:本文為博主林炳文Evankaka原創文章,轉載請注明出處http://blog.csdn.net/evankaka

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!