docker入門教程這一篇就夠了

20191028091820.png

作為軟件開發(fā)者败潦,平常最痛恨的應(yīng)該就是環(huán)境配置問題了吧。比如說,我要在一臺新電腦(新環(huán)境)上安裝tomcat跑一個javaweb應(yīng)用膝舅,因為tomcat是java代碼編寫的驰坊,所以首先我要安裝一個java運行時環(huán)境(JRE)匾二,配置JAVA_HOME,然后才能安裝tomcat開始跑javaweb拳芙。還有察藐,如果我要學(xué)習(xí)一門新的語言go、或新的中間件RabbitMQ舟扎、可能花費在安裝這些環(huán)境的時間就讓你想放棄了分飞。
而作為運維人員,平時肯定也為部署新環(huán)境折騰得焦頭爛額睹限,一下子要為好幾臺新機器配置運行環(huán)境譬猫,每臺機器上執(zhí)行相同操作,十分機械化羡疗。
知道了平時開發(fā)中的痛點染服,那是否有一種工具,能讓我快速安裝tomcat而不用去理會環(huán)境問題叨恨。能讓我把go柳刮、RabbitMQ整個環(huán)境下載下來,不需任何配置痒钝,我就能在這個環(huán)境中直接運行g(shù)o代碼秉颗。能讓我配置了一臺機器后,原樣復(fù)制一份午乓,發(fā)到其他機器直接運行站宗,不用再做配置就可以得到相同的環(huán)境?是有這種工具的益愈,它就是虛擬化容器技術(shù)梢灭,而docker夷家,就是這門技術(shù)中的佼佼者。

1. 什么是docker

docker是一門虛擬化容器技術(shù)敏释,其設(shè)計理念是"build once, run anywhere"(一次構(gòu)建库快,到處運行),聽起來钥顽,是不是跟java的"wirte once, run anywhere"(一次編寫义屏,到處運行)很像?那么蜂大,什么是虛擬化容器技術(shù)呢闽铐?docker 將應(yīng)用程序與該程序的依賴,打包在一個文件里面奶浦。運行這個文件兄墅,就會生成一個虛擬容器,程序在這個虛擬容器里運行澳叉,就好像在真實的物理機上運行一樣隙咸。有了 Docker,就不用擔(dān)心環(huán)境問題成洗。正如開篇第一張圖docker的標(biāo)志一樣五督,docker就是這條鯨魚,其上馱著的集裝箱瓶殃,就是一個個互相隔離的容器充包,你可以隨時往上添加集裝箱,不會影響到原有集裝箱里的內(nèi)容遥椿。

2. docker和虛擬機的區(qū)別

docker 和傳統(tǒng)虛擬化方式的不同之處误证,傳統(tǒng)虛擬機技術(shù)是虛擬出一套硬件后,在其上運行一個完整操作系統(tǒng)修壕,在該系統(tǒng)上再運行所需應(yīng)用進程;而容器內(nèi)的應(yīng)用進程直接運行于宿主的內(nèi)核遏考,容器內(nèi)沒有自己的內(nèi)核慈鸠,共享宿主機的內(nèi)核,而且也沒有進行硬件虛擬灌具。因此容器要比傳統(tǒng)虛擬機更為輕便青团。
[圖片上傳失敗...(image-926fd8-1572257136481)]

3. 安裝docker

docker可以在各個操作系統(tǒng)上安裝,過程很簡單咖楣,安裝教程請看這里:https://www.runoob.com/docker/windows-docker-install.html督笆。
docker在windows上安裝是一件麻煩事,但不想在vm虛擬機中的linux上安裝因為懶得開诱贿,所以還是在windows上安裝了娃肿,windows上有兩種安裝方法:

  • docker toolbox:這個安裝包適用于所有windows版本(windows xp的當(dāng)我沒說)咕缎,包括win7, win8, win10家庭版。我就是安裝的這個版本
  • docker for windows:這個版本適合win10專業(yè)版料扰,因為win10專業(yè)版帶有Hyper-v虛擬化功能凭豪,安裝前需要開啟該功能,具體看上面的安裝鏈接晒杈。

3.1. 安裝docker toolbox遇到的問題

這是安裝docker toolbox遇到的卡在下載boot2docker.iso的問題嫂伞,安裝docker其他版本的這節(jié)可以忽略不看。
docker toolbox安裝完成后拯钻,會有如下三個圖標(biāo)帖努,
[圖片上傳失敗...(image-6ed3d3-1572257136481)]
啟動docker需要點擊Docker Quickstart,其會查找指定目錄下的boot2docker.iso(一個輕量級的linux虛擬機)文件粪般,并根據(jù)該文件創(chuàng)建一個名為default的linux虛擬機拼余,初次點擊時找不到該文件,會從github下載刊驴,但docker下載速度相當(dāng)慢姿搜,等了個把小時都無法完成。提示如下:

Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.12.1
(default) Downloading C:\Users\huang\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.12.1/boot2docker.iso...

解決方案是:使用瀏覽器(或者迅雷)到boot2docker的主頁下載最新版boot2docker.iso捆憎,地址:(https://github.com/boot2docker/boot2docker/releases)舅柜,如下圖:

20191028104542.png

下載完成后斷開網(wǎng)絡(luò),將下載好的boot2docker.iso放到提示的位置躲惰,我這里是:C:\Users\huang\machine\cache\目錄致份。記住要斷開網(wǎng)絡(luò),重新點擊Docker Quickstart圖標(biāo)啟動docker即可础拨,啟動完成即可連接網(wǎng)絡(luò)氮块,開始學(xué)習(xí)docker了。

3.2. boot2docker

對boot2docker感興趣的可以看看其github的介紹诡宗,boot2docker是一個輕量級的滔蝉、用于運行docker容器的linux系統(tǒng),完全在內(nèi)存中運行塔沃,大小只有45m左右蝠引,啟動迅速。所以在windows中運行docker蛀柴,其原理是使用啟動了一個linux虛擬機螃概,該虛擬機中安裝了docker,點擊Docker Quickstart后鸽疾,我們可以看到控制臺的輸出吊洼,該虛擬主機名為default,默認的ip是192.168.99.100制肮。再從github中的介紹可以看到冒窍,該虛擬機有docker用戶递沪,密碼為tcuser。因此超燃,我們可以從secureCRT或者git bash中使用ssh登錄到該機器区拳,在上面使用docker命令。當(dāng)然你可以在default虛擬機中安裝vim等工具意乓,但是由于其是內(nèi)存操作系統(tǒng)樱调,重啟后這些新安裝的工具都會消失。


20191028111854.png

遠程登錄命令:

ssh docker@192.168.99.100
# 密碼
tcuser

3.3. docker阿里云鏡像加速

這一節(jié)可以暫時不看届良,等你覺得docker下載太慢時笆凌,可以看我的另一篇文章,配置鏡像加速士葫,地址為:http://www.reibang.com/p/aff1a4a471de

4. docker架構(gòu)

這里我想先從docker的架構(gòu)圖和幾個重要的概念說起乞而,最后再說具體的命令,這樣方便大家知道每一條命令的意思和執(zhí)行過程慢显∽δ#看完這篇文章后 ,推薦一個docker教程荚藻,不長屋灌,鏈接在文章最下方的參考資料。
[圖片上傳失敗...(image-ccd01f-1572257136481)]
如上圖应狱,docker采用的是C/S架構(gòu)共郭。客戶端向服務(wù)器發(fā)送請求疾呻,服務(wù)器負責(zé)構(gòu)建除嘹、運行和分發(fā)容器“段希客戶端和服務(wù)器可以運行在同一個Host上尉咕,客戶端也可以通過socket或者REST API與遠程的服務(wù)器通信。對照上圖璃岳,涉及到的概念如下:

  • Client:docker客戶端龙考,最常見的客戶端就是docker命令,如docker build矾睦、docker pull、docker run等炎功,通過這些命令我們可以方便的在host上構(gòu)建和運行容器枚冗。
  • Daemon:docker deamon是服務(wù)器組件,以linux后臺服務(wù)的方式運行蛇损。docker daemon運行在宿主機docker host上赁温,負責(zé)創(chuàng)建坛怪、運行、監(jiān)控容器股囊,構(gòu)建袜匿、存儲鏡像。
  • image:鏡像稚疹,可將鏡像看成只讀模板居灯,通過它可以創(chuàng)建docker容器。正如Java中了.class文件内狗,通過.class可以創(chuàng)建出類的實例怪嫌。鏡像是層疊的,最底層就是linux內(nèi)核柳沙,每添加一個文件或者操作都會在原來的基礎(chǔ)上疊加一層岩灭,如JDK環(huán)境疊加在linux內(nèi)核之上,tomcat又疊加在JDK環(huán)境之上赂鲤,此時如果你的docker中已有JDK鏡像的話噪径,就只需下載tomcat這層即可。因為鏡像是只讀的数初、共享的找爱。
  • container:容器,docker容器就是docker鏡像的運行實例妙真。
  • registry:registry是存放docker鏡像的倉庫缴允,我們可以將自己的鏡像推到遠程,或者從遠程下載鏡像到本地運行珍德,正如github练般。docker官方有一個docker hub,我們可以從上面下載官方的鏡像锈候。如薄料,下載一個官方的tomcat鏡像,直接運行該鏡像即可啟動tomcat泵琳,不需任何配置摄职。

綜上,結(jié)合上圖获列,整個docker架構(gòu)交互流程為:啟動docker谷市,docker以守護進程的方式運行在linux主機上(docker toolbox下為boot2docker虛擬出來的linux上),我們發(fā)送docker命令給到docker daemon執(zhí)行击孩,docker可以從docker hub中拉取所需要的image迫悠,再根據(jù)image創(chuàng)建出container。

5. 實戰(zhàn)

知道了上面docker架構(gòu)的交互流程了巩梢,我這里以運行一個tomcat容器為例创泄,一步步介紹常用的命令:

  • docker images:列出當(dāng)前docker中有哪些鏡像艺玲,如果是第一次執(zhí)行,當(dāng)然就沒有鏡像了鞠抑。
  • docker search tomcat:在docker hub中搜索tomcat鏡像饭聚。當(dāng)然你可以在瀏覽器中訪問docker hub,地址為:(https://hub.docker.com/)搁拙,就像訪問maven的遠程倉庫一樣秒梳,可以搜索你需要的內(nèi)容。
    20191028120959.png
  • docker pull tomcat:拉取最新版的tomcat鏡像到本地感混,下載完成后再使用docker images就能看到感下載的鏡像了端幼。
  • docker run --name mytomcat -p 8080:8080 -d tomcat:根據(jù)tomcat鏡像運行出一個tomcat實例,執(zhí)行兩遍就有兩個實例了(注意改端口)弧满,--name表示為這個實例命名婆跑,-p 8080:8080表示將本地的8080端口綁定到容器中的8080端口,才能使用localhost:8080(docker toolbox是192.168.99.100:8080)訪問到tomcat端口庭呜。-d表示后臺運行滑进。
  • docker run --name mytomcat03 -p 8082:8080 -it tomcat /bin/bash:-it以交互、附加模式啟動并進入容器后執(zhí)行/bin/bash命令募谎,不以后臺運行扶关,進入容器后執(zhí)行exit命令后,會退出容器数冬,此時使用docker ps -a命令查看會顯示為exit狀態(tài)怎燥。
  • ctrl+p+q:退出但是后臺運行晶框,如上一個命令溉卓,執(zhí)行exit退出后容器就會退出趾盐,此時若不想容器退出,可按這一組快捷鍵秸架。
  • docker ps -a:顯示所有容器狀態(tài)揍庄,docker ps只顯示運行中的容器,-a表示顯示所有容器东抹,包括已退出的容器蚂子。這時就能看到剛剛啟動的tomcat了。
  • docker logs -f mytomcat:查看剛剛啟動的tomcat打出來的日志缭黔,-f表示跟蹤滾動日志打印食茎。
  • docker exec -it mytomcat /bin/bash:exec表示執(zhí)行命令,命令最后需要帶將要執(zhí)行的命令馏谨,如/bin/bash别渔,-it表示以交互、附加模式啟動返回一個終端,/bin/bash表示進入容器后首先執(zhí)行的命令钠糊。這條命令執(zhí)行后就登錄到了容器內(nèi)部,該容器中就是tomcat應(yīng)用壹哺。就像使用ssh登錄到容器內(nèi)部一樣抄伍。這時候你可以修改容器內(nèi)部的配置文件,當(dāng)然管宵,生產(chǎn)環(huán)境不建議這么做截珍,而是使用配置文件外部掛載的方式。
  • docker stop mytomcat:停止mytomcat實例箩朴,不會刪除容器內(nèi)的東西岗喉。
  • docker start -i mytomcat:啟動已停止的mytomcat實例,如果啟動前修改了容器內(nèi)的配置文件炸庞,此時重新啟動會重新加載該配置钱床,如果該配置文件是linux宿主機級別的,如/etc/profile文件埠居,則不會加載查牌,因為容器是共享宿主機的配置的。-i表示啟動并進入交互命令界面滥壕。
  • docker rm mytomcat:刪除已停止的mytomcat實例
  • docker run --name mytomcat02 -p8081:8080 -e JAVA_HOME=/path/to/java/home -v /host/path/file:/container/path/file -d tomcat:-e表示設(shè)置環(huán)境變量JAVA_HOME纸颜,進入到容器中,使用echo $JAVA_HOME可以看到該環(huán)境變量的值绎橘。-v表示掛載宿主機的/host/path/file到容器中的/container/path/file胁孙,修改宿主機的文件時,容器中的文件也會修改称鳞。如果使用的是docker toolbox涮较,則宿主機掛在的文件需要在當(dāng)前用戶目錄下,即c:\user\yourname下才行胡岔,否則不會報錯但無法掛載成功法希,當(dāng)時被這個問題坑了一個下午。
  • docker cp /host/path/file mytomcat02:/container/path/file:復(fù)制宿主機文件到容器中靶瘸,可以用于當(dāng)修改了容器配置文件后苫亦,配置文件錯誤導(dǎo)致無法啟動時,復(fù)制配置文件到宿主機修改配置怨咪,然后重新復(fù)制回容器即可屋剑。
  • docker inspect mytomcat:查看容器信息,包括容器ip等信息诗眨。

6. 構(gòu)建docker鏡像

假如我們下載了tomcat鏡像并啟動了容器實例唉匾,并在tomcat容器中修改了配置文件。這時,我們可以把配置文件也一起打包做成鏡像巍膘,發(fā)到另外的機器直接執(zhí)行厂财,就不用再單獨對每一臺機器配置了。docker提供了兩種方式來構(gòu)建鏡像峡懈,如下:

  • docker commit:通過容器構(gòu)建
  • docker build:通過dockerfile文件構(gòu)建

dockerfile文件方式構(gòu)建需要編寫dockerfile璃饱,也只有幾個命令,不難肪康,請自行查閱資料荚恶。此處講下docker commit命令。
docker commit mytomcat huangzb/tomcat:將當(dāng)前的mytomcat容器提交為鏡像磷支,鏡像名為huangzb/tomcat

7. 容器的網(wǎng)絡(luò)結(jié)構(gòu)

熟悉docker的網(wǎng)絡(luò)結(jié)構(gòu)是相當(dāng)重要的谒撼,因為這樣我們就可以做集群啦。廢話不多說雾狈,那就直入主題吧廓潜。
docker的網(wǎng)絡(luò)使用了linux網(wǎng)絡(luò)中的bridge(網(wǎng)橋)和veth(virtual ethernet虛擬以太網(wǎng))虛擬設(shè)備。

  • bridge:網(wǎng)絡(luò)橋接器箍邮,簡稱網(wǎng)橋茉帅,普通的網(wǎng)橋只有兩個接口,連接兩個網(wǎng)絡(luò)锭弊,工作在二層(數(shù)據(jù)鏈路層)堪澎,只要有mac地址就能轉(zhuǎn)發(fā)數(shù)據(jù)包。而linux得虛擬bridge有多個接口味滞,并且能配置ip樱蛤,更像一個路由器。安裝完docker后剑鞍,在宿主機中使用ifconfig命令昨凡,可以看到網(wǎng)絡(luò)配置中出現(xiàn)了docker0網(wǎng)絡(luò)。docker0就是docker設(shè)置的linux虛擬網(wǎng)橋蚁署。
  • veth:virtual ethernet是linux中的虛擬網(wǎng)絡(luò)設(shè)備便脊,其像一條兩端有網(wǎng)卡的線,可以將兩個設(shè)備連接起來分別配置ip地址光戈。
    [圖片上傳失敗...(image-b672e-1572257136481)]
    因此哪痰,在我windows下docker toolbox中的網(wǎng)絡(luò)如下圖。
    [圖片上傳失敗...(image-3f9661-1572257136481)]

7.1. 容器間互聯(lián)

由上久妆,docker中新建的容器默認都使用了docker0網(wǎng)橋連接了起來晌杰,所有默認的,docker創(chuàng)建的所有容器都在一個網(wǎng)絡(luò)中筷弦,互相可以訪問肋演。

以上。有興趣的同學(xué)可以學(xué)習(xí)下面的參考資料。

參考資料

  1. docker教程:https://yeasy.gitbooks.io/docker_practice/introduction/what.html
  2. 極客學(xué)院視頻教程:https://www.bilibili.com/video/av17854410/?p=1
  3. docker bridge網(wǎng)橋:https://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/index.html
  4. docker網(wǎng)絡(luò)深度研究:http://www.reibang.com/p/19d6f55b9563
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爹殊,一起剝皮案震驚了整個濱河市蜕乡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梗夸,老刑警劉巖异希,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绒瘦,居然都是意外死亡,警方通過查閱死者的電腦和手機扣癣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門惰帽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人父虑,你說我怎么就攤上這事该酗。” “怎么了士嚎?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵呜魄,是天一觀的道長。 經(jīng)常有香客問我莱衩,道長爵嗅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任笨蚁,我火速辦了婚禮睹晒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘括细。我一直安慰自己伪很,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布奋单。 她就那樣靜靜地躺著锉试,像睡著了一般。 火紅的嫁衣襯著肌膚如雪览濒。 梳的紋絲不亂的頭發(fā)上呆盖,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音匾七,去河邊找鬼絮短。 笑死,一個胖子當(dāng)著我的面吹牛昨忆,可吹牛的內(nèi)容都是我干的丁频。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼席里!你這毒婦竟也來了叔磷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤奖磁,失蹤者是張志新(化名)和其女友劉穎改基,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咖为,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秕狰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躁染。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸣哀。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吞彤,靈堂內(nèi)的尸體忽然破棺而出我衬,到底是詐尸還是另有隱情,我是刑警寧澤饰恕,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布挠羔,位于F島的核電站,受9級特大地震影響埋嵌,放射性物質(zhì)發(fā)生泄漏破加。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一雹嗦、第九天 我趴在偏房一處隱蔽的房頂上張望拌喉。 院中可真熱鬧,春花似錦俐银、人聲如沸尿背。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽田藐。三九已至,卻和暖如春吱七,著一層夾襖步出監(jiān)牢的瞬間汽久,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工踊餐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留景醇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓吝岭,卻偏偏與公主長得像三痰,于是被迫代替她去往敵國和親吧寺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容