容器是由鏡像創(chuàng)建的運(yùn)行實(shí)例,可以看成是一個(gè)簡(jiǎn)易版的Linux環(huán)境,其本質(zhì)是宿主機(jī)上的進(jìn)程饿幅。每個(gè)容器是相互隔離的栗恩,用戶可以啟動(dòng)、停止市咆、創(chuàng)建蒙兰、刪除容器采缚。
Docker通過namespace實(shí)現(xiàn)資源隔離扳抽,同一個(gè)namespace下的進(jìn)程可以感知彼此的變化,而對(duì)外界的進(jìn)程一無(wú)所知贮尉,這樣一來(lái)就實(shí)現(xiàn)了獨(dú)立和隔離的目的猜谚。
1.啟動(dòng)容器
1、 利用鏡像新建并啟動(dòng)一個(gè)容器
$ docker run –i –t ubuntu:12.04 /bin/bash
對(duì)比可以發(fā)現(xiàn)览芳,其中-i是打開容器的標(biāo)準(zhǔn)輸入沧竟,-t是分配一個(gè)偽終端并綁定到容器的標(biāo)準(zhǔn)輸入上。
2、 守護(hù)態(tài)運(yùn)行容器朽肥,即在后臺(tái)以守護(hù)態(tài)形式運(yùn)行。
$ docker run –d ubuntu:12.04 /bin/sh –c “while true; do echo hello fc;sleep 1;done”
創(chuàng)建蚁吝、啟動(dòng)容器后執(zhí)行命令怀伦,循環(huán)打印“hello fc”房待,可以使用“docker logs [容器名稱]”來(lái)查看容器輸出的信息桑孩。
更多的參數(shù)介紹可以通過docker run –help查詢。
使用docker run創(chuàng)建容器時(shí)宣虾,后臺(tái)會(huì)進(jìn)行如下操作:
- 檢查指定的鏡像是否存在,不存在就從公有倉(cāng)庫(kù)下載
- 利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器
- 從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中
- 從地址池配置一個(gè)ip給容器
- 執(zhí)行用戶指定的應(yīng)用程序
- 執(zhí)行完畢后終止容器
雖然后臺(tái)會(huì)進(jìn)行這一系列的操作鹉胖,但容器的速度依舊很快,是當(dāng)之無(wú)愧的輕量級(jí)淑蔚,使用docker創(chuàng)建容器并執(zhí)行/bin/echo ‘hello’與直接在本地執(zhí)行命令的速度幾乎差不多搞挣。
3、 啟動(dòng)一個(gè)處于停止?fàn)顟B(tài)的容器
$ docker start [容器id]
注:使用docker run命令創(chuàng)建并啟動(dòng)一個(gè)容器舍肠,如果命令出錯(cuò)只創(chuàng)建容器但沒有運(yùn)行叽躯,再次用docker start啟動(dòng)時(shí),會(huì)報(bào)出同樣的錯(cuò)誤黑滴。
2.進(jìn)入容器
1珠漂、 使用attach命令
$ docker attach [容器名稱]
使用attach命令也有不足之處橡羞,多個(gè)終端同時(shí)登錄一個(gè)容器時(shí),所有窗口會(huì)同步顯示签夭。
2、 使用nsenter
3.導(dǎo)入導(dǎo)出容器
1慎宾、 從本地導(dǎo)出一個(gè)容器
$ docker export [容器id] > [文件名]
2、 將導(dǎo)出的文件再導(dǎo)入為鏡像
$ cat [文件名] | docker import [repository:tag]
4.export-import和save-load
export用于存入存出容器,而save用于導(dǎo)出鏡像咳促。鏡像類似于安裝配置好的虛擬機(jī)鏡像褂删,利用這個(gè)鏡像可以啟動(dòng)多個(gè)鏡像實(shí)例,而這樣的鏡像實(shí)例就是容器蹲盘。容器和鏡像可以相互轉(zhuǎn)換,鏡像可以創(chuàng)建容器,容器修改后也可以生成新的鏡像醇蝴。
save-load過程中容器id保持不變,也就是鏡像存出惭适、存入,依舊是同一個(gè)鏡像凄杯。
1、利用某個(gè)鏡像創(chuàng)建一個(gè)容器
$ docker run -t -i ubuntu:12.04 /bin/bash
2窿锉、利用commit命令將修改后的容器變成一個(gè)新鏡像
$ docker commit 3aa901b9b85b ubuntu-1
3窑多、將容器導(dǎo)出為文件
$ docker export 3aa901b9b85b > ./ubuntu00.tar
4技潘、將該容器生成的新鏡像存為文件
$ docker save ubuntu-1 > ./ubuntu01.tar
5、查看這兩個(gè)文件的大小,發(fā)現(xiàn)由鏡像save的文件稍微大一點(diǎn)
6、重新將這兩個(gè)文件導(dǎo)入為鏡像
$ cat ./ubuntu00.tar |docker import - ubuntu00:v1
$ docker load < ./ubuntu01.tar
7咳秉、查看這兩個(gè)鏡像的層級(jí)關(guān)系
可以看出save保存的文件導(dǎo)入為鏡像后可以查看歷史霎奢,而export保存的文件導(dǎo)入為鏡像后不可以回滾之前的層。簡(jiǎn)而言之晤硕,save保存所有數(shù)據(jù),export導(dǎo)出當(dāng)前狀態(tài)疏橄。