日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装

發(fā)布時(shí)間:2023/11/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/qq1010885678/article/details/46290985

Container技術(shù):

傳統(tǒng)的虛擬化技術(shù):
通過(guò)對(duì)硬件層模擬,從而實(shí)現(xiàn)了能夠在一套硬件上面運(yùn)行多個(gè)操作系統(tǒng),因?yàn)橥ㄟ^(guò)硬件虛擬化,使得操作系統(tǒng)認(rèn)為在它之下就是硬件層

但是實(shí)際情況是這樣的:虛擬機(jī)中的OS對(duì)硬件發(fā)出的請(qǐng)求都交給了虛擬的硬件,OS認(rèn)為指令已經(jīng)下達(dá)了,只要等待硬件返回信息即可,其實(shí)OS下面的那層“硬件”是要將指令發(fā)送給真正的硬件層來(lái)執(zhí)行的

系統(tǒng)級(jí)別的虛擬化技術(shù):
不同于傳統(tǒng)的硬件虛擬化,它不需要模擬硬件層
多個(gè)虛擬機(jī)之間共享Host OS的Kernel內(nèi)核,所以這些虛擬機(jī)是不可以像傳統(tǒng)虛擬化技術(shù)那種裝各種各樣的OS,但是它同樣可以讓跑在里面的應(yīng)用認(rèn)為它就是處在一個(gè)獨(dú)立的OS之中,每個(gè)虛擬機(jī)就像一個(gè)容器,里面可以裝各種各樣的應(yīng)用,而不同容器中的應(yīng)用總是認(rèn)為他們是在一個(gè)獨(dú)立在OS環(huán)境下的,所以又稱為Container技術(shù)

兩種虛擬化技術(shù)各有優(yōu)劣,對(duì)比如下圖:

下面是一張Container技術(shù)的結(jié)構(gòu)圖:

從圖中可以看出,綠藍(lán)紅三種顏色的層組合起來(lái)就是一臺(tái)Host主機(jī),在Kernel層之上通過(guò)Container技術(shù)的三個(gè)要點(diǎn):隔離(namespace),限制(cgroup),記錄(chroot)
來(lái)虛擬出一個(gè)個(gè)容器,并管理他們

隔離:
通過(guò)namespace機(jī)制來(lái)避免一些系統(tǒng)級(jí)的沖突。
因?yàn)槊總€(gè)容器都可以當(dāng)做一個(gè)獨(dú)立的OS,那么他們就擁有自己的pid進(jìn)程號(hào)等信息,如果這些東西和Host中的相沖突怎么辦?畢竟容器不是自己在虛擬化的環(huán)境中獨(dú)立安裝一個(gè)OS,而是依賴于Host的OS
這時(shí)候就可以通過(guò)namespace來(lái)避免這些沖突,每個(gè)容器擁有自己的namespace來(lái)管理各自的系統(tǒng)信息

限制:
在Host看來(lái),每個(gè)Container都只是一個(gè)普通的進(jìn)程(當(dāng)時(shí)在Container中的應(yīng)用看來(lái),這些Container都是一個(gè)OS),那么怎么來(lái)限制這些進(jìn)程的CPU使用,時(shí)間片等資源呢?
cgroup是linux內(nèi)核提供的限制,記錄和隔離進(jìn)程組所用的資源

記錄:
上面說(shuō)過(guò),每個(gè)Container都可以當(dāng)做一個(gè)獨(dú)立的OS,既然它是一個(gè)OS那么肯定有自己的文件系統(tǒng),那么問(wèn)題又來(lái)了,每個(gè)Container都有自己的FS,Host也有自己的FS,這么多獨(dú)立的FS要怎么管理?
chroot隔離根文件系統(tǒng),怎么個(gè)說(shuō)法呢?例如Host的根目錄下有a,b目錄,并且分別被兩個(gè)Container當(dāng)做其根目錄。在Host角度來(lái)看,ab只是根目錄下的兩個(gè)普通文件夾而已,而對(duì)于Container a來(lái)說(shuō)/a就是其根目錄;對(duì)于Container b來(lái)說(shuō)/b就是其根目錄

Docker:

什么是Docker?
Docker是一種Container技術(shù)的實(shí)現(xiàn),上面說(shuō)到的Container技術(shù)也同樣可以用來(lái)描述Docker

想一想,我們?cè)陂_(kāi)發(fā)一個(gè)應(yīng)用的時(shí)候
我們?cè)谧约旱腜C上完成了開(kāi)發(fā)工作,并將項(xiàng)目交給測(cè)試人員進(jìn)行測(cè)試,但是萬(wàn)一測(cè)試的PC上的環(huán)境和開(kāi)發(fā)的環(huán)境不一樣,可能會(huì)出現(xiàn)各種各樣的問(wèn)題,同理應(yīng)用發(fā)布到服務(wù)器上也是一樣的
應(yīng)用每到一臺(tái)新的PC中時(shí)就要求該P(yáng)C要裝上它需要的所有東西,還要注意版本是不是一致的

而Docker可以幫我們解決這些問(wèn)題

Docker可以創(chuàng)建一個(gè)個(gè)Container,前面說(shuō)過(guò),每個(gè)Container都可以當(dāng)做一個(gè)獨(dú)立的OS,那么我們就可以在這個(gè)Container之中進(jìn)行應(yīng)用的開(kāi)發(fā)。開(kāi)發(fā)完成之后,我們可以將這個(gè)Container打包成一個(gè)Image(Image和Container的管理可以理解成:類和實(shí)例),可以將其看做是一個(gè)集裝箱,里面裝著應(yīng)用和應(yīng)用的各種環(huán)境
在測(cè)試的PC上,通過(guò)Docker將這個(gè)集裝箱(Image)拿過(guò)來(lái)通過(guò)其創(chuàng)建一個(gè)Container就可以直接進(jìn)行使用和測(cè)試,這個(gè)Container和開(kāi)發(fā)時(shí)使用的Container的環(huán)境是一致的(通過(guò)一個(gè)類實(shí)例化出來(lái)的各個(gè)對(duì)象)

Docker翻譯為搬運(yùn)工,它所做的事情也是搬運(yùn)工一樣的

我們可以將應(yīng)用的各個(gè)組件,環(huán)境等都裝進(jìn)一個(gè)集裝箱中,通過(guò)Docker運(yùn)送到各個(gè)“碼頭上”

總結(jié)出一個(gè)Docker的最最簡(jiǎn)單的介紹:方便打包發(fā)布應(yīng)用到容器中

我們來(lái)看看Docker的層次圖:

最底層的lxc,aufs都收kernel內(nèi)核中運(yùn)行的

lxc:Linux Container,是Linux上的一種實(shí)現(xiàn)Container虛擬化的技術(shù),早期的Docker就基于lxc實(shí)現(xiàn)的,最新的版本中已經(jīng)用libcontainer代替了
aufs:Advanced multi layer Unification FileSystem,翻譯成中文就是高級(jí)的,分層的,聯(lián)合的文件系統(tǒng),它最總要的內(nèi)容就是可以將兩個(gè)目錄合并在一起,并可以設(shè)置操作權(quán)限(read-only/read-write)。Docker使用aufs來(lái)實(shí)現(xiàn)分層的文件管理

倒數(shù)第二層的Debian和BusyBox都是在Kernel之上的Image,Image就是一個(gè)鏡像,可以通過(guò)這個(gè)鏡像來(lái)創(chuàng)建多個(gè)Container,Image在aufs中是只讀的

中間層就是通過(guò)Image創(chuàng)建出來(lái)的Container,Container在aufs中是可讀可寫的,通過(guò)一個(gè)只讀的Image創(chuàng)建出一個(gè)Container,可以對(duì)這個(gè)Container進(jìn)行修改(如上圖中添加了一個(gè)emacs),然后在打包成一個(gè)不可讀的Image,而這個(gè)Image又可以創(chuàng)建出基于它的Container

通過(guò)上面的描述不難得出一個(gè)結(jié)論:Docker中的Image是層層關(guān)聯(lián)的,每個(gè)Image都有一個(gè)Parent Image(只有一個(gè)除外,那就是Base Image,即最基本的鏡像,其他的Image都是在Base Image基礎(chǔ)上得到的),使用一個(gè)Image時(shí),Docker會(huì)找到其Parent Image直到Base Image

Docker在啟動(dòng)Container的時(shí)候, aufs會(huì)將下層的文件系統(tǒng)設(shè)置成read-only,然后將Container的read-write掛載到下層的文件系統(tǒng)之上,構(gòu)成一個(gè)完整的文件系統(tǒng)

在Container中所做的修改不會(huì)影響到其所屬的Image(因?yàn)樗侵蛔x的,通過(guò)COW技術(shù)將要修改的文件復(fù)制到read-write層并改寫),如果沒(méi)有保存這個(gè)Container(將其打包成一個(gè)新的Image),那么當(dāng)這個(gè)Container生命周期結(jié)束之后,所做的修改都會(huì)消失

這種機(jī)制的好處就是,每個(gè)階段的Image都可以進(jìn)行大量的重用,在創(chuàng)建Container的時(shí)候只需要加入不同的部分即可,而不用每次都將全部所需加載一遍

Docker Hub:

類似于Github的服務(wù),用來(lái)分發(fā)Images,里面有大量的Image提供Docker用戶下載,基于這些Image,可以快速的搭建出我們自己所需要的Image
同時(shí)我們也可以將自做的Image push到Docker Hub中提供別人下載

Docker安裝:

由于是基于Kernel內(nèi)核的,所以Docker只能跑在Linux上,而且是必須是64位的
在windows和mac系統(tǒng)上的Docker的宿主機(jī)并不是windows或者mac,而是借助一個(gè)linux虛擬機(jī)作為其宿主機(jī)

在這里使用VM創(chuàng)建的一個(gè)Ubuntu來(lái)作為宿主機(jī),在Ubuntu中安裝很簡(jiǎn)單
步驟如下:

sudo apt-get updatesudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raringsudo rebootsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"sudo apt-get updatesudo apt-get install lxc-docker

期間可能因?yàn)榫W(wǎng)絡(luò)的原因會(huì)卡很久,完成之后輸入

docker

如果可以識(shí)別命令就是安裝成功了

另外,執(zhí)行docker命令需要root權(quán)限,所以除了使用root用戶之外,每條命令都要加上sudo
或者也可以通過(guò)將當(dāng)前的用戶加入docker用戶組(Docker提供的)就可以隨時(shí)執(zhí)行docker命令

sudo gpasswd -a ${USER} dockersudo service docker restart#如果沒(méi)有效果執(zhí)行下列命令 newgrp - docker #切換當(dāng)前會(huì)話到新 group 因?yàn)?groups 命令獲取到的是緩存的組信息,剛添加的組信息未能生效,所以 docker images 執(zhí)行時(shí)同樣有錯(cuò)。

總結(jié)

以上是生活随笔為你收集整理的Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。