docker超詳細基礎(chǔ)教程_第1頁
docker超詳細基礎(chǔ)教程_第2頁
docker超詳細基礎(chǔ)教程_第3頁
docker超詳細基礎(chǔ)教程_第4頁
docker超詳細基礎(chǔ)教程_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

docker超詳細基礎(chǔ)教程 目錄Docker的介紹Docker的思想集裝箱標準化運輸方式存儲方式API接口隔離Docker的組成Docker的運行機制拉取鏡像的執(zhí)行流程啟動容器的執(zhí)行流程Docker運行鏡像的流程Docker常用命令鏡像的操作命令容器的操作命令數(shù)據(jù)卷的操作命令Docker自定義鏡像Docker鏡像安裝實踐安裝MySQL數(shù)據(jù)庫拉取MySQL鏡像然后慢慢等待拉取下載完成,因為是從官網(wǎng)拉取,所以有點慢.查看鏡像運行鏡像登錄MySQL服務(wù)進入MySQL容器登錄MySQL操作MySQL服務(wù)停止服務(wù)啟動服務(wù)查看MySQL啟動時日志設(shè)置MySQL開機自啟動安裝Redis數(shù)據(jù)庫拉取鏡像文件準備配置文件創(chuàng)建Redis實例并啟動訪問Redis服務(wù)進入容器檢查Redis版本登錄Redis安裝Ngnix代理拉取鏡像創(chuàng)建數(shù)據(jù)卷查看目錄啟動Nginx服務(wù)訪問Nginx服務(wù)安裝Nacos組件拉取鏡像執(zhí)行nacos的sql腳本創(chuàng)建并啟動nacos容器訪問nacos服務(wù)Docker的介紹 2010年幾個年輕人成立了一個做PAAS平臺的公司dotCloud.起初公司發(fā)展的不錯,不但拿到過一些融資,還獲得了美國著名孵化器YCombinator的支持,后來微軟谷歌亞馬遜這樣的大廠商也紛紛加入PAAS平臺,競爭十分激烈,dotCloud舉步維艱.2013年可能是公司發(fā)展的不是很好,工程師又不想自己的努力付之東流,于是他們決定將他們的核心技術(shù)開源.這項技術(shù)就是docker.當(dāng)時docker的功能就是將linux容器中的應(yīng)用代碼打包,可以輕松的在服務(wù)器之間進行遷移.無心插柳柳成蔭,docker技術(shù)風(fēng)靡全球,于是dotCloud公司改名為dockerInc,并全面投入到docker的開發(fā)之中.2014.6Docker發(fā)布了第一個版本Docker1.02014.7獲得C輪融資$4000W2015.4獲得D輪融資$9500W至今已經(jīng)發(fā)布到dockerdocker是一個用來裝應(yīng)用的容器,就像杯子可以裝水,筆筒可以放筆,書包可以放書,可以把helloword放在docker中,可以把網(wǎng)站放入docker中,可以把任何想得到的程序放在docker中.Docker的思想集裝箱沒有集裝箱之前運輸貨物,東西零散容易丟失,有了集裝箱之后貨物不容易丟失,我們可以把貨物想象成程序,目前我們要把程序部署到一臺新的機器上,可能會啟動不起來,比如少一些配置文件什么的或者少了什么數(shù)據(jù),有了docker的集裝箱可以保證我們的程序不管運行在哪不會缺東西.標準化運輸方式docker運輸東西有一個超級碼頭,任何地方需要貨物都由鯨魚先送到超級碼頭,然后再由鯨魚從超級碼頭把貨物送到目的地去.對應(yīng)的技術(shù)來說,比如我們要把臺式機的應(yīng)用部署到筆記本上,我們可能選擇用QQ發(fā)過去或者用U盤拷過去,docker就標準化了這個過程,我們只需在臺式機上執(zhí)行一個docker命令,把鯨魚派過來,把程序送到超級碼頭去,再在筆記本上執(zhí)行一個docker命令,然后由鯨魚把程序從超級碼頭送到筆記本上去.存儲方式當(dāng)我們把程序存儲到筆記本上時,我們需要一個目錄,且我們要記住這個目錄,因為下次我們可能還要修改,有了docker之后我們就不用記住了程序在哪里了,我們使用的時候只需要一條命令就行了.API接口docker提供了一系列restapi的接口,包含了對docker也就是對我們的應(yīng)用的一個啟動停止查看刪除等等,如當(dāng)我們要啟動tomcat時我們要執(zhí)行startup命令,當(dāng)我們要停止時要執(zhí)行shutdown命令,如果不是tomcat,我們可能還需要一些別的命令.有了docker我們記docker的命令就可以對其進行操作.隔離我們在使用虛擬機時有自己的cpu,硬盤,內(nèi)存,完全感覺不到外面主機的存在,docker也差不多,不過它更輕量,我們創(chuàng)建虛擬機可能要幾分鐘,但是docker只需要一秒.最底層的技術(shù)時linux一種內(nèi)核的限制機制,叫做LXC,LXC是一種輕量級的容器虛擬化技.最大效率的隔離了進程和資源.通過cgroup,namespace等限制,隔離進程組所使用的物理資源,比如CPU,MEMORY等等,這個機制在7,8年前已經(jīng)加入到linux內(nèi)核了,直到2013年docker出世的時候才火起來,大家可能奇怪為什么這么好的技術(shù)埋沒這么多年都沒人發(fā)現(xiàn)呢?英雄造時勢,時勢造英雄,如果沒有云計算,敏捷開發(fā),高頻度的彈性伸縮需求,沒有IT行業(yè)這么多年長足的發(fā)展,也就沒有docker.Docker的組成鏡像就像是集裝箱,倉庫就是超級碼頭,容器就是我們運行程序的地方.docker運行程序的過程就是去倉庫把鏡像拉到本地,然后用一條命令把鏡像運行起來變成容器.build:構(gòu)建,就是構(gòu)建鏡像.ship:運輸,運輸鏡像,從倉庫和主機運輸.run:運行的鏡像就是一個容器.build,ship,run和鏡像,倉庫,容器是一一對應(yīng)的.鏡像 鏡像的英文名交image.前面我們講到了集裝箱,鯨魚拖著的所有集裝箱就是一個鏡像.從本質(zhì)上來說鏡像就是一系列文件,可以包括我們應(yīng)用程序的文件,也可以包括我們應(yīng)用的運行環(huán)境的文件,既然是文件,那么是以什么樣的格式在本地保存的呢?說到存儲格式,就要提到linux的一個存儲技術(shù),叫做聯(lián)合文件系統(tǒng),是一種分層的文件系統(tǒng),可以將不同的目錄掛到同一個虛擬文件系統(tǒng)下.比如test1下有三個文件夾,test2下有兩個文件夾,還有一個readme文件.聯(lián)合文件系統(tǒng)就是可以在一個文件夾(test)中看到多個文件夾(test1,test2)中的內(nèi)容.通過這種方式可以實現(xiàn)文件的分層,test1可以把它看作第一層,test2可以把它看作第二層,每一層有每一層自己的文件,docker就是利用了這種分層的概念實現(xiàn)了鏡像存儲.下圖就是鏡像的存儲格式,這張圖是分層的,最下面一層,上面也是一層層的好像集裝箱羅列在一起.這就是鏡像最直觀的存儲方式.下面是操作系統(tǒng)的引導(dǎo),上面是linux操作系統(tǒng),再上面是一些相關(guān)的軟件,如果是我們自己的程序,就可以是tomcat,jdk,再往上是應(yīng)用代碼,每一層是我們自己都可以控制得,最上面一層先忽略不看,因為這是和容器有關(guān)的.注意一點,docker鏡像系統(tǒng)的每一層都是只讀的,然后把每一層加載完成之后這些文件都會被看成是同一個目錄,相當(dāng)于只有一個文件系統(tǒng).docker的這種文件系統(tǒng)被稱之為鏡像.容器 為了便于理解,大家可以把容器想象成虛擬機,每個虛擬機都有自己的文件系統(tǒng),可以把圖1整個一部分看成是文件系統(tǒng),與虛擬機系統(tǒng)的區(qū)別是這里面的文件系統(tǒng)是一層一層的,并且最下面的n層都是只讀的,只有上面一層是可寫的.為什么要有可寫的這層呢?大家的程序運行起來,勢必會要寫一些日志,寫一些文件,或者對系統(tǒng)的某一些文件做一些修改,所以容器在最上面一層創(chuàng)建了可讀可寫的文件系統(tǒng).在程序的運行過程中,如果要寫鏡像文件時,因為鏡像的每一層都是只讀的,它會把文件的每一層拷到文件的最上層,然后再對它進行修改,修改之后,當(dāng)我們的應(yīng)用讀一個文件時會從頂層進行查找,如果沒有才會找下一層.由于容器的最上一層是可以修改的,鏡像是不能修改的,這樣就能保證鏡像可以生成多個容器獨立運行,沒有任何干擾.倉庫我們的鏡像是要在其它機器上運行,如何進行傳輸呢?這就用到了docker倉庫,我們要先把我們的鏡像傳到docker倉庫中,再由目的地把docker倉庫拉過去,這就完成了這樣的一次傳輸過程.誰提供了這樣的倉庫呢?docker自己提供了,,但是非常慢,為了解決這個問題,國內(nèi)很多公司也在做自己的倉庫.比較知名的是由網(wǎng)易蜂巢提供的/hub#/m/home/Docker的運行機制拉取鏡像的執(zhí)行流程dockerpull執(zhí)行過程:客戶端將指令發(fā)送給dockerdaemondockerdaemon先檢查本地images中有沒有相關(guān)的鏡像如果本地沒有相關(guān)的鏡像,則向鏡像服務(wù)器請求,將遠程鏡像下載到本地啟動容器的執(zhí)行流程dockerrun執(zhí)行過程:檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載利用鏡像創(chuàng)建并啟動一個容器分配一個文件系(簡版linux系統(tǒng)),并在只讀的鏡像層外面掛載一層可讀寫層從宿主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去從地址池配置一個ip地址給容器執(zhí)行用戶指定的應(yīng)用程序Docker運行鏡像的流程DockerHost是我們的docker宿主機(就是安裝了docker的操作系統(tǒng))Registry是docker拉取鏡像的遠程倉庫,提供大量的鏡像供下載,下載完成之后保存在Images中DockerDaemon是docker的服務(wù)線程,處理Docker客戶端命令。Images是Docker本地的鏡像倉庫,可以通過dockerimages查看鏡像文件。Docker常用命令 鏡像的操作命令 1.拉取鏡像到本地pull鏡像名稱[:tag]舉個例子tomcatdockerdockerpulldaocloud.io/library/tomcat:8.5.15-jre82.查看全部本地的鏡像dockerdockerimages3.刪除本地鏡像dockerdockerrmi鏡像的標識4.鏡像的導(dǎo)入導(dǎo)出(不規(guī)范)dockerdockersave-o導(dǎo)出的路徑鏡像iddockerdockerload-i鏡像文件修改鏡像名稱dockerdockertag鏡像id新鏡像名稱:版本容器的操作命令 1.運行容器##簡單操作dockerdockerrun鏡像的標識|鏡像名稱[tag]##常用的參數(shù)dockerdockerrun-d-p宿主機端口:容器端口--name容器名稱鏡像的標識|鏡像名稱[tag]##-p:宿主機端口:容器端口:為了映射當(dāng)前Linux的端口和容器的端口--name容器名稱指定容器的名稱2.查看正在運行的容器dockerdockerps[OPTIONS]-q:只查看容器的標識指定返回值的模板文件-n:列出最近創(chuàng)建的n個容器--no-trunc:不截斷輸出-s:-s:顯示總的文件大小3.查看容器的日志dockerdockerlogs-f容器id-f:-f:可以滾動查看日志的最后幾行4.進入到容器內(nèi)部dockerdockerexec-it容器idbash##5.刪除容器(刪除容器前,需要先停止容器)dockerdockerstop容器iddockerdockerstop$(dockerps-qa)停止全部容器dockerdockerrm鏡像id刪除指定容器dockerdockerrm$(dockerps-qa)刪除全部容器刪除全部容器dockerdockerstart容器id數(shù)據(jù)卷的操作命令 數(shù)據(jù)卷介紹:將宿主機的一個目錄映射到容器的一個目錄中。數(shù)據(jù)卷作用:可以在宿主機中操作目錄中的內(nèi)容,那么容器內(nèi)部映射的文件,也會跟著一起改變。1.創(chuàng)建數(shù)據(jù)卷dockerdockervolumecreate數(shù)據(jù)卷名稱##創(chuàng)建數(shù)據(jù)卷之后默認會存放在一個目錄下/var/lib/docker/volumes/數(shù)據(jù)卷名稱/_data#2.查看數(shù)據(jù)卷的詳細信息卷的詳細信息dockerdockervolumeinspect數(shù)據(jù)卷名稱3.查看全部數(shù)據(jù)卷dockerdockervolumels#4.刪除數(shù)據(jù)卷dockerdockervolumerm數(shù)據(jù)卷名稱5.應(yīng)用數(shù)據(jù)卷##當(dāng)你映射數(shù)據(jù)卷時,如果數(shù)據(jù)卷不存在。Docker會幫你自動創(chuàng)建dockerdockerrun-v數(shù)據(jù)卷名稱:id##直接指定一個路徑作為數(shù)據(jù)卷的存放位置。這個路徑下是空的。dockerdockerrun-v路徑:容器內(nèi)部的路徑鏡像idDocker自定義鏡像 中央倉庫上的鏡像,也是Docker的用戶自己上傳過去的。所以我們完全可以自己創(chuàng)建一個鏡像.##1.創(chuàng)建一個Dockerfile文件,并且指定自定義鏡像信息。##Dockerfile文件中常用的內(nèi)容from:from:指定當(dāng)前自定義鏡像依賴的環(huán)境copy:copy:將相對路徑下的內(nèi)容復(fù)制到自定義鏡像中workdir:workdir:聲明鏡像的默認工作目錄cmd:cmd:需要執(zhí)行的命令(在workdir下執(zhí)行的,cmd可以寫多個,只以最后一個為準)##舉個例子,自定義一個tomcat鏡像,并且將ssm.war部署到tomcat中fromfromdaocloud.io/library/tomcat:8.5.15-jre8copycopyssm.war/usr/local/tomcat/webappsDocker鏡像安裝實踐 安裝MySQL數(shù)據(jù)庫 拉取MySQL鏡像一種方法是在上搜索mysql鏡像,拉取指定版本的mysql,也可以指定拉取版本,如:dockerdockerpullmysql:8.0.23然后慢慢等待拉取下載完成,因為是從官網(wǎng)拉取,所以有點慢.另一種方法是:事先獲取到了mysql的壓縮文件如mysql.tar.gz,然后將它拖拉到相應(yīng)目錄下(我的目錄是/root/setup/images/),然后然后進入該目錄下使用如下命令也可以很快達到效果.我使用的是這種方法.dockerdockerload-imysql.tar.gz查看鏡像然后可以查看一下mysql鏡像,使用如下命令:dockerdockerimages可以看到鏡像已經(jīng)存在了.運行鏡像啟動運行mysql鏡像(dockerrun用于啟動一個容器),命令如下: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ù) 進入MySQL容器進入容器的命令如下:dockerdockerexec-itmysqlbash#mysql是容器名登錄MySQL登錄mysql(密碼是root),前提是進入了mysql容器.mysqlmysql-uroot-proot操作MySQL服務(wù) 停止服務(wù)停止mysql服務(wù)命令:dockerdockerstopmysql啟動服務(wù)啟動mysql服務(wù)命令:dockerdockerstartmysql查看MySQL啟動時日志假如希望查看mysql啟動時的日志,可以執(zhí)行下面這個指令。dockerdockercontainerlogsmysql設(shè)置MySQL開機自啟動如果需要設(shè)置mysql開機自動啟動,可使用如下命令:dockerdockerupdatemysql--restart=always安裝Redis數(shù)據(jù)庫 拉取鏡像文件同拉取mysql數(shù)據(jù)庫步驟一樣,我這兒是在conf目錄下拉取的,其實在哪兒無所謂,不用在意和我的不一樣.準備配置文件需先準備一個目錄,配置文件就放在這個目錄下.創(chuàng)建目錄如下:mkdirmkdir-p/usr/local/docker/redis01/conf然后在該目錄下創(chuàng)建redis.conf配置文件,這個配置文件必須要創(chuàng)建,否在我們進行目錄掛載時默認生成的是一個目錄.touchtouch/usr/local/docker/redis01/conf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論