




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
docker超詳細基礎教程 目錄Docker的介紹Docker的思想集裝箱標準化運輸方式存儲方式API接口隔離Docker的組成Docker的運行機制拉取鏡像的執行流程啟動容器的執行流程Docker運行鏡像的流程Docker常用命令鏡像的操作命令容器的操作命令數據卷的操作命令Docker自定義鏡像Docker鏡像安裝實踐安裝MySQL數據庫拉取MySQL鏡像然后慢慢等待拉取下載完成,因為是從官網拉取,所以有點慢.查看鏡像運行鏡像登錄MySQL服務進入MySQL容器登錄MySQL操作MySQL服務停止服務啟動服務查看MySQL啟動時日志設置MySQL開機自啟動安裝Redis數據庫拉取鏡像文件準備配置文件創建Redis實例并啟動訪問Redis服務進入容器檢查Redis版本登錄Redis安裝Ngnix代理拉取鏡像創建數據卷查看目錄啟動Nginx服務訪問Nginx服務安裝Nacos組件拉取鏡像執行nacos的sql腳本創建并啟動nacos容器訪問nacos服務Docker的介紹 2010年幾個年輕人成立了一個做PAAS平臺的公司dotCloud.起初公司發展的不錯,不但拿到過一些融資,還獲得了美國著名孵化器YCombinator的支持,后來微軟谷歌亞馬遜這樣的大廠商也紛紛加入PAAS平臺,競爭十分激烈,dotCloud舉步維艱.2013年可能是公司發展的不是很好,工程師又不想自己的努力付之東流,于是他們決定將他們的核心技術開源.這項技術就是docker.當時docker的功能就是將linux容器中的應用代碼打包,可以輕松的在服務器之間進行遷移.無心插柳柳成蔭,docker技術風靡全球,于是dotCloud公司改名為dockerInc,并全面投入到docker的開發之中.2014.6Docker發布了第一個版本Docker1.02014.7獲得C輪融資$4000W2015.4獲得D輪融資$9500W至今已經發布到dockerdocker是一個用來裝應用的容器,就像杯子可以裝水,筆筒可以放筆,書包可以放書,可以把helloword放在docker中,可以把網站放入docker中,可以把任何想得到的程序放在docker中.Docker的思想集裝箱沒有集裝箱之前運輸貨物,東西零散容易丟失,有了集裝箱之后貨物不容易丟失,我們可以把貨物想象成程序,目前我們要把程序部署到一臺新的機器上,可能會啟動不起來,比如少一些配置文件什么的或者少了什么數據,有了docker的集裝箱可以保證我們的程序不管運行在哪不會缺東西.標準化運輸方式docker運輸東西有一個超級碼頭,任何地方需要貨物都由鯨魚先送到超級碼頭,然后再由鯨魚從超級碼頭把貨物送到目的地去.對應的技術來說,比如我們要把臺式機的應用部署到筆記本上,我們可能選擇用QQ發過去或者用U盤拷過去,docker就標準化了這個過程,我們只需在臺式機上執行一個docker命令,把鯨魚派過來,把程序送到超級碼頭去,再在筆記本上執行一個docker命令,然后由鯨魚把程序從超級碼頭送到筆記本上去.存儲方式當我們把程序存儲到筆記本上時,我們需要一個目錄,且我們要記住這個目錄,因為下次我們可能還要修改,有了docker之后我們就不用記住了程序在哪里了,我們使用的時候只需要一條命令就行了.API接口docker提供了一系列restapi的接口,包含了對docker也就是對我們的應用的一個啟動停止查看刪除等等,如當我們要啟動tomcat時我們要執行startup命令,當我們要停止時要執行shutdown命令,如果不是tomcat,我們可能還需要一些別的命令.有了docker我們記docker的命令就可以對其進行操作.隔離我們在使用虛擬機時有自己的cpu,硬盤,內存,完全感覺不到外面主機的存在,docker也差不多,不過它更輕量,我們創建虛擬機可能要幾分鐘,但是docker只需要一秒.最底層的技術時linux一種內核的限制機制,叫做LXC,LXC是一種輕量級的容器虛擬化技.最大效率的隔離了進程和資源.通過cgroup,namespace等限制,隔離進程組所使用的物理資源,比如CPU,MEMORY等等,這個機制在7,8年前已經加入到linux內核了,直到2013年docker出世的時候才火起來,大家可能奇怪為什么這么好的技術埋沒這么多年都沒人發現呢?英雄造時勢,時勢造英雄,如果沒有云計算,敏捷開發,高頻度的彈性伸縮需求,沒有IT行業這么多年長足的發展,也就沒有docker.Docker的組成鏡像就像是集裝箱,倉庫就是超級碼頭,容器就是我們運行程序的地方.docker運行程序的過程就是去倉庫把鏡像拉到本地,然后用一條命令把鏡像運行起來變成容器.build:構建,就是構建鏡像.ship:運輸,運輸鏡像,從倉庫和主機運輸.run:運行的鏡像就是一個容器.build,ship,run和鏡像,倉庫,容器是一一對應的.鏡像 鏡像的英文名交image.前面我們講到了集裝箱,鯨魚拖著的所有集裝箱就是一個鏡像.從本質上來說鏡像就是一系列文件,可以包括我們應用程序的文件,也可以包括我們應用的運行環境的文件,既然是文件,那么是以什么樣的格式在本地保存的呢?說到存儲格式,就要提到linux的一個存儲技術,叫做聯合文件系統,是一種分層的文件系統,可以將不同的目錄掛到同一個虛擬文件系統下.比如test1下有三個文件夾,test2下有兩個文件夾,還有一個readme文件.聯合文件系統就是可以在一個文件夾(test)中看到多個文件夾(test1,test2)中的內容.通過這種方式可以實現文件的分層,test1可以把它看作第一層,test2可以把它看作第二層,每一層有每一層自己的文件,docker就是利用了這種分層的概念實現了鏡像存儲.下圖就是鏡像的存儲格式,這張圖是分層的,最下面一層,上面也是一層層的好像集裝箱羅列在一起.這就是鏡像最直觀的存儲方式.下面是操作系統的引導,上面是linux操作系統,再上面是一些相關的軟件,如果是我們自己的程序,就可以是tomcat,jdk,再往上是應用代碼,每一層是我們自己都可以控制得,最上面一層先忽略不看,因為這是和容器有關的.注意一點,docker鏡像系統的每一層都是只讀的,然后把每一層加載完成之后這些文件都會被看成是同一個目錄,相當于只有一個文件系統.docker的這種文件系統被稱之為鏡像.容器 為了便于理解,大家可以把容器想象成虛擬機,每個虛擬機都有自己的文件系統,可以把圖1整個一部分看成是文件系統,與虛擬機系統的區別是這里面的文件系統是一層一層的,并且最下面的n層都是只讀的,只有上面一層是可寫的.為什么要有可寫的這層呢?大家的程序運行起來,勢必會要寫一些日志,寫一些文件,或者對系統的某一些文件做一些修改,所以容器在最上面一層創建了可讀可寫的文件系統.在程序的運行過程中,如果要寫鏡像文件時,因為鏡像的每一層都是只讀的,它會把文件的每一層拷到文件的最上層,然后再對它進行修改,修改之后,當我們的應用讀一個文件時會從頂層進行查找,如果沒有才會找下一層.由于容器的最上一層是可以修改的,鏡像是不能修改的,這樣就能保證鏡像可以生成多個容器獨立運行,沒有任何干擾.倉庫我們的鏡像是要在其它機器上運行,如何進行傳輸呢?這就用到了docker倉庫,我們要先把我們的鏡像傳到docker倉庫中,再由目的地把docker倉庫拉過去,這就完成了這樣的一次傳輸過程.誰提供了這樣的倉庫呢?docker自己提供了,,但是非常慢,為了解決這個問題,國內很多公司也在做自己的倉庫.比較知名的是由網易蜂巢提供的/hub#/m/home/Docker的運行機制拉取鏡像的執行流程dockerpull執行過程:客戶端將指令發送給dockerdaemondockerdaemon先檢查本地images中有沒有相關的鏡像如果本地沒有相關的鏡像,則向鏡像服務器請求,將遠程鏡像下載到本地啟動容器的執行流程dockerrun執行過程:檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載利用鏡像創建并啟動一個容器分配一個文件系(簡版linux系統),并在只讀的鏡像層外面掛載一層可讀寫層從宿主機配置的網橋接口中橋接一個虛擬接口到容器中去從地址池配置一個ip地址給容器執行用戶指定的應用程序Docker運行鏡像的流程DockerHost是我們的docker宿主機(就是安裝了docker的操作系統)Registry是docker拉取鏡像的遠程倉庫,提供大量的鏡像供下載,下載完成之后保存在Images中DockerDaemon是docker的服務線程,處理Docker客戶端命令。Images是Docker本地的鏡像倉庫,可以通過dockerimages查看鏡像文件。Docker常用命令 鏡像的操作命令 1.拉取鏡像到本地pull鏡像名稱[:tag]舉個例子tomcatdockerdockerpulldaocloud.io/library/tomcat:8.5.15-jre82.查看全部本地的鏡像dockerdockerimages3.刪除本地鏡像dockerdockerrmi鏡像的標識4.鏡像的導入導出(不規范)dockerdockersave-o導出的路徑鏡像iddockerdockerload-i鏡像文件修改鏡像名稱dockerdockertag鏡像id新鏡像名稱:版本容器的操作命令 1.運行容器##簡單操作dockerdockerrun鏡像的標識|鏡像名稱[tag]##常用的參數dockerdockerrun-d-p宿主機端口:容器端口--name容器名稱鏡像的標識|鏡像名稱[tag]##-p:宿主機端口:容器端口:為了映射當前Linux的端口和容器的端口--name容器名稱指定容器的名稱2.查看正在運行的容器dockerdockerps[OPTIONS]-q:只查看容器的標識指定返回值的模板文件-n:列出最近創建的n個容器--no-trunc:不截斷輸出-s:-s:顯示總的文件大小3.查看容器的日志dockerdockerlogs-f容器id-f:-f:可以滾動查看日志的最后幾行4.進入到容器內部dockerdockerexec-it容器idbash##5.刪除容器(刪除容器前,需要先停止容器)dockerdockerstop容器iddockerdockerstop$(dockerps-qa)停止全部容器dockerdockerrm鏡像id刪除指定容器dockerdockerrm$(dockerps-qa)刪除全部容器刪除全部容器dockerdockerstart容器id數據卷的操作命令 數據卷介紹:將宿主機的一個目錄映射到容器的一個目錄中。數據卷作用:可以在宿主機中操作目錄中的內容,那么容器內部映射的文件,也會跟著一起改變。1.創建數據卷dockerdockervolumecreate數據卷名稱##創建數據卷之后默認會存放在一個目錄下/var/lib/docker/volumes/數據卷名稱/_data#2.查看數據卷的詳細信息卷的詳細信息dockerdockervolumeinspect數據卷名稱3.查看全部數據卷dockerdockervolumels#4.刪除數據卷dockerdockervolumerm數據卷名稱5.應用數據卷##當你映射數據卷時,如果數據卷不存在。Docker會幫你自動創建dockerdockerrun-v數據卷名稱:id##直接指定一個路徑作為數據卷的存放位置。這個路徑下是空的。dockerdockerrun-v路徑:容器內部的路徑鏡像idDocker自定義鏡像 中央倉庫上的鏡像,也是Docker的用戶自己上傳過去的。所以我們完全可以自己創建一個鏡像.##1.創建一個Dockerfile文件,并且指定自定義鏡像信息。##Dockerfile文件中常用的內容from:from:指定當前自定義鏡像依賴的環境copy:copy:將相對路徑下的內容復制到自定義鏡像中workdir:workdir:聲明鏡像的默認工作目錄cmd:cmd:需要執行的命令(在workdir下執行的,cmd可以寫多個,只以最后一個為準)##舉個例子,自定義一個tomcat鏡像,并且將ssm.war部署到tomcat中fromfromdaocloud.io/library/tomcat:8.5.15-jre8copycopyssm.war/usr/local/tomcat/webappsDocker鏡像安裝實踐 安裝MySQL數據庫 拉取MySQL鏡像一種方法是在上搜索mysql鏡像,拉取指定版本的mysql,也可以指定拉取版本,如:dockerdockerpullmysql:8.0.23然后慢慢等待拉取下載完成,因為是從官網拉取,所以有點慢.另一種方法是:事先獲取到了mysql的壓縮文件如mysql.tar.gz,然后將它拖拉到相應目錄下(我的目錄是/root/setup/images/),然后然后進入該目錄下使用如下命令也可以很快達到效果.我使用的是這種方法.dockerdockerload-imysql.tar.gz查看鏡像然后可以查看一下mysql鏡像,使用如下命令:dockerdockerimages可以看到鏡像已經存在了.運行鏡像啟動運行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服務 進入MySQL容器進入容器的命令如下:dockerdockerexec-itmysqlbash#mysql是容器名登錄MySQL登錄mysql(密碼是root),前提是進入了mysql容器.mysqlmysql-uroot-proot操作MySQL服務 停止服務停止mysql服務命令:dockerdockerstopmysql啟動服務啟動mysql服務命令:dockerdockerstartmysql查看MySQL啟動時日志假如希望查看mysql啟動時的日志,可以執行下面這個指令。dockerdockercontainerlogsmysql設置MySQL開機自啟動如果需要設置mysql開機自動啟動,可使用如下命令:dockerdockerupdatemysql--restart=always安裝Redis數據庫 拉取鏡像文件同拉取mysql數據庫步驟一樣,我這兒是在conf目錄下拉取的,其實在哪兒無所謂,不用在意和我的不一樣.準備配置文件需先準備一個目錄,配置文件就放在這個目錄下.創建目錄如下:mkdirmkdir-p/usr/local/docker/redis01/conf然后在該目錄下創建redis.conf配置文件,這個配置文件必須要創建,否在我們進行目錄掛載時默認生成的是一個目錄.touchtouch/usr/local/docker/redis01/conf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡直播平臺在線客服兼職服務協議
- 營養師定制化營養配送服務協議
- 工作時保密協議書
- 牛羊往外賣協議書
- 裝修意向金協議書
- 過橋貸擔保協議書
- 疆老鄉互助協議書
- 小學校保安協議書
- 對公賬培訓協議書
- 教育版軟件協議書
- 幼兒園食堂供應商評估會議記錄范文
- 100以內加法減法專項練習1000道(可打印)
- 2024-2025年中國家用新風系統市場供需格局及未來發展趨勢報告
- 老年髖部骨折圍手術期護理學習資料
- 防火門監控系統施工方案
- 《皮質醇增多征荊》課件
- 2025年春新人教版生物七年級下冊課件 第四單元 人體生理與健康(一) 單元小結
- 大數據導論-大數據如何改變世界知到智慧樹章節測試課后答案2024年秋浙江大學
- 2023年高考物理試卷(廣東)含答案解析
- 軟裝設計方案課件
- 動脈硬化課件
評論
0/150
提交評論