Docker是在Linux容器里面運(yùn)行的開源工具,是一種輕量級(jí)的虛擬機(jī)。其設(shè)計(jì)宗旨:Build,Ship and Run Any App,Anywhere,即通過對(duì)應(yīng)組件的封裝、發(fā)布、部署、運(yùn)行等生命周期的管理,達(dá)到組件級(jí)別的“一次封裝,到處運(yùn)行”的目的。這里的組件,既可以是一個(gè)應(yīng)用,也可以是一套服務(wù),甚至是一個(gè)完整的操作系統(tǒng)。
Docker的三大核心概念:鏡像、容器、倉庫,安裝Docker以及圍繞鏡像和容器的具體操作。
創(chuàng)新互聯(lián)是專業(yè)的富順網(wǎng)站建設(shè)公司,富順接單;提供網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行富順網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
1、Docker容器很快,啟動(dòng)和停止可以在秒級(jí)實(shí)現(xiàn),比傳統(tǒng)虛擬機(jī)要快很多。
2、Docker核心解決的問題是利用容器來時(shí)實(shí)現(xiàn)類似VM的功能,從而以更加節(jié)省的硬件資源提供給用戶更多的計(jì)算資源,所以Docker容器除了運(yùn)行其中的應(yīng)用之外,基本不消耗額外的系統(tǒng)資源,從而在保證性能的同時(shí),減小了系統(tǒng)開銷,使得在一臺(tái)主機(jī)上同時(shí)運(yùn)行數(shù)千個(gè)Docker容器成為可能。
3、Docker操作方便,還可以通過Dockerfile配置文件支持靈活的自動(dòng)化創(chuàng)建和部署。
Docke之所以擁有眾多優(yōu)勢(shì),跟操作系統(tǒng)虛擬化自身的特點(diǎn)是分不開的。傳統(tǒng)虛擬機(jī)需要擁有額外的虛擬機(jī)管理程序。
1、鏡像(Image)
Docker的鏡像是創(chuàng)建容器的基礎(chǔ),類似虛擬機(jī)的快照,可以理解為是一個(gè)面向Docker容器引擎的只讀模板,比如:一個(gè)鏡像可以是一個(gè)完整的CentOS操作系統(tǒng)環(huán)境,成為一個(gè)CentOS鏡像;可以是一個(gè)安裝了MySQL的應(yīng)用程序,稱之為一個(gè)MySQL鏡像等等。
Docker提供了簡(jiǎn)單的機(jī)制來創(chuàng)建和更新現(xiàn)有的鏡像,用戶也可以從網(wǎng)上下載已經(jīng)做好的應(yīng)用鏡像來直接使用。
2、容器(container)
Docker的容器是從鏡像創(chuàng)建的運(yùn)行實(shí)列,它可以被啟動(dòng)、停止和刪除。所創(chuàng)建的每一個(gè)容器都是相互隔離、互補(bǔ)可見的,可以保證平臺(tái)的安全性。還可以把容器看作是一個(gè)簡(jiǎn)易版的Linux環(huán)境,Docker利用容器來運(yùn)行和隔離應(yīng)用。
3、倉庫(Repository)
Docker倉庫是用來集中保存鏡像的地方,當(dāng)創(chuàng)建了自己的鏡像之后,可以使用push命令將它上傳到公共倉庫(Pulic)或者私有倉庫(Private),這樣一來當(dāng)下次要在另一臺(tái)機(jī)器上使用這個(gè)鏡像的時(shí)候,只需要從倉庫上pull下來就可以了。
倉庫注冊(cè)服務(wù)器(Registry)是存放倉庫的地方,其中包含了多個(gè)倉庫,每個(gè)倉庫幾種存放某一類鏡像,并且使用不同的標(biāo)簽來區(qū)分它們。目前最大的公共倉庫是DockerHUb,其中存放了數(shù)量龐大的鏡像供用戶下載使用。
4、Docker的安裝vi /etc/yum.repos.d/CentOS-Base.repo //配置yum源
在末行添加以下內(nèi)容:
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
yum install -y docker-engine //安裝Docker引擎
systemctl enable docker //開機(jī)自啟
systemctl start docker //啟動(dòng)docker
Docker運(yùn)行容器前需要本地存在對(duì)應(yīng)的鏡像,如果不存在本地鏡像Docker就會(huì)嘗試從默認(rèn)鏡像倉庫https://hub.docker.com 下載,這是由Docker官方維護(hù)的一個(gè)公共倉庫,可以滿足用戶的絕大部分需求。用戶也可以通過配置來使用自定義的鏡像倉庫。
1、搜索鏡像(默認(rèn)從Docker Hub查詢)
獲取鏡像的三種方式:
1)下載鏡像(默認(rèn)從Docker Hub下載)
2)把容器轉(zhuǎn)換為鏡像
3)制作鏡像(通過dockerfile生成鏡像)docker search httpd //查找所有httpd相關(guān)的鏡像
2、下載鏡像(默認(rèn)從Docker Hub下載)docker pull httpd //拉取apache鏡像
3、查看鏡像docker images //查看本地鏡像列表
各個(gè)選項(xiàng)說明:
REPOSITORY:表示鏡像的倉庫源
TAG:表示鏡像的標(biāo)簽
IMAGE ID:表示鏡像的ID
CREATED:表示鏡像創(chuàng)建時(shí)間
SIZE:表示鏡像大小
docker tag httpd apache:test //給鏡像添加新的標(biāo)簽
4、刪除鏡像
docker rmi 倉庫名:標(biāo)簽
docker rmi -f 鏡像ID //永久刪除鏡像
docker rmi -f $(docker images | grep "none" | awk "{print \$3}") //刪除沒有使用的鏡像
5、導(dǎo)出和導(dǎo)入鏡像
docker save -o 導(dǎo)出文件名 導(dǎo)出的鏡像
docker save -o httpd01 httpd //導(dǎo)出鏡像
docker load <導(dǎo)出的文件
注意:導(dǎo)入之前要將原先的httpd鏡像刪除,否則不執(zhí)行導(dǎo)入操作
6、上傳鏡像
docker push 鏡像名稱 //上傳鏡像到共有倉庫
容器時(shí)Docker的另一個(gè)核心概念。簡(jiǎn)單說,容器時(shí)鏡像的一個(gè)運(yùn)行實(shí)例,是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用以及他們所需的運(yùn)行環(huán)境,包括文件系統(tǒng)、系統(tǒng)類庫、shell環(huán)境等。鏡像是只讀模板,而容器會(huì)給這個(gè)只讀模板一個(gè)額外的可寫層。
1、容器的創(chuàng)建和啟動(dòng)docker create -it httpd /bin/bash //創(chuàng)容器,默認(rèn)時(shí)沒有運(yùn)行的
-i:讓容器的輸入保持打開
-t:讓Docker分配一個(gè)偽終端
docker ps //查看正在運(yùn)行的容器
docker ps -a //查看所有容器
docker start 容器ID //啟動(dòng)容器
docker stop 容器ID //停止容器
創(chuàng)建并啟動(dòng)容器用docker run命令,等與先執(zhí)行docker create命令,在執(zhí)行docker start命令。
docker run來創(chuàng)建容器時(shí)過程如下:
1)首先檢查本地是否存在指定的鏡像,當(dāng)鏡像不存在時(shí),會(huì)從公共倉庫下載
2)再利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器
3)接著分配一個(gè)文件系統(tǒng)給容器,在只讀的鏡像層外面掛載一層可讀寫層
4)從宿主主機(jī)配置的網(wǎng)橋結(jié)構(gòu)中橋接一個(gè)虛擬接口到容器中
5)分配一個(gè)地址池中的IP地址給容器
6)執(zhí)行用戶指定的應(yīng)用程序
7)指定完畢后容器被終止運(yùn)行
docker run 鏡像名 /bin/bash -c ls //創(chuàng)建并啟動(dòng)容器指定一條shell命令
-c:指定的命令docker ps -a //查看centos狀態(tài),發(fā)現(xiàn)執(zhí)行完shell命令之后停止了
docker run -d centos /bin/bash -c "while true;do echo hello;done" //創(chuàng)建并啟動(dòng)容器,在后臺(tái)持續(xù)運(yùn)行
-d:讓容器以守護(hù)形態(tài)在后臺(tái)運(yùn)行,但是注意的是后臺(tái)必須要有正運(yùn)行的程序,否則容器會(huì)停止。
2、容器的進(jìn)入docker exec -it 容器ID/名稱 /bin/bash //進(jìn)入容器
exit或ctrl+d退出偽終端
3、容器導(dǎo)出和導(dǎo)入docker export 容器ID/名稱 > 文件名 //容器的導(dǎo)出
cat 文件名 | docker import - 生成的鏡像名:標(biāo)簽 //將容器文件導(dǎo)入成鏡像
4、容器的刪除
docker ps -a
docker rm 容器ID //刪除容器,無法刪除正在運(yùn)行的容器
docker rm -f d4e863a654aa //強(qiáng)制刪除運(yùn)行中的容器,不建議。
docker container prune //刪除所有停止的容器
docker rm $(docker ps -qf status=exited) //刪除指定狀態(tài)的容器
docker login //登錄共有倉庫,通過注冊(cè)賬號(hào)登錄
1、限制CPU的使用速率
在Docker中可以通過--cpu-quota選項(xiàng)來限制CPU的使用使用率,CPU的百分比是以1000為單位的。docker run --cpu-quota 20000 鏡像名 //CPU的使用率限定為20%
2、多任務(wù)按比例分享CPU
當(dāng)由多個(gè)容器任務(wù)運(yùn)行時(shí),很難計(jì)算CPU的使用率,為了使容器合理使用CPU資源,可以通過--cpu-shares選項(xiàng)設(shè)置CPU按比例共享CPU資源,這種方式還可以實(shí)現(xiàn)CPU使用率的動(dòng)態(tài)調(diào)整。
以下實(shí)現(xiàn)三個(gè)容器A、B、C,占用CPU資源的比列為1:1:2
docker run --cpu-shares 1024 鏡像名 //對(duì)應(yīng)容器A
docker run --cpu-shares 1024 鏡像名 //對(duì)應(yīng)容器B
docker run --cpu-shares 2048 鏡像名 //對(duì)應(yīng)容器C
3、限制CPU內(nèi)核使用
在Docker中可以使用--cpuset-cpus選項(xiàng)來使某些程序獨(dú)享CPU內(nèi)核,以便提高其處理速度,對(duì)應(yīng)的Cgroup配置文件為/sys/fs/cgroup/cpuset/docker/容器編號(hào)/cpuset.cpus。選項(xiàng)后直接跟參數(shù)0、1、2......表示第1個(gè)內(nèi)核、第2個(gè)內(nèi)核、第3個(gè)內(nèi)核,與/proc/cpuinfo中的CPU編號(hào)(processer)相同。
如果服務(wù)器有16個(gè)核心,那么CPU編號(hào)為0~15,使容器綁定第1~4個(gè)內(nèi)核使用。docker run --cpuset-cpus 0,1,2,3 鏡像名
4、對(duì)內(nèi)存使用的限制
在Docker中可以通過docker run -m命令來限制容器的內(nèi)存使用量,相應(yīng)的Cgroup配置文件為/sys/fs/cgroup/memory/memory.limit_in_bytes。但是需要注意:一旦容器Cgroup使用的內(nèi)存超過了限制的容量,Linux內(nèi)核將會(huì)嘗試收回這些內(nèi)存,如果仍舊沒法控制內(nèi)存使用在限制范圍之內(nèi),進(jìn)程就會(huì)殺死。docker run -m 512m 鏡像名 //限制容器的內(nèi)存為512M
5、對(duì)blkio的限制
如果時(shí)在一臺(tái)服務(wù)器上進(jìn)行容器的混合部署,那么會(huì)出現(xiàn)同時(shí)有幾個(gè)程序?qū)懘疟P數(shù)據(jù)的情況,這時(shí)可以通過--device-write-iops選項(xiàng)來限制寫入的iops,相應(yīng)的還有--device-read-bps選項(xiàng)可以限制讀取的iops。但是這種方法只能針對(duì)blkio限制的設(shè)備(device),而不是分區(qū)。相應(yīng)Cgroup寫配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkio.throttle.write_iops_device。docker run --device-write-bps /dev/sda1:1mb 鏡像名 //限制/dev/sdb1的寫入iops為1MB
文章標(biāo)題:Docker架構(gòu)、鏡像和容器
當(dāng)前網(wǎng)址:http://chinadenli.net/article40/pijoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、微信小程序、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)