




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
docker超詳細(xì)基礎(chǔ)教程 目錄Docker的介紹Docker的思想集裝箱標(biāo)準(zhǔn)化運(yùn)輸方式存儲(chǔ)方式API接口隔離Docker的組成Docker的運(yùn)行機(jī)制拉取鏡像的執(zhí)行流程啟動(dòng)容器的執(zhí)行流程Docker運(yùn)行鏡像的流程Docker常用命令鏡像的操作命令容器的操作命令數(shù)據(jù)卷的操作命令Docker自定義鏡像Docker鏡像安裝實(shí)踐安裝MySQL數(shù)據(jù)庫(kù)拉取MySQL鏡像然后慢慢等待拉取下載完成,因?yàn)槭菑墓倬W(wǎng)拉取,所以有點(diǎn)慢.查看鏡像運(yùn)行鏡像登錄MySQL服務(wù)進(jìn)入MySQL容器登錄MySQL操作MySQL服務(wù)停止服務(wù)啟動(dòng)服務(wù)查看MySQL啟動(dòng)時(shí)日志設(shè)置MySQL開機(jī)自啟動(dòng)安裝Redis數(shù)據(jù)庫(kù)拉取鏡像文件準(zhǔn)備配置文件創(chuàng)建Redis實(shí)例并啟動(dòng)訪問Redis服務(wù)進(jìn)入容器檢查Redis版本登錄Redis安裝Ngnix代理拉取鏡像創(chuàng)建數(shù)據(jù)卷查看目錄啟動(dòng)Nginx服務(wù)訪問Nginx服務(wù)安裝Nacos組件拉取鏡像執(zhí)行nacos的sql腳本創(chuàng)建并啟動(dòng)nacos容器訪問nacos服務(wù)Docker的介紹 2010年幾個(gè)年輕人成立了一個(gè)做PAAS平臺(tái)的公司dotCloud.起初公司發(fā)展的不錯(cuò),不但拿到過一些融資,還獲得了美國(guó)著名孵化器YCombinator的支持,后來(lái)微軟谷歌亞馬遜這樣的大廠商也紛紛加入PAAS平臺(tái),競(jìng)爭(zhēng)十分激烈,dotCloud舉步維艱.2013年可能是公司發(fā)展的不是很好,工程師又不想自己的努力付之東流,于是他們決定將他們的核心技術(shù)開源.這項(xiàng)技術(shù)就是docker.當(dāng)時(shí)docker的功能就是將linux容器中的應(yīng)用代碼打包,可以輕松的在服務(wù)器之間進(jìn)行遷移.無(wú)心插柳柳成蔭,docker技術(shù)風(fēng)靡全球,于是dotCloud公司改名為dockerInc,并全面投入到docker的開發(fā)之中.2014.6Docker發(fā)布了第一個(gè)版本Docker1.02014.7獲得C輪融資$4000W2015.4獲得D輪融資$9500W至今已經(jīng)發(fā)布到dockerdocker是一個(gè)用來(lái)裝應(yīng)用的容器,就像杯子可以裝水,筆筒可以放筆,書包可以放書,可以把helloword放在docker中,可以把網(wǎng)站放入docker中,可以把任何想得到的程序放在docker中.Docker的思想集裝箱沒有集裝箱之前運(yùn)輸貨物,東西零散容易丟失,有了集裝箱之后貨物不容易丟失,我們可以把貨物想象成程序,目前我們要把程序部署到一臺(tái)新的機(jī)器上,可能會(huì)啟動(dòng)不起來(lái),比如少一些配置文件什么的或者少了什么數(shù)據(jù),有了docker的集裝箱可以保證我們的程序不管運(yùn)行在哪不會(huì)缺東西.標(biāo)準(zhǔn)化運(yùn)輸方式docker運(yùn)輸東西有一個(gè)超級(jí)碼頭,任何地方需要貨物都由鯨魚先送到超級(jí)碼頭,然后再由鯨魚從超級(jí)碼頭把貨物送到目的地去.對(duì)應(yīng)的技術(shù)來(lái)說,比如我們要把臺(tái)式機(jī)的應(yīng)用部署到筆記本上,我們可能選擇用QQ發(fā)過去或者用U盤拷過去,docker就標(biāo)準(zhǔn)化了這個(gè)過程,我們只需在臺(tái)式機(jī)上執(zhí)行一個(gè)docker命令,把鯨魚派過來(lái),把程序送到超級(jí)碼頭去,再在筆記本上執(zhí)行一個(gè)docker命令,然后由鯨魚把程序從超級(jí)碼頭送到筆記本上去.存儲(chǔ)方式當(dāng)我們把程序存儲(chǔ)到筆記本上時(shí),我們需要一個(gè)目錄,且我們要記住這個(gè)目錄,因?yàn)橄麓挝覀兛赡苓€要修改,有了docker之后我們就不用記住了程序在哪里了,我們使用的時(shí)候只需要一條命令就行了.API接口docker提供了一系列restapi的接口,包含了對(duì)docker也就是對(duì)我們的應(yīng)用的一個(gè)啟動(dòng)停止查看刪除等等,如當(dāng)我們要啟動(dòng)tomcat時(shí)我們要執(zhí)行startup命令,當(dāng)我們要停止時(shí)要執(zhí)行shutdown命令,如果不是tomcat,我們可能還需要一些別的命令.有了docker我們記docker的命令就可以對(duì)其進(jìn)行操作.隔離我們?cè)谑褂锰摂M機(jī)時(shí)有自己的cpu,硬盤,內(nèi)存,完全感覺不到外面主機(jī)的存在,docker也差不多,不過它更輕量,我們創(chuàng)建虛擬機(jī)可能要幾分鐘,但是docker只需要一秒.最底層的技術(shù)時(shí)linux一種內(nèi)核的限制機(jī)制,叫做LXC,LXC是一種輕量級(jí)的容器虛擬化技.最大效率的隔離了進(jìn)程和資源.通過cgroup,namespace等限制,隔離進(jìn)程組所使用的物理資源,比如CPU,MEMORY等等,這個(gè)機(jī)制在7,8年前已經(jīng)加入到linux內(nèi)核了,直到2013年docker出世的時(shí)候才火起來(lái),大家可能奇怪為什么這么好的技術(shù)埋沒這么多年都沒人發(fā)現(xiàn)呢?英雄造時(shí)勢(shì),時(shí)勢(shì)造英雄,如果沒有云計(jì)算,敏捷開發(fā),高頻度的彈性伸縮需求,沒有IT行業(yè)這么多年長(zhǎng)足的發(fā)展,也就沒有docker.Docker的組成鏡像就像是集裝箱,倉(cāng)庫(kù)就是超級(jí)碼頭,容器就是我們運(yùn)行程序的地方.docker運(yùn)行程序的過程就是去倉(cāng)庫(kù)把鏡像拉到本地,然后用一條命令把鏡像運(yùn)行起來(lái)變成容器.build:構(gòu)建,就是構(gòu)建鏡像.ship:運(yùn)輸,運(yùn)輸鏡像,從倉(cāng)庫(kù)和主機(jī)運(yùn)輸.run:運(yùn)行的鏡像就是一個(gè)容器.build,ship,run和鏡像,倉(cāng)庫(kù),容器是一一對(duì)應(yīng)的.鏡像 鏡像的英文名交image.前面我們講到了集裝箱,鯨魚拖著的所有集裝箱就是一個(gè)鏡像.從本質(zhì)上來(lái)說鏡像就是一系列文件,可以包括我們應(yīng)用程序的文件,也可以包括我們應(yīng)用的運(yùn)行環(huán)境的文件,既然是文件,那么是以什么樣的格式在本地保存的呢?說到存儲(chǔ)格式,就要提到linux的一個(gè)存儲(chǔ)技術(shù),叫做聯(lián)合文件系統(tǒng),是一種分層的文件系統(tǒng),可以將不同的目錄掛到同一個(gè)虛擬文件系統(tǒng)下.比如test1下有三個(gè)文件夾,test2下有兩個(gè)文件夾,還有一個(gè)readme文件.聯(lián)合文件系統(tǒng)就是可以在一個(gè)文件夾(test)中看到多個(gè)文件夾(test1,test2)中的內(nèi)容.通過這種方式可以實(shí)現(xiàn)文件的分層,test1可以把它看作第一層,test2可以把它看作第二層,每一層有每一層自己的文件,docker就是利用了這種分層的概念實(shí)現(xiàn)了鏡像存儲(chǔ).下圖就是鏡像的存儲(chǔ)格式,這張圖是分層的,最下面一層,上面也是一層層的好像集裝箱羅列在一起.這就是鏡像最直觀的存儲(chǔ)方式.下面是操作系統(tǒng)的引導(dǎo),上面是linux操作系統(tǒng),再上面是一些相關(guān)的軟件,如果是我們自己的程序,就可以是tomcat,jdk,再往上是應(yīng)用代碼,每一層是我們自己都可以控制得,最上面一層先忽略不看,因?yàn)檫@是和容器有關(guān)的.注意一點(diǎn),docker鏡像系統(tǒng)的每一層都是只讀的,然后把每一層加載完成之后這些文件都會(huì)被看成是同一個(gè)目錄,相當(dāng)于只有一個(gè)文件系統(tǒng).docker的這種文件系統(tǒng)被稱之為鏡像.容器 為了便于理解,大家可以把容器想象成虛擬機(jī),每個(gè)虛擬機(jī)都有自己的文件系統(tǒng),可以把圖1整個(gè)一部分看成是文件系統(tǒng),與虛擬機(jī)系統(tǒng)的區(qū)別是這里面的文件系統(tǒng)是一層一層的,并且最下面的n層都是只讀的,只有上面一層是可寫的.為什么要有可寫的這層呢?大家的程序運(yùn)行起來(lái),勢(shì)必會(huì)要寫一些日志,寫一些文件,或者對(duì)系統(tǒng)的某一些文件做一些修改,所以容器在最上面一層創(chuàng)建了可讀可寫的文件系統(tǒng).在程序的運(yùn)行過程中,如果要寫鏡像文件時(shí),因?yàn)殓R像的每一層都是只讀的,它會(huì)把文件的每一層拷到文件的最上層,然后再對(duì)它進(jìn)行修改,修改之后,當(dāng)我們的應(yīng)用讀一個(gè)文件時(shí)會(huì)從頂層進(jìn)行查找,如果沒有才會(huì)找下一層.由于容器的最上一層是可以修改的,鏡像是不能修改的,這樣就能保證鏡像可以生成多個(gè)容器獨(dú)立運(yùn)行,沒有任何干擾.倉(cāng)庫(kù)我們的鏡像是要在其它機(jī)器上運(yùn)行,如何進(jìn)行傳輸呢?這就用到了docker倉(cāng)庫(kù),我們要先把我們的鏡像傳到docker倉(cāng)庫(kù)中,再由目的地把docker倉(cāng)庫(kù)拉過去,這就完成了這樣的一次傳輸過程.誰(shuí)提供了這樣的倉(cāng)庫(kù)呢?docker自己提供了,,但是非常慢,為了解決這個(gè)問題,國(guó)內(nèi)很多公司也在做自己的倉(cāng)庫(kù).比較知名的是由網(wǎng)易蜂巢提供的/hub#/m/home/Docker的運(yùn)行機(jī)制拉取鏡像的執(zhí)行流程dockerpull執(zhí)行過程:客戶端將指令發(fā)送給dockerdaemondockerdaemon先檢查本地images中有沒有相關(guān)的鏡像如果本地沒有相關(guān)的鏡像,則向鏡像服務(wù)器請(qǐng)求,將遠(yuǎn)程鏡像下載到本地啟動(dòng)容器的執(zhí)行流程dockerrun執(zhí)行過程:檢查本地是否存在指定的鏡像,不存在就從公有倉(cāng)庫(kù)下載利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器分配一個(gè)文件系(簡(jiǎn)版linux系統(tǒng)),并在只讀的鏡像層外面掛載一層可讀寫層從宿主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去從地址池配置一個(gè)ip地址給容器執(zhí)行用戶指定的應(yīng)用程序Docker運(yùn)行鏡像的流程DockerHost是我們的docker宿主機(jī)(就是安裝了docker的操作系統(tǒng))Registry是docker拉取鏡像的遠(yuǎn)程倉(cāng)庫(kù),提供大量的鏡像供下載,下載完成之后保存在Images中DockerDaemon是docker的服務(wù)線程,處理Docker客戶端命令。Images是Docker本地的鏡像倉(cāng)庫(kù),可以通過dockerimages查看鏡像文件。Docker常用命令 鏡像的操作命令 1.拉取鏡像到本地pull鏡像名稱[:tag]舉個(gè)例子tomcatdockerdockerpulldaocloud.io/library/tomcat:8.5.15-jre82.查看全部本地的鏡像dockerdockerimages3.刪除本地鏡像dockerdockerrmi鏡像的標(biāo)識(shí)4.鏡像的導(dǎo)入導(dǎo)出(不規(guī)范)dockerdockersave-o導(dǎo)出的路徑鏡像iddockerdockerload-i鏡像文件修改鏡像名稱dockerdockertag鏡像id新鏡像名稱:版本容器的操作命令 1.運(yùn)行容器##簡(jiǎn)單操作dockerdockerrun鏡像的標(biāo)識(shí)|鏡像名稱[tag]##常用的參數(shù)dockerdockerrun-d-p宿主機(jī)端口:容器端口--name容器名稱鏡像的標(biāo)識(shí)|鏡像名稱[tag]##-p:宿主機(jī)端口:容器端口:為了映射當(dāng)前Linux的端口和容器的端口--name容器名稱指定容器的名稱2.查看正在運(yùn)行的容器dockerdockerps[OPTIONS]-q:只查看容器的標(biāo)識(shí)指定返回值的模板文件-n:列出最近創(chuàng)建的n個(gè)容器--no-trunc:不截?cái)噍敵?s:-s:顯示總的文件大小3.查看容器的日志dockerdockerlogs-f容器id-f:-f:可以滾動(dòng)查看日志的最后幾行4.進(jìn)入到容器內(nèi)部dockerdockerexec-it容器idbash##5.刪除容器(刪除容器前,需要先停止容器)dockerdockerstop容器iddockerdockerstop$(dockerps-qa)停止全部容器dockerdockerrm鏡像id刪除指定容器dockerdockerrm$(dockerps-qa)刪除全部容器刪除全部容器dockerdockerstart容器id數(shù)據(jù)卷的操作命令 數(shù)據(jù)卷介紹:將宿主機(jī)的一個(gè)目錄映射到容器的一個(gè)目錄中。數(shù)據(jù)卷作用:可以在宿主機(jī)中操作目錄中的內(nèi)容,那么容器內(nèi)部映射的文件,也會(huì)跟著一起改變。1.創(chuàng)建數(shù)據(jù)卷dockerdockervolumecreate數(shù)據(jù)卷名稱##創(chuàng)建數(shù)據(jù)卷之后默認(rèn)會(huì)存放在一個(gè)目錄下/var/lib/docker/volumes/數(shù)據(jù)卷名稱/_data#2.查看數(shù)據(jù)卷的詳細(xì)信息卷的詳細(xì)信息dockerdockervolumeinspect數(shù)據(jù)卷名稱3.查看全部數(shù)據(jù)卷dockerdockervolumels#4.刪除數(shù)據(jù)卷dockerdockervolumerm數(shù)據(jù)卷名稱5.應(yīng)用數(shù)據(jù)卷##當(dāng)你映射數(shù)據(jù)卷時(shí),如果數(shù)據(jù)卷不存在。Docker會(huì)幫你自動(dòng)創(chuàng)建dockerdockerrun-v數(shù)據(jù)卷名稱:id##直接指定一個(gè)路徑作為數(shù)據(jù)卷的存放位置。這個(gè)路徑下是空的。dockerdockerrun-v路徑:容器內(nèi)部的路徑鏡像idDocker自定義鏡像 中央倉(cāng)庫(kù)上的鏡像,也是Docker的用戶自己上傳過去的。所以我們完全可以自己創(chuàng)建一個(gè)鏡像.##1.創(chuàng)建一個(gè)Dockerfile文件,并且指定自定義鏡像信息。##Dockerfile文件中常用的內(nèi)容from:from:指定當(dāng)前自定義鏡像依賴的環(huán)境copy:copy:將相對(duì)路徑下的內(nèi)容復(fù)制到自定義鏡像中workdir:workdir:聲明鏡像的默認(rèn)工作目錄cmd:cmd:需要執(zhí)行的命令(在workdir下執(zhí)行的,cmd可以寫多個(gè),只以最后一個(gè)為準(zhǔn))##舉個(gè)例子,自定義一個(gè)tomcat鏡像,并且將ssm.war部署到tomcat中fromfromdaocloud.io/library/tomcat:8.5.15-jre8copycopyssm.war/usr/local/tomcat/webappsDocker鏡像安裝實(shí)踐 安裝MySQL數(shù)據(jù)庫(kù) 拉取MySQL鏡像一種方法是在上搜索mysql鏡像,拉取指定版本的mysql,也可以指定拉取版本,如:dockerdockerpullmysql:8.0.23然后慢慢等待拉取下載完成,因?yàn)槭菑墓倬W(wǎng)拉取,所以有點(diǎn)慢.另一種方法是:事先獲取到了mysql的壓縮文件如mysql.tar.gz,然后將它拖拉到相應(yīng)目錄下(我的目錄是/root/setup/images/),然后然后進(jìn)入該目錄下使用如下命令也可以很快達(dá)到效果.我使用的是這種方法.dockerdockerload-imysql.tar.gz查看鏡像然后可以查看一下mysql鏡像,使用如下命令:dockerdockerimages可以看到鏡像已經(jīng)存在了.運(yùn)行鏡像啟動(dòng)運(yùn)行mysql鏡像(dockerrun用于啟動(dòng)一個(gè)容器),命令如下:sudosudodockerrun-p3306:3306--namemysql\-v-v/usr/local/docker/mysql/mysql-files:/var/lib/mysql-files\-v-v/usr/local/docker/mysql/conf:/etc/mysql\-v-v/usr/local/docker/mysql/logs:/var/log/mysql\-v-v/usr/local/docker/mysql/data:/var/lib/mysql\\-d-dmysql:8.0.23假如安裝過程中失敗了,則可通過dockerps-a查看以前的容器,假如已存在,則通過dockerrm鏡像id刪除再重新安裝即可。登錄MySQL服務(wù) 進(jìn)入MySQL容器進(jìn)入容器的命令如下:dockerdockerexec-itmysqlbash#mysql是容器名登錄MySQL登錄mysql(密碼是root),前提是進(jìn)入了mysql容器.mysqlmysql-uroot-proot操作MySQL服務(wù) 停止服務(wù)停止mysql服務(wù)命令:dockerdockerstopmysql啟動(dòng)服務(wù)啟動(dòng)mysql服務(wù)命令:dockerdockerstartmysql查看MySQL啟動(dòng)時(shí)日志假如希望查看mysql啟動(dòng)時(shí)的日志,可以執(zhí)行下面這個(gè)指令。dockerdockercontainerlogsmysql設(shè)置MySQL開機(jī)自啟動(dòng)如果需要設(shè)置mysql開機(jī)自動(dòng)啟動(dòng),可使用如下命令:dockerdockerupdatemysql--restart=always安裝Redis數(shù)據(jù)庫(kù) 拉取鏡像文件同拉取mysql數(shù)據(jù)庫(kù)步驟一樣,我這兒是在conf目錄下拉取的,其實(shí)在哪兒無(wú)所謂,不用在意和我的不一樣.準(zhǔn)備配置文件需先準(zhǔn)備一個(gè)目錄,配置文件就放在這個(gè)目錄下.創(chuàng)建目錄如下:mkdirmkdir-p/usr/local/docker/redis01/conf然后在該目錄下創(chuàng)建redis.conf配置文件,這個(gè)配置文件必須要?jiǎng)?chuàng)建,否在我們進(jìn)行目錄掛載時(shí)默認(rèn)生成的是一個(gè)目錄.touchtouch/usr/local/docker/redis01/conf
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村集體土地經(jīng)營(yíng)權(quán)轉(zhuǎn)讓協(xié)議2篇
- 2024版存量房屋買賣合同示范文本
- 2025版金融產(chǎn)品第三方信用擔(dān)保服務(wù)協(xié)議3篇
- 2025年度消防器材銷售與租賃補(bǔ)充協(xié)議范本(市場(chǎng)推廣)3篇
- 2025年度消防器材研發(fā)生產(chǎn)與銷售一體化合同2篇
- 二零二五年度出租車司機(jī)合同簽訂與解除流程規(guī)范合同3篇
- 2024版戰(zhàn)略合作框架協(xié)議內(nèi)容
- 2024版勞動(dòng)合同主體變更詳解3篇
- 二零二五年度凈水器電商平臺(tái)銷售合作協(xié)議3篇
- 2025版數(shù)據(jù)中心設(shè)備采購(gòu)與維護(hù)服務(wù)協(xié)議3篇
- 新產(chǎn)品試制流程管理辦法
- 王牌電話交換機(jī)說明書
- 列管式換熱器-換熱面積計(jì)算
- 10個(gè)地基基礎(chǔ)工程質(zhì)量通病及防治措施
- 25m預(yù)應(yīng)力混凝土簡(jiǎn)支T梁橋設(shè)計(jì)(共30頁(yè))
- 籃球校本課程教案
- 高一學(xué)生文理分班意向表
- 高等傳熱學(xué)部分答案
- 地球物理學(xué)進(jìn)展投稿須知
- 機(jī)床精度檢驗(yàn)標(biāo)準(zhǔn) VDI3441 a ISO230-2
- 解析電力施工項(xiàng)目的信息化管理
評(píng)論
0/150
提交評(píng)論