Docker镜像与容器命令
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測(cè)試通過的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機(jī))、bare metal、OpenStack 集群和其他的基礎(chǔ)應(yīng)用平臺(tái)。?Docker通常用于如下場(chǎng)景:
web應(yīng)用的自動(dòng)化打包和發(fā)布;
自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布;
在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)用;
從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來搭建自己的PaaS環(huán)境。
一、鏡像相關(guān)命令
1、獲取鏡像
[plain]? view plain copy
2、列出本地鏡像
[plain]? view plain copy
在列出信息中,可以看到幾個(gè)字段信息
來自于哪個(gè)倉庫,比如 ubuntu
鏡像的標(biāo)記,比如 14.04
它的 ID 號(hào)(唯一)
創(chuàng)建時(shí)間
鏡像大小
其中鏡像的 ID 唯一標(biāo)識(shí)了鏡像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的鏡像 ID,說明它們實(shí)際上是同一鏡像。
TAG 信息用來標(biāo)記來自同一個(gè)倉庫的不同鏡像。例如 ubuntu 倉庫中有多個(gè)鏡像,通過 TAG 信息來區(qū)分發(fā)行版本,例如 10.04、12.04、12.10、13.04、14.04 等。例如下面的命令指定使用鏡像 ubuntu:14.04 來啟動(dòng)一個(gè)容器。
3、創(chuàng)建鏡像
方法一:
[plain]? view plain copy
方法二:
[plain]? view plain copy
4、移除本地鏡像
[plain]? view plain copy *注意:在刪除鏡像之前要先用?docker rm?刪掉依賴于這個(gè)鏡像的所有容器。
5、存出和載入鏡像
存出鏡像
如果要導(dǎo)出鏡像到本地文件,可以使用 docker save 命令。
6、載入鏡像
可以使用 docker load 從導(dǎo)出的本地文件中再導(dǎo)入到本地鏡像庫,例如
[plain]? view plain copy
這將導(dǎo)入鏡像以及其相關(guān)的元數(shù)據(jù)信息(包括標(biāo)簽等)。
二、容器相關(guān)命令
1、啟動(dòng)容器
啟動(dòng)容器有兩種方式,一種是基于鏡像新建一個(gè)容器并啟動(dòng),另外一個(gè)是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動(dòng)。
因?yàn)?Docker 的容器實(shí)在太輕量級(jí)了,很多時(shí)候用戶都是隨時(shí)刪除和新創(chuàng)建容器。所需要的命令主要為 docker run。
(1)新建并啟動(dòng)
下面的命令則啟動(dòng)一個(gè) bash 終端,允許用戶進(jìn)行交互。
[plain]? view plain copy
其中,-t 選項(xiàng)讓Docker分配一個(gè)偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上, -i 則讓容器的標(biāo)準(zhǔn)輸入保持打開。也可以合并起來寫
[plain]? view plain copy
可見,容器中僅運(yùn)行了指定的 bash 應(yīng)用。這種特點(diǎn)使得 Docker 對(duì)資源的利用率極高,是貨真價(jià)實(shí)的輕量級(jí)虛擬化。不加-t -i的話,執(zhí)行完就退出容器例如,下面的命令輸出一個(gè) “Hello World”,之后終止容器。
[plain]? view plain copy這跟在本地直接執(zhí)行 /bin/echo 'hello world' 幾乎感覺不出任何區(qū)別。 [plain]? view plain copy
在交互模式下,用戶可以通過所創(chuàng)建的終端來輸入命令,例如
如果,只想讓容器在后臺(tái)運(yùn)行呢?那就看下面的吧!
(2)守護(hù)態(tài)運(yùn)行更多的時(shí)候,需要讓 Docker 容器在后臺(tái)以守護(hù)態(tài)(Daemonized)形式運(yùn)行。此時(shí),可以通過添加 -d 參數(shù)來實(shí)現(xiàn)。例如下面的命令會(huì)在后臺(tái)運(yùn)行容器。
容器啟動(dòng)后會(huì)返回一個(gè)唯一的 id,也可以通過 docker ps 命令來查看容器信息。
然后使用
[plain]? view plain copy
容器name可以通過以下獲得
[plain]? view plain copy
然后進(jìn)入:
當(dāng)利用 docker run 來創(chuàng)建容器時(shí),Docker 在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:
檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器
分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層
從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去
從地址池配置一個(gè) ip 地址給容器
執(zhí)行用戶指定的應(yīng)用程序
執(zhí)行完畢后容器被終止
(3)啟動(dòng)終止的容器
可以利用 docker start + 容器ID,命令,直接將一個(gè)已經(jīng)終止的容器啟動(dòng)運(yùn)行。
先找到要啟動(dòng)容器的id
[plain]? view plain copy
Exited表示的就是終止的。然后使用
[plain]? view plain copy
上面我以后臺(tái)運(yùn)行的方式啟動(dòng)了兩個(gè)新的容器
這是以后臺(tái)運(yùn)行的方式來執(zhí)行的,那怎樣才能再進(jìn)入容器呢?可以用docker attact +容器name
先通過docker ps -a 取得正在運(yùn)行的容器名字,然后
[plain]? view plain copy
如下:
容器的核心為所執(zhí)行的應(yīng)用程序,所需要的資源都是應(yīng)用程序運(yùn)行所必需的。除此之外,并沒有其它的資源??梢栽趥谓K端中利用 ps 或 top 來查看進(jìn)程信息。
(4)退出container但是保持運(yùn)行
默認(rèn)情況下,如果使用ctrl-d退出container,那么container也會(huì)stop,按ctrl-p ctrl-q可以退出到宿主機(jī),而保持container仍然在運(yùn)行.然后要進(jìn)入再使用docker attach
2、停止容器
輸入exit或ctrl+d
3、獲取容器信息
要獲取容器的輸出信息,可以通過 docker logs 命令。
[plain]? view plain copy
4、在容器中安裝新的程序
下一步我們要做的事情是在容器里面安裝一個(gè)簡(jiǎn)單的程序(ping)。我們之前下載的tutorial鏡像是基于ubuntu的,所以你可以使用ubuntu的apt-get命令來安裝ping程序:apt-get install -y ping。
備注:apt-get 命令執(zhí)行完畢之后,容器就會(huì)停止,但對(duì)容器的改動(dòng)不會(huì)丟失。
5、保存對(duì)容器的修改
當(dāng)你對(duì)某一個(gè)容器做了修改之后(通過在容器中運(yùn)行某一個(gè)命令),可以把對(duì)容器的修改保存下來,這樣下次可以從保存后的最新狀態(tài)運(yùn)行該容器。docker中保存狀態(tài)的過程稱之為committing,它保存的新舊狀態(tài)之間的區(qū)別,從而產(chǎn)生一個(gè)新的版本?;蛘弋?dāng)結(jié)束后,我們使用 exit 來退出,現(xiàn)在我們的容器已經(jīng)被我們改變了,使用 docker commit 命令來提交更新后的副本。
先取得修改后的容器ID
保存容器,實(shí)際上就是保存成了一個(gè)新的鏡像
其中,-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來創(chuàng)建鏡像的容器的 ID;最后指定目標(biāo)鏡像的倉庫名和 tag 信息。創(chuàng)建成功后會(huì)返回這個(gè)鏡像的 ID 信息。
使用 docker images 來查看新創(chuàng)建的鏡像。
之后,可以使用新的鏡像來啟動(dòng)容器
6、刪除容器
可以使用 docker rm 來刪除一個(gè)處于終止?fàn)顟B(tài)的容器。 例如
如果要?jiǎng)h除一個(gè)運(yùn)行中的容器,可以添加 -f 參數(shù)。Docker 會(huì)發(fā)送 SIGKILL 信號(hào)給容器。
7、檢查運(yùn)行中的容器
使用docker ps命令可以查看所有正在運(yùn)行中的容器列表,使用docker inspect命令我們可以查看更詳細(xì)的關(guān)于某一個(gè)容器的信息。查找某一個(gè)運(yùn)行中容器的id,然后使用docker inspect命令查看容器的信息??梢允褂苗R像id的前面部分,不需要完整的id。
轉(zhuǎn)載于:https://my.oschina.net/zhanghaiyang/blog/595672
總結(jié)
以上是生活随笔為你收集整理的Docker镜像与容器命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Log4j 1使用教程
- 下一篇: 一切都是对象