Docker使用教程(2): 數(shù)據(jù)卷的使用以及使用docker安裝mysql

一. 前言

?? 許久沒(méi)有更新, 是我偷懶了. 后果也是很嚴(yán)重的, 至少為了寫這篇文章我又復(fù)習(xí)了半個(gè)小時(shí), 哈哈. 今天寫的是docker中的數(shù)據(jù)卷, 我們開(kāi)始吧...

二. 什么是數(shù)據(jù)卷? 它有什么好處?

?? 回答上述兩個(gè)問(wèn)題之前我先提出一個(gè)問(wèn)題: 經(jīng)過(guò)上一篇文章的入門, 我們學(xué)會(huì)了docker的基本使用, 諸如拉取鏡像、啟動(dòng)容器之類的操作. 那假如我們不小心把容器刪除了, 那容器中的數(shù)據(jù)也會(huì)隨之消失, 這顯然是不對(duì)的. 這時(shí)我們就需要將容器中的文件備份出來(lái)才行, 怎么做?

?? docker為我們提供了一個(gè)cp命令, 雖然不是本文主題, 但還是有必要提一下, 使用如下:
?? docker cp 容器id:/源路徑 /目標(biāo)路徑 ---將容器下的文件拷貝到linux
?? docker cp /源路徑 容器id:/目標(biāo)路徑 ---或者將linux下的文件拷貝到容器

這么看可能有迷...我來(lái)演示一下吧, 下圖中, 我是將linux系統(tǒng)/home目錄下的test.txt文件拷貝到docker容器的/opt目錄下:

docker的cp命令.png

?? 很簡(jiǎn)單吧? 如果要將docker中的文件拷貝出來(lái), 只需要對(duì)調(diào)源路徑和目標(biāo)路徑就可以了. 不過(guò)這種方式雖然簡(jiǎn)單, 但顯然滿足不了我們備份的需求. 比如我們mysql的數(shù)據(jù)文件, 不可能寫個(gè)腳本就干這事兒, 一是消耗性能, 二是可能數(shù)據(jù)還不一定同步.

?? 假如我們能把docker容器內(nèi)部的文件和linux上的文件建立一個(gè)關(guān)聯(lián), 任何一邊修改變動(dòng)時(shí), 另一邊自動(dòng)同步那該多好. 哈哈, 湊巧的是, docker的數(shù)據(jù)卷就是干這個(gè)事情的. ok, 下面我就來(lái)記錄一下安裝mysql并使用數(shù)據(jù)卷備份和同步數(shù)據(jù)文件到linux吧.

三. 使用docker搭建mysql并掛載數(shù)據(jù)卷

(1) 可以使用-v來(lái)掛載路徑: docker run -it -v 主機(jī)目錄:容器目錄
(2) 拉取mysql:8鏡像, docker pull mysql:8
(3) 啟動(dòng)mysql:8, docker run -d -it --rm -p 3306:3306 -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --name mysql01 mysql:8

參數(shù)說(shuō)明:
--rm # 容器停止即刪除實(shí)例, 可以不加
-e # 添加環(huán)境變量, MYSQL_ROOT_PASSWORD設(shè)置密碼
-v # 掛載數(shù)據(jù)卷, 可以使用多個(gè)-v來(lái)掛載多個(gè)數(shù)據(jù)卷, 掛載之后, 掛載的兩個(gè)目錄下的文件會(huì)進(jìn)行同步

(4) 不過(guò)我遇到一個(gè)問(wèn)題, 就是將mysql容器內(nèi)部的配置文件掛載到linux外部之后, 會(huì)啟動(dòng)失敗或配置文件沒(méi)有同步到宿主機(jī). 具體原因在下也不知道, 歡迎留言告知. 不過(guò), 據(jù)我測(cè)試, 只要將配置文件事先創(chuàng)建好, 再進(jìn)行掛載就可以了. 以下是官網(wǎng)的說(shuō)法:

docker-mysql配置文件.png

官網(wǎng)的示例中掛載的是一個(gè)目錄, 顯而易見(jiàn)那個(gè)/my/custom目錄中已經(jīng)存在一個(gè)自定義的配置文件, 而且還說(shuō)是一個(gè)叫做config-file.cnf文件. 所以, 我也創(chuàng)建了一個(gè)扔在目錄下, 并且什么都沒(méi)配:

docker-mysql配置文件2.png

隨后掛載并啟動(dòng)了它:

docker run -itd -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql:8

redis同理:
但是需要下載一份兒配置文件, 如果想要自定義配置的話:
wget http://download.redis.io/redis-stable/redis.conf

由于容器可能取不到宿主機(jī)的東西, 給它開(kāi)放權(quán)限: chmod 666 redis.conf

另外注意, 如果docker使用-d參數(shù), 則表示守護(hù)進(jìn)程模式啟動(dòng), 所以配置文件中的daemonize需要保持為no
daemonize no

docker run -itd -p 6379:6379 -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -v /mydata/redis/data:/data --name redis5 redis:5.0.14 redis-server /etc/redis/redis.conf

然后它啟動(dòng)成功了, 不過(guò)我想應(yīng)該是配置文件需要自己創(chuàng)建的原因, 因?yàn)槲以诓粧燧d配置文件的情況下進(jìn)入過(guò)mysql的容器去查看配置文件, 里邊兒的配置文件也是什么都沒(méi)有配置.

(5) 總而言之, 配置相關(guān)只需要掛載文件夾, 然后自己定義配置內(nèi)容, 配置文件的名稱可以是config-file.cnf亿卤。

(6) 這時(shí)候, 就算不小心將mysql的容器刪除了也沒(méi)有關(guān)系, 只要再次指定數(shù)據(jù)卷的掛載路徑, 數(shù)據(jù)就回來(lái)啦.

四. 掛載數(shù)據(jù)卷的三種方式及區(qū)別

掛載的方式分別有如下三種:
(1) 匿名掛載: -v 容器內(nèi)路徑.
比如: docker run -d -it --rm -p 8080:8080 --name tomcat01 -v /usr/local/tomcat/webapps tomcat:9
此時(shí), tomcat的webapps會(huì)被掛載到宿主機(jī)的/var/lib/docker/volumes文件夾下, 并隨機(jī)生成一個(gè)文件夾. 可以使用docker volumes ls命令查看有哪些匿名掛載的數(shù)據(jù)卷.

(2) 具名掛載: -v 卷名:容器內(nèi)路徑
比如: docker run -d -it --rm -p 8080:8080 --name tomcat01 -v tomcat01:/usr/local/tomcat/webapps tomcat:9
與匿名掛載的區(qū)別在于, 它在/var/lib/docker/volumes目錄下生成的文件夾名不再是無(wú)意義的了, 而是你指定的名稱, 如此處的tomcat01

(3) 指定路徑掛載: -v 宿主機(jī)路徑:容器內(nèi)路徑
這種方式就是上面演示的方式. 區(qū)別也是顯而易見(jiàn), 自定義了數(shù)據(jù)的保存位置.

好了, 數(shù)據(jù)卷的使用就記錄到這里, 歡迎留言指正和交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旦签,一起剝皮案震驚了整個(gè)濱河市抵窒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畜号,老刑警劉巖谴古,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掏缎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡衫冻,警方通過(guò)查閱死者的電腦和手機(jī)诀紊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)隅俘,“玉大人邻奠,你說(shuō)我怎么就攤上這事∥樱” “怎么了惕澎?”我有些...
    開(kāi)封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)颜骤。 經(jīng)常有香客問(wèn)我唧喉,道長(zhǎng),這世上最難降的妖魔是什么忍抽? 我笑而不...
    開(kāi)封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任八孝,我火速辦了婚禮,結(jié)果婚禮上鸠项,老公的妹妹穿的比我還像新娘干跛。我一直安慰自己,他們只是感情好祟绊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布楼入。 她就那樣靜靜地躺著,像睡著了一般牧抽。 火紅的嫁衣襯著肌膚如雪嘉熊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天扬舒,我揣著相機(jī)與錄音阐肤,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛孕惜,可吹牛的內(nèi)容都是我干的愧薛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衫画,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毫炉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起削罩,我...
    開(kāi)封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碘箍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鲸郊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丰榴,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年秆撮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了四濒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡职辨,死狀恐怖盗蟆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舒裤,我是刑警寧澤喳资,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站腾供,受9級(jí)特大地震影響仆邓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伴鳖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一节值、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榜聂,春花似錦搞疗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至豌汇,卻和暖如春幢炸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘤礁。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工阳懂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梅尤,地道東北人柜思。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓岩调,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赡盘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子号枕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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