本篇內(nèi)容介紹了“CentOS系統(tǒng)下docker安裝、配置及使用的方法”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)崇川,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
1 docker簡(jiǎn)介
docker 提供了一個(gè)可以運(yùn)行你的應(yīng)用程序的封套(envelope),或者說(shuō)容器。它原本是dotcloud 啟動(dòng)的一個(gè)業(yè)余項(xiàng)目,并在前些時(shí)候開(kāi)源了。它吸引了大量的關(guān)注和討論,導(dǎo)致 dotcloud 把它重命名到 dockerinc。它最初是用 go 語(yǔ)言編寫(xiě)的,它就相當(dāng)于是加在 lxc(linux containers,linux容器)上的管道,允許開(kāi)發(fā)者在更高層次的概念上工作。
docker 擴(kuò)展了 linux 容器(linux containers),或著說(shuō)lxc,通過(guò)一個(gè)高層次的 api 為進(jìn)程單獨(dú)提供了一個(gè)輕量級(jí)的虛擬環(huán)境。docker 利用了 lxc, cgroups 和 linux自己的內(nèi)核。和傳統(tǒng)的虛擬機(jī)不同的是,一個(gè) docker容器并不包含一個(gè)單獨(dú)的操作系統(tǒng),而是基于已有的基礎(chǔ)設(shè)施中操作系統(tǒng)提供的功能來(lái)運(yùn)行的。
docker類(lèi)似虛擬機(jī)的概念,但是與虛擬化技術(shù)的不同點(diǎn)在于下面幾點(diǎn):
1.虛擬化技術(shù)依賴物理cpu和內(nèi)存,是硬件級(jí)別的;而docker構(gòu)建在操作系統(tǒng)上,利用操作系統(tǒng)的containerization技術(shù),所以docker甚至可以在虛擬機(jī)上運(yùn)行。
2.虛擬化系統(tǒng)一般都是指操作系統(tǒng)鏡像,比較復(fù)雜,稱為“系統(tǒng)”;而docker開(kāi)源而且輕量,稱為“容器”,單個(gè)容器適合部署少量應(yīng)用,比如部署一個(gè)redis、一個(gè)memcached。
3.傳統(tǒng)的虛擬化技術(shù)使用快照來(lái)保存狀態(tài);而docker在保存狀態(tài)上不僅更為輕便和低成本,而且引入了類(lèi)似源代碼管理機(jī)制,將容器的快照歷史版本一一記錄,切換成本很低。
4.傳統(tǒng)的虛擬化技術(shù)在構(gòu)建系統(tǒng)的時(shí)候較為復(fù)雜,需要大量的人力;而docker可以通過(guò)dockfile來(lái)構(gòu)建整個(gè)容器,重啟和構(gòu)建速度很快。更重要的是dockfile可以手動(dòng)編寫(xiě),這樣應(yīng)用程序開(kāi)發(fā)人員可以通過(guò)發(fā)布dockfile來(lái)指導(dǎo)系統(tǒng)環(huán)境和依賴,這樣對(duì)于持續(xù)交付十分有利。
5.dockerfile可以基于已經(jīng)構(gòu)建好的容器鏡像,創(chuàng)建新容器。dockerfile可以通過(guò)社區(qū)分享和下載,有利于該技術(shù)的推廣。
docker會(huì)像一個(gè)可移植的容器引擎那樣工作。它把應(yīng)用程序及所有程序的依賴環(huán)境打包到一個(gè)虛擬容器中,這個(gè)虛擬容器可以運(yùn)行在任何一種 linux服務(wù)器上。這大大地提高了程序運(yùn)行的靈活性和可移植性,無(wú)論需不需要許可、是在公共云還是私密云、是不是裸機(jī)環(huán)境等等。
docker也是一個(gè)云計(jì)算平臺(tái),它利用linux的lxc、aufu、go語(yǔ)言、cgroup實(shí)現(xiàn)了資源的獨(dú)立,可以很輕松的實(shí)現(xiàn)文件、資源、網(wǎng)絡(luò)等隔離,其最終的目標(biāo)是實(shí)現(xiàn)類(lèi)似paas平臺(tái)的應(yīng)用隔離。
docker 由下面這些組成:
1. docker 服務(wù)器守護(hù)程序(server daemon),用于管理所有的容器。
2. docker 命令行客戶端,用于控制服務(wù)器守護(hù)程序。
3. docker 鏡像:查找和瀏覽 docker 容器鏡像。
2 docker特性
文件系統(tǒng)隔離:每個(gè)進(jìn)程容器運(yùn)行在完全獨(dú)立的根文件系統(tǒng)里。
資源隔離:可以使用cgroup為每個(gè)進(jìn)程容器分配不同的系統(tǒng)資源,例如cpu和內(nèi)存。
網(wǎng)絡(luò)隔離:每個(gè)進(jìn)程容器運(yùn)行在自己的網(wǎng)絡(luò)命名空間里,擁有自己的虛擬接口和ip地址。
寫(xiě)時(shí)復(fù)制:采用寫(xiě)時(shí)復(fù)制方式創(chuàng)建根文件系統(tǒng),這讓部署變得極其快捷,并且節(jié)省內(nèi)存和硬盤(pán)空間。
日志記錄:docker將會(huì)收集和記錄每個(gè)進(jìn)程容器的標(biāo)準(zhǔn)流(stdout/stderr/stdin),用于實(shí)時(shí)檢索或批量檢索。
變更管理:容器文件系統(tǒng)的變更可以提交到新的映像中,并可重復(fù)使用以創(chuàng)建更多的容器。無(wú)需使用模板或手動(dòng)配置。
交互式shell:docker可以分配一個(gè)虛擬終端并關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸入上,例如運(yùn)行一個(gè)一次性交互shell。
3 兩個(gè)基礎(chǔ)概念images與container
container和image在docker的世界里,image是指一個(gè)只讀的層(layer),這里的層是aufs里的概念
docker使用了一種叫aufs的文件系統(tǒng),這種文件系統(tǒng)可以讓你一層一層地疊加修改你的文件,最底下的文件系統(tǒng)是只讀的,如果需要修改文件,aufs會(huì)增加一個(gè)可寫(xiě)的層(layer),這樣有很多好處,例如不同的container可以共享底層的只讀文件系統(tǒng)(同一個(gè)kernel),使得你可以跑n多個(gè)container而不至于你的硬盤(pán)被擠爆了!這個(gè)只讀的層就是image!而如你所看到的,一個(gè)可寫(xiě)的層就是container。
那image和container的區(qū)別是什么?很簡(jiǎn)單,他們的區(qū)別僅僅是一個(gè)是只讀的層,一個(gè)是可寫(xiě)的層,你可以使用dockercommit命令,將你的container變成一個(gè)image,也就是提交你所運(yùn)行的container的修改內(nèi)容,變成一個(gè)新的只讀的image,這非常類(lèi)似于gitcommit命令。
4 docker安裝與啟動(dòng)
安裝docker
[[email protected] /]# yum -y install docker-io
更改配置文件
[[email protected] /]# vi /etc/sysconfig/docker
other-args列更改為:other_args="--exec-driver=lxc--selinux-enabled"
啟動(dòng)docker服務(wù)
[[email protected] /]# service docker start
starting cgconfig service: [ ok ]
starting docker: [ ok ]
將docker加入開(kāi)機(jī)啟動(dòng)
[[email protected] /]# chkconfig docker on
基本信息查看
dockerversion:查看docker的版本號(hào),包括客戶端、服務(wù)端、依賴的go等
[[email protected] /]# docker version
client version: 1.0.0
client api version: 1.12
go version (client): go1.2.2
git commit (client): 63fe64c/1.0.0
server version: 1.0.0
server api version: 1.12
go version (server): go1.2.2
git commit (server): 63fe64c/1.0.0
docker info:查看系統(tǒng)(docker)層面信息,包括管理的images, containers數(shù)等
[[email protected] /]# docker info
containers: 16
images: 40
storage driver: devicemapper
pool name: docker-253:0-1183580-pool
data file: /var/lib/docker/devicemapper/devicemapper/data
metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
data space used: 2180.4 mb
data space total: 102400.0 mb
metadata space used: 3.4 mb
metadata space total: 2048.0 mb
execution driver: lxc-0.9.0
kernel version: 2.6.32-431.el6.x86_64
5 鏡像的獲取與容器的使用
鏡像可以看作是包含有某些軟件的容器系統(tǒng),比如ubuntu就是一個(gè)官方的基礎(chǔ)鏡像,很多鏡像都是基于這個(gè)鏡像“衍生”,該鏡像包含基本的ubuntu系統(tǒng)。再比如,hipache是一個(gè)官方的鏡像容器,運(yùn)行后可以支持http和websocket的代理服務(wù),而這個(gè)鏡像本身又基于ubuntu。
搜索鏡像
docker search
[[email protected] /]# docker search ubuntu12.10
name description stars official automated
mirolin/ubuntu12.10 0
marcgibbons/ubuntu12.10 0
mirolin/ubuntu12.10_redis 0
chug/ubuntu12.10x32 ubuntu quantal quetzal 12.10 32bit base i... 0
chug/ubuntu12.10x64 ubuntu quantal quetzal 12.10 64bit base i... 0
下載鏡像
docker pull
[[email protected] /]# docker pull chug/ubuntu12.10x64
查看鏡像
docker images: 列出images
docker images -a :列出所有的images(包含歷史)
docker images --tree :顯示鏡像的所有層(layer)
docker rmi
[[email protected] /]# docker images
repository tag image id created virtual size
chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 mb
[[email protected] /]# docker images -a
repository tag image id created virtual size
chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 mb
[[email protected] /]# docker images --tree
warning: '--tree' is deprecated, it will be removed soon. see usage.
└─31edfed3bb88 virtual size: 175.8 mb
└─0b96c14dafcd virtual size: 270.3 mb tags: chug/ubuntu12.10x64:latest
[[email protected] /]# docker rmi
使用鏡像創(chuàng)建容器
[[email protected] /]# docker run chug/ubuntu12.10x64 /bin/echo hello world
hello world
交互式運(yùn)行
[[email protected] /]# docker run -i -t chug/ubuntu12.10x64 /bin/bash
[email protected]:/#
查看容器
docker ps :列出當(dāng)前所有正在運(yùn)行的container
docker ps -l :列出最近一次啟動(dòng)的container
docker ps -a :列出所有的container(包含歷史,即運(yùn)行過(guò)的container)
docker ps -q :列出最近一次運(yùn)行的container id
[[email protected] /]# docker ps
container id image command created status ports names
ccf3de663dc9 chug/ubuntu12.10x64:latest /bin/bash 22 hours ago up 22 hours sharp_hypatia
[[email protected] /]# docker ps -l
container id image command created status ports names
f145f184647b chug/ubuntu12.10x64:latest /bin/bash 6 seconds ago exited (0) 3 seconds ago compassionate_galileo
[[email protected] /]# docker ps -a
container id image command created status ports names
f145f184647b chug/ubuntu12.10x64:latest /bin/bash 30 seconds ago exited (0) 26 seconds ago compassionate_galileo
f4624b42fe7e chug/ubuntu12.10x64:latest /bin/bash 2 minutes ago exited (0) 2 minutes ago sharp_wilson
ccf3de663dc9 chug/ubuntu12.10x64:latest /bin/bash 22 hours ago up 22 hours sharp_hypatia
9cbaa79b9703 chug/ubuntu12.10x64:latest /bin/bash 22 hours ago exited (127) 36 minutes ago berserk_mcclintock
2161509ff65e chug/ubuntu12.10x64:latest /bin/bash 22 hours ago exited (0) 22 hours ago backstabbing_mclean
[[email protected] /]# docker ps -q
ccf3de663dc9
再次啟動(dòng)容器
docker start/stop/restart
docker start [container_id] :再次運(yùn)行某個(gè)container(包括歷史container)
docker attach [container_id]:連接一個(gè)正在運(yùn)行的container實(shí)例(即實(shí)例必須為start狀態(tài),可以多個(gè)窗口同時(shí)attach一個(gè)container實(shí)例)
docker start -i
docker run -i -t
docker run -i -t -p
注:使用start是啟動(dòng)已經(jīng)創(chuàng)建過(guò)得container,使用run則通過(guò)image開(kāi)啟一個(gè)新的container。
刪除容器
docker rm
docker rm `docker ps -a -q` :刪除所有的container
docker ps -a -q | xargs docker rm :同上,刪除所有的container
6 持久化容器與鏡像
6.1 通過(guò)容器生成新的鏡像
運(yùn)行中的鏡像稱為容器。你可以修改容器(比如刪除一個(gè)文件),但這些修改不會(huì)影響到鏡像。不過(guò),你使用docker commit
docker commit
[[email protected] /]# docker images
repository tag image id created virtual size
chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 mb
[[email protected] /]# docker commit d0fd23b8d3ac chug/ubuntu12.10x64_2
daa11948e23d970c18ad89c9e5d8972157fb6f0733f4742db04219b9bb6d063b
[[email protected] /]# docker images
repository tag image id created virtual size
chug/ubuntu12.10x64_2 latest daa11948e23d 6 seconds ago 270.3 mb
chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 mb
6.2 持久化容器
export命令用于持久化容器
docker export
6.3 持久化鏡像
save命令用于持久化鏡像
docker save 鏡像id > /tmp/save.tar
6.4 導(dǎo)入持久化container
刪除container 2161509ff65e
導(dǎo)入export.tar文件
[[email protected] /]# cat /tmp/export.tar | docker import - export:latest
af19a55ff0745fb0a68655392d6d7653c29460d22d916814208bbb9626183aaa
[[email protected] /]# docker images
repository tag image id created virtual size
export latest af19a55ff074 34 seconds ago 270.3 mb
chug/ubuntu12.10x64_2 latest daa11948e23d 20 minutes ago 270.3 mb
chug/ubuntu12.10x64 latest 0b96c14dafcd 4 months ago 270.3 mb
6.5 導(dǎo)入持久化image
刪除image daa11948e23d
導(dǎo)入save.tar文件
[[email protected] /]# docker load < /tmp/save.tar
對(duì)image打tag
[[email protected] /]# docker tag daa11948e23d load:tag
6.6export-import與save-load的區(qū)別
導(dǎo)出后再導(dǎo)入(export-import)的鏡像會(huì)丟失所有的歷史,而保存后再加載(save-load)的鏡像沒(méi)有丟失歷史和層(layer)。這意味著使用導(dǎo)出后再導(dǎo)入的方式,你將無(wú)法回滾到之前的層(layer),同時(shí),使用保存后再加載的方式持久化整個(gè)鏡像,就可以做到層回滾。(可以執(zhí)行dockertag
6.7 一些其它命令
docker logs $container_id#查看docker實(shí)例運(yùn)行日志,確保正常運(yùn)行
docker inspect $container_id #docker inspect
docker build
docker build -t repo[:tag] 同上,可以指定repo和可選的tag
docker build - <
docker port
7 一些使用技巧
7.1 docker文件存放目錄
docker實(shí)際上把所有東西都放到/var/lib/docker路徑下了。
[[email protected] docker]# ls -f
containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/
containers目錄當(dāng)然就是存放容器(container)了,graph目錄存放鏡像,文件層(filesystemlayer)存放在graph/imageid/layer路徑下,這樣我們就可以看看文件層里到底有哪些東西,利用這種層級(jí)結(jié)構(gòu)可以清楚的看到文件層是如何一層一層疊加起來(lái)的。
7.2 查看root密碼
docker容器啟動(dòng)時(shí)的root用戶的密碼是隨機(jī)分配的。所以,通過(guò)這種方式就可以得到容器的root用戶的密碼了。
docker logs 5817938c3f6e 2>&1 | grep 'user: ' | tail -n1
“CentOS系統(tǒng)下docker安裝、配置及使用的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!