Docker與微服務(wù)

鏡像下載员舵、域名解析静檬、時(shí)間同步請(qǐng)點(diǎn)擊 阿里云開(kāi)源鏡像站

一鞍爱、鏡像

鏡像是一種輕量級(jí)踏兜、可執(zhí)行的獨(dú)立軟件包军拟,它包含運(yùn)行某個(gè)軟件所需的所有內(nèi)容幸乒,我們把應(yīng)用程序和配置依賴(lài)打包形成一個(gè)可交付的運(yùn)行環(huán)境(包括代碼、運(yùn)行時(shí)需要的庫(kù)漠秋、環(huán)境變量和配置文件等)笙蒙,這個(gè)打包好的運(yùn)行環(huán)境就是image鏡像文件

1.鏡像分層

以tomcat鏡像為例,我們發(fā)現(xiàn)在pull的過(guò)程中鏡像好像一層一層的在下載

file

(1). Docker鏡像加載原理:

docker鏡像實(shí)際上由一層一層的文件系統(tǒng)組成庆锦,這種層級(jí)的文件系統(tǒng)就是聯(lián)合文件系統(tǒng)(UnionFS)

(2). UnionFS(聯(lián)合文件系統(tǒng))

UnionFS(聯(lián)合文件系統(tǒng)):Union文件系統(tǒng)是一種分層捅位、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來(lái)一層層的疊加搂抒, 同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下艇搀。Union文件系統(tǒng)時(shí)Docker鏡像的基礎(chǔ)。鏡像可以通過(guò)分層來(lái)進(jìn)行繼承求晶,基于基礎(chǔ)鏡像(沒(méi)有父鏡像)可以制作除具體的應(yīng)用鏡像焰雕。

(3). 具體細(xì)節(jié)

  • bootfs(boot file sysytem)

主要包含bootloader和kernel,bootloader主要是引導(dǎo)加載kernel芳杏,Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng)矩屁,在Docker鏡像的最底層時(shí)引導(dǎo)文件系統(tǒng)bootfs。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的爵赵,包含boot加載器和內(nèi)核吝秕。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核空幻,此時(shí)系統(tǒng)也會(huì)卸載bootfs

  • rootfs(root file system)

在bootfs之上烁峭,包含的就是典型Linux系統(tǒng)中的/dev, /proc, /bin,/etc等標(biāo)準(zhǔn)目錄和文件,rootfs就是各種不同操作系統(tǒng)發(fā)行版秕铛,比如Ubuntu约郁,Centos等

(4). 鏡像分層的好處

共享資源耘柱,方便復(fù)制遷移、復(fù)用

比如說(shuō)多個(gè)鏡像都是從相同的一份base鏡像構(gòu)建而來(lái)(更詳細(xì)的講 假如base鏡像共有十層棍现,而A鏡像是base鏡像的前三層,B鏡像是base鏡像的后三層)镜遣,那么我們只需要在磁盤(pán)上保存一份base鏡像己肮,在內(nèi)存中加載一份base鏡像,就可以為所有由base鏡像構(gòu)建而來(lái)的鏡像的實(shí)例容器服務(wù)了悲关。

通俗來(lái)講谎僻,大學(xué)圖書(shū)館分為好幾層,如工學(xué)寓辱、文學(xué)艘绍、醫(yī)學(xué)每個(gè)大的分區(qū)又可以細(xì)分多個(gè)不同的子領(lǐng)域,而我們?nèi)5膶W(xué)生雖然專(zhuān)業(yè)眾多秫筏,但是都可以在圖書(shū)館找到屬于自己專(zhuān)業(yè)的書(shū)籍诱鞠。這樣我們就不需要因?yàn)閷W(xué)科領(lǐng)域不同也建造多個(gè)圖書(shū)館了

(5). 容器層、鏡像層

當(dāng)容器啟動(dòng)時(shí)这敬,一個(gè)新的可寫(xiě)層被加載到鏡像的頂部航夺,這一層通常被稱(chēng)為 " 容器層" , "容器層 " 之下的都叫 " 鏡像層 " 崔涂。Docker鏡像層都是只讀的阳掐,容器層是可寫(xiě)的。

這個(gè)好理解冷蚂,圖書(shū)館中的書(shū)可以借閱缭保,但是圖書(shū)館地基和整體建筑肯定不能隨便動(dòng)

在docker上運(yùn)行Ubuntu容器實(shí)例,使用vim編輯文件蝙茶,發(fā)現(xiàn)報(bào)錯(cuò)了艺骂,找不到vim

file

原因

這是由于鏡像是簡(jiǎn)易版的Linux,僅包括Linux內(nèi)核等一些重要的隆夯。

但是我們進(jìn)行配置文件的修改彻亲,需要用到vim編輯器,這時(shí)候就需要鏡像加強(qiáng)了

apt update 更新包管理工具(ubuntu)

file

apt install vim 下載vim

使用vim編輯器吮廉,新建文件a.txt 并寫(xiě)入hello docker苞尝,保存退出。讀取a.txt文件

file

ctrl+q+p 退出容器 docker ps 查看正在運(yùn)行的容器

file

第一個(gè)就是我們剛才使用的帶vim編輯器的ubuntu容器

docker commit -m="提交的描述信息" -a="作者" 容器ID 要?jiǎng)?chuàng)建的目標(biāo)鏡像名:[標(biāo)簽名]

file

commit 帶vim編輯器的ubuntu容器到本地宦芦,查看本地鏡像發(fā)現(xiàn)帶vim的大小多了近100MB宙址,這就是為什么鏡像文件小的原因所在,只是按需下載

Docker中的鏡像分層调卑,支持通過(guò)擴(kuò)展現(xiàn)有鏡像抡砂,創(chuàng)建新的鏡像大咱。

2.本地鏡像發(fā)布到阿里云

在阿里云控制臺(tái) -> 容器鏡像服務(wù) -> 個(gè)人實(shí)例(創(chuàng)建一個(gè)用于測(cè)試)

file
file
file

(1). 創(chuàng)建命名空間

file

(2) 創(chuàng)建鏡像倉(cāng)庫(kù)

file
file

(3) 阿里云會(huì)自動(dòng)生成操作指南

file

(3)講鏡像推送到Registry

(4)登錄

docker login --username=用戶(hù)名 registry.cn-shanghai.aliyuncs.com

file

(5)設(shè)置鏡像版本號(hào)

docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/xueyueqing/ubuntu:[鏡像版本號(hào)]

file

(6)推送

docker push registry.cn-shanghai.aliyuncs.com/xueyueqing/ubuntu:[鏡像版本號(hào)]

file

(7)測(cè)試

刪除本地Ubuntu1.3的鏡像

file

(8)從阿里云Registry中拉取鏡像

docker pull registry.cn-shanghai.aliyuncs.com/xueyueqing/ubuntu:[鏡像版本號(hào)]

file

測(cè)試成功!

file

二注益、容器數(shù)據(jù)卷

1.作用

試想一下:我們的docker容器很容易被自己誤刪或者被別人惡意刪除碴巾,那我們?nèi)萜髦械闹匾獢?shù)據(jù)不就丟失了嗎?

docker采用容器數(shù)據(jù)卷的方式解決此類(lèi)問(wèn)題丑搔。

卷就是目錄或文件厦瓢,存在于一個(gè)或多個(gè)容器中,由docker掛載到容器啤月,不屬于聯(lián)合文件系統(tǒng)煮仇,可以繞過(guò)聯(lián)合文件系統(tǒng)提供一些用于持久化和共享數(shù)據(jù)的特性。

容器數(shù)據(jù)卷設(shè)計(jì)的目的就是數(shù)據(jù)的持久化谎仲,它完全獨(dú)立于容器的生存周期浙垫,因此Docker不會(huì)再容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷

注意事項(xiàng)

Docker掛載主機(jī)目錄訪(fǎng)問(wèn)如果出現(xiàn)cannot open directory:Permission denied解決辦法:在掛載目錄后多加一個(gè)--privileged=true參數(shù)即可

作用: 擴(kuò)大容器的權(quán)限解決掛載目錄沒(méi)有權(quán)限的問(wèn)題,使得容器中root擁有所有權(quán)限郑诺,否則root只是外部一個(gè)普通的用戶(hù)

2.特點(diǎn)

  • 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
  • 卷中的更改可以直接實(shí)時(shí)生效
  • 數(shù)據(jù)卷中的更改不會(huì)包含再鏡像的更新中
  • 數(shù)據(jù)卷的生命周期一直持續(xù)倒沒(méi)有容器使用它為止

3.測(cè)試

docker run -it --privileged=true -v/宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄 鏡像名

file

(1). 在容器docker_data目錄中創(chuàng)建文件

file

(2). 在本地host_data目錄下發(fā)現(xiàn) dockerin.txt文件已共享

file

(3). 在本地host_data目錄下新建文件并寫(xiě)入數(shù)據(jù) hello docker

file

(4). 在容器docker_data目錄中發(fā)現(xiàn)hostin.txt文件 并讀取到共享過(guò)來(lái)的數(shù)據(jù)

file

(5). docker inspect 容器ID 查看容器內(nèi)部細(xì)節(jié)

file

假設(shè)容器停止夹姥,在主機(jī)新建文件能否共享嗎?

(6). 停止容器

file

(7). 在主機(jī)創(chuàng)建文件c.txt

file

(8). 重啟容器

file

(9). 進(jìn)入容器docker_data目錄下發(fā)現(xiàn)c.txt文件已共享

file

4.容器卷的讀寫(xiě)規(guī)則

容器數(shù)據(jù)卷的讀寫(xiě)規(guī)則默認(rèn) rw 可讀可寫(xiě)辙诞,就如同上述的例子

file

ro:容器實(shí)例內(nèi)部被限制佃声,只能讀取不能寫(xiě)

docker run -it --privileged=true -v/宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄:ro 鏡像名

(1). 創(chuàng)建只讀的Ubuntu容器實(shí)例

file

(2). 在本地主機(jī)上創(chuàng)建a.txt文件 并寫(xiě)入數(shù)據(jù) xueyueqing

file

(3). 這容器中只能讀文件,其他操作被限制

file

5.容器卷的繼承

docker run -it --privileged=true --volumes-from 父類(lèi) --name u2 ubuntu

file

(注意:向?qū)⒅暗膗2容器刪除倘要,docker rm 容器ID)

(1). u2繼承u1的docker_data目錄及目錄下的文件

file

(2). 在u2中創(chuàng)建文件圾亏,u1中也會(huì)共享數(shù)據(jù)

file
file

當(dāng)u1停止了,u2會(huì)共享本地主機(jī)數(shù)據(jù)嗎封拧? 會(huì)

file

(3). u2容器共享了主機(jī)的數(shù)據(jù)

file

容器卷的繼承本質(zhì)是繼承了容器之間的規(guī)則與容器本身沒(méi)有關(guān)系志鹃,因此u1容器停止不影響u2容器與本地主機(jī)數(shù)據(jù)共享

如果啟動(dòng)u1容器,那么u1中會(huì)有之前本地主機(jī)創(chuàng)建的文件嗎泽西? 會(huì)

file

三曹铃、docker上安裝常用軟件

總體步驟:

  • 搜索鏡像

  • 拉取鏡像

  • 查看鏡像

  • 啟動(dòng)鏡像

  • 停止鏡像

  • 移除容器

補(bǔ)充:

netstat -tunlp | grep 端口號(hào) 查看端口使用情況

ps - ef | grep 端口號(hào) 查看端口使用情況

kill - 9 進(jìn)程號(hào) 殺進(jìn)程

1.Tomcat

(1).搜索鏡像 docker search tomcat

file

(2).拉取鏡像,一般都是使用第一個(gè) docker pull tomcat

file

(3).查看tomcat鏡像是否下載成功 docker images tomcat

file

(4).使用tomcat鏡像創(chuàng)建容器實(shí)例 docker run -d -p 8080:8080 --name t1 tomcat

-p 小寫(xiě)捧杉,主機(jī)端口:docker容器端口 -d 后臺(tái)運(yùn)行

-P 大寫(xiě)陕见,隨機(jī)分配端口

(5). 啟動(dòng)成功

file
file

(6). 訪(fǎng)問(wèn)不到tomcat首頁(yè)

file

首先檢查防火墻端口8080是否開(kāi)啟,使用云服務(wù)器還需要檢查云服務(wù)器安全組中的8080端口規(guī)則是否添加

檢查tomcat中webapps目錄下是否有tomcat首頁(yè)

(7). 進(jìn)入tomcat容器味抖,發(fā)現(xiàn)tomcat中webapps目錄下為空

file

(8). 刪掉webapps评甜,將webapps.dist 改為webapps

file

成功了Tゼ怼5奚肌!

file

(原因是因?yàn)樾掳鎡omcat 默認(rèn)訪(fǎng)問(wèn)路徑webapps目錄是空的深胳,默認(rèn)配置在webapps.dist目錄中 ,需要修改下)

(9). 停止佩研、刪除容器一氣呵成

file

2.MySQL

(1). 簡(jiǎn)易版

  • 搜索鏡像 docker search mysql
file
  • 拉取鏡像柑肴,使用5.7版本的 docker pull mysql:5.7
file
  • 查看mysql鏡像是否下載成功 docker images mysql
file
  • 使用tomcat鏡像創(chuàng)建容器實(shí)例 docker run -d -p 8080:8080 --name t1 tomcat

先檢查L(zhǎng)inux本地主機(jī)是否啟動(dòng)了MySQL,防止端口沖突

file
  • 啟動(dòng)容器 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
file
  • 進(jìn)入容器旬薯,登錄root用戶(hù)
file
  • 簡(jiǎn)單測(cè)試下MySQL
file
file
  • 使用SQLyog測(cè)試 連接成功
file

** 問(wèn)題一:測(cè)試中文數(shù)據(jù)晰骑,發(fā)現(xiàn)亂碼**

file

問(wèn)題二:mysql容器如果被誤刪了,那么我的數(shù)據(jù)該怎么辦

file

解決方案:請(qǐng)看實(shí)戰(zhàn)版

(2). 實(shí)戰(zhàn)版

  • 創(chuàng)建一個(gè)mysql目錄保存數(shù)據(jù)
file
  • 使用容器卷保存數(shù)據(jù) docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
file
  • 在本地主機(jī)/mysql/conf目錄下新建my.cnf 文件利用容器卷共享绊序,將文件共享到mysql容器解決亂碼
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
file
  • 進(jìn)入容器硕舆,登錄mysql
file
  • 查看mysql編碼 show variables like 'character%'
file
  • 測(cè)試
file
  • 成功解決中文亂碼問(wèn)題
file
  • mysql容器被刪了??????
file

這個(gè)時(shí)候就不怕數(shù)據(jù)丟失了,因?yàn)槲覀冎笆褂萌萜骶肀4鏀?shù)據(jù)了

  • 再次創(chuàng)建mysql容器 數(shù)據(jù)卷宿主機(jī)絕對(duì)路徑就是之前設(shè)置的
file
  • 數(shù)據(jù)庫(kù)中數(shù)據(jù)從本地主機(jī)共享過(guò)來(lái)了政模,再也不怕刪庫(kù)跑路了??????
file

3.Redis

  • 搜索鏡像 docker search redis
file
  • 拉取鏡像, docker pull redis
file
  • 查看tomcat鏡像是否下載成功 docker images redis
file
  • 進(jìn)入容器蚂会,連接客戶(hù)端
file

這樣肯定是不行的淋样,因?yàn)閞edis需要保存數(shù)據(jù),還要修改配置文件

  • 在本地主機(jī)新建目錄 /app/redis
file
  • 將一個(gè)redis.conf 文件模板拷貝進(jìn) /app/redis 目錄下
file
  • 修改redis.conf配置文件
file
  • .將daemonize yes改為 no 胁住,因?yàn)樵撛O(shè)置何docker run中-d參數(shù)沖突趁猴,會(huì)導(dǎo)致容器一直啟動(dòng)失敗
file
  • 再次創(chuàng)建redis容器(記得先把之前6379端口停了)

docker run -p 6379:6379 --name myredis --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis redis-server /etc/redis/redis.conf

file
  • 測(cè)試連接成功
file

本文轉(zhuǎn)自:https://blog.csdn.net/qq_52595134/article/details/124460846

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市彪见,隨后出現(xiàn)的幾起案子儡司,更是在濱河造成了極大的恐慌,老刑警劉巖余指,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捕犬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡酵镜,警方通過(guò)查閱死者的電腦和手機(jī)碉碉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淮韭,“玉大人垢粮,你說(shuō)我怎么就攤上這事】糠啵” “怎么了蜡吧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)占键。 經(jīng)常有香客問(wèn)我昔善,道長(zhǎng),這世上最難降的妖魔是什么畔乙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任耀鸦,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袖订。我一直安慰自己氮帐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布洛姑。 她就那樣靜靜地躺著上沐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楞艾。 梳的紋絲不亂的頭發(fā)上参咙,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音硫眯,去河邊找鬼蕴侧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛两入,可吹牛的內(nèi)容都是我干的净宵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼裹纳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼择葡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剃氧,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤敏储,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后朋鞍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體已添,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年滥酥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酝碳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恨狈,死狀恐怖疏哗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情禾怠,我是刑警寧澤返奉,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站吗氏,受9級(jí)特大地震影響芽偏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弦讽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一污尉、第九天 我趴在偏房一處隱蔽的房頂上張望膀哲。 院中可真熱鬧,春花似錦被碗、人聲如沸某宪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兴喂。三九已至,卻和暖如春焚志,著一層夾襖步出監(jiān)牢的瞬間衣迷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工酱酬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壶谒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓膳沽,卻偏偏與公主長(zhǎng)得像汗菜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贵少,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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