從本節(jié)開始,開啟容器部分學(xué)習(xí)盔腔。
Docker提供的docker run命令用于創(chuàng)建并啟動(dòng)一個(gè)容器實(shí)例杠茬。
例如:docker run ubuntu
實(shí)際上一個(gè)容器實(shí)例就是宿主機(jī)器上的一個(gè)獨(dú)立的進(jìn)程月褥。這一點(diǎn)我們?cè)谇懊嬷v解的時(shí)候或多或少已經(jīng)提過了。每次執(zhí)行docker run瓢喉,就創(chuàng)建一個(gè)Docker容器進(jìn)程宁赤,擁有獨(dú)立的文件系統(tǒng)、網(wǎng)絡(luò)和進(jìn)程樹栓票。使用docker ps或者docker container ls可以查詢運(yùn)行的容器决左。
那么有人會(huì)問,我怎么查詢不到呢走贪?ps也查不到相應(yīng)的進(jìn)程呢佛猛?這是因?yàn)槿萜鲉?dòng)后又退出了。使用docker ps -a或者docker container ls -a查詢
確實(shí)容器退出了坠狡。那我們?cè)趺醋屓萜鞅3诌\(yùn)行呢继找,exited可不是用戶希望的狀態(tài)。
查看docker run --help
我們看到run的時(shí)候逃沿,用戶可以指定容器啟動(dòng)后需要執(zhí)行的命令婴渡,比如執(zhí)行一個(gè)shell命令一直循環(huán)。當(dāng)然run還提供了其他的豐富可選項(xiàng)凯亮,最常用的-i -t -d可選項(xiàng)边臼,
-i, --interactive? ? ? ? ? Keep STDIN open even if not attached
-t, --tty? ? ? ? ? ? ? ? Allocate a pseudo-TTY
-d, --detach? ? ? ? ? ? Run container in background and printcontainer ID
使用-i選項(xiàng),容器沒退出假消,但終端界面一直卡主柠并。
主機(jī)名變了,docker ps查詢這個(gè)一連串的數(shù)字加字目的主機(jī)名是容器ID置谦。實(shí)際上-t使得啟動(dòng)容器的同時(shí)進(jìn)入容器了堂鲤。而run的時(shí)候用戶也可以使用-h指定容器的主機(jī)名
使用-d打印了容器ID亿傅,但容器退出了媒峡。
同時(shí)使用效果是最好的,終端不會(huì)卡主葵擎,容器處于后臺(tái)運(yùn)行狀態(tài)谅阿,還打印了容器ID。實(shí)際上酬滤,當(dāng)run一個(gè)容器的時(shí)候签餐,我一般都會(huì)使用這三個(gè)可選項(xiàng)。
解釋:
c39394704c3e287f33c3b08c0082e6f86ec1ff02baa2a6c240b6a072a4d756e1容器的長ID盯串;
c39394704c3e 容器短ID氯檐;
relaxed_heyrovsky 容器名字,用戶可以使用--name指定体捏,未指定的話冠摄,docker自動(dòng)生成
那為什么run的時(shí)候沒有加要執(zhí)行的命令糯崎,容器也沒有退出呢?這其實(shí)是因?yàn)镈ockerfile里的CMD命令起作用了河泳,不知道大家還記不記得沃呢。
當(dāng)利用 docker run 來啟動(dòng)容器時(shí),Docker在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:
1拆挥、檢查本地是否存在指定的鏡像薄霜,不存在就從公有倉庫下載
2、利用鏡像創(chuàng)建一個(gè)容器
3纸兔、分配一個(gè)文件系統(tǒng)惰瓜,并在只讀的鏡像層外面掛載一層可讀寫的容器層
4、從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去汉矿,從地址池配置一個(gè)ip地址給容器
5鸵熟、啟動(dòng)容器并執(zhí)行用戶指定的應(yīng)用程序
6、執(zhí)行完畢后容器被終止
關(guān)于第三點(diǎn)第四點(diǎn)需要說明下:
由于容器內(nèi)未安裝相關(guān)網(wǎng)絡(luò)命令负甸,我們使用docker inspect ContainerID
你也可以在宿主機(jī)ifconfig查詢流强,應(yīng)該多了幾個(gè)網(wǎng)卡。這些我們都會(huì)在docker 網(wǎng)絡(luò)部分講解呻待。