Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

本篇文章給大家?guī)?lái)了docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)的相關(guān)知識(shí),希望對(duì)大家有幫助。

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

docker數(shù)據(jù)卷技術(shù)

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

什么是容器數(shù)據(jù)卷

docker的理念回顧

將應(yīng)和環(huán)境打包成一個(gè)鏡像!

數(shù)據(jù)?如果數(shù)據(jù)都在容器中,那么我們?nèi)萜鲃h除,數(shù)據(jù)就會(huì)丟失!需求:數(shù)據(jù)可以持久化

MySQL,容器刪了,刪庫(kù)跑路—>需求:MySQL數(shù)據(jù)可以存儲(chǔ)在本地!

容器之間可以有一個(gè)數(shù)據(jù)共享的技術(shù)!Docker容器中產(chǎn)生的數(shù)據(jù),同步到本地!

這就是卷技術(shù)!目錄的掛載,將我們?nèi)萜鲀?nèi)的目錄,掛載到Linu×上面!

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

總結(jié):容器的持久化和同步操作!容器間也是可以實(shí)現(xiàn)數(shù)據(jù)共享的!

使用數(shù)據(jù)卷

docker?run?-it?-v?宿主機(jī)目錄:?容器目錄?-p?主機(jī)端口:容器端口?容器id

實(shí)戰(zhàn)演練

inspect查看同步詳細(xì)信息

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

在容器中創(chuàng)建一個(gè)文件,看是否同步到本地文件夾

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

在關(guān)閉容器的情況下,對(duì)本地文件進(jìn)行修改,看修改的是不是會(huì)同步到容器中文件

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

Mysql實(shí)戰(zhàn)

命令

docker?run?-d?-p?3310:3306?-v?/root/mysql/conf:/etc/mysql/conf.d?-v?/root/mysql/data:/var/lib/mysql?-e?MYSQL_ROOT_PASSWORD=123456?--name?mysql01?mysql:5.7

參數(shù)

-d 后臺(tái)運(yùn)行

-p 端口映射

-v 數(shù)據(jù)卷掛載:同步數(shù)據(jù)

-e? 設(shè)置環(huán)境變量:這里時(shí)設(shè)置的時(shí)MySQL的登陸密碼

–name? 容器起名字

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

測(cè)試結(jié)果:連接成功

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

遇到的問(wèn)題

首先使用的時(shí)mysql的最新版本:8.0—-在使用navicat進(jìn)行連接的時(shí)候,總是報(bào)莫名其妙的錯(cuò)誤

解決方式:換成5.7版本,沒(méi)有任何問(wèn)題

在我們r(jià)un鏡像mysql的時(shí)候,沒(méi)有加上-e MYSQL_ROOT_PASSWORD=123456進(jìn)行密碼的設(shè)置,容器一直會(huì)處于關(guān)閉狀態(tài),即使重新start也不會(huì)開啟

加上-e MYSQL_ROOT_PASSWORD=123456這個(gè)參數(shù)完美開啟

即使我們將容器刪除,我們掛載到本地的數(shù)據(jù)卷依舊沒(méi)有丟失,這就實(shí)現(xiàn)了容器數(shù)據(jù)的持久化功能

具名掛載和匿名掛載

匿名掛載

-v 容器內(nèi)的路徑!

docker?run?-d?--name?nginx01?-v?/etc/nginx?nginx

這里我們發(fā)現(xiàn),這種就是匿名掛載,我們?cè)?v的后面只是寫上了容器內(nèi)的路徑,沒(méi)有寫容器外的路徑

查看所有卷的情況

docker?volume?ls

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

具名掛載

-v 掛載卷的名稱:容器內(nèi)的路徑

docker?run?-d?--name?nginx01?-v?具名掛在名稱:/etc/nginx?nginx

這里我們發(fā)現(xiàn),這種就是匿名掛載,我們?cè)?v的后面既寫上了容器內(nèi)的路徑,沒(méi)有容器外的路徑,但是有一個(gè)名稱

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

docker的內(nèi)容目錄:/var/lib/docker

所有的docker容器內(nèi)的卷,沒(méi)有指定目錄的情況下都是在:/var/lib/docker/volume/xx/_data

我們可以通過(guò)具名掛載方便的找到我們的一個(gè)卷,并且在使用卷的時(shí)候最多的使用方式就是具名掛載

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

額外知識(shí)

如何區(qū)分時(shí)具名掛載還是匿名掛載,指定路徑掛載

-v 容器內(nèi)路徑? ? #匿名掛載

-v 卷名:容器內(nèi)路徑? ? #具名掛載

-v /容器外路徑:容器內(nèi)路徑? ? #指定路徑掛載

擴(kuò)展

-v 容器內(nèi)路徑:ro rw 改變讀寫權(quán)限

ro? readonly? 只讀

rw? readwrite 可讀可寫

一旦設(shè)置了這個(gè)容器權(quán)限,容器對(duì)我們掛載出來(lái)的內(nèi)容就有限定了

docker?run?-d?--name?nginx01?-v?具名掛在名稱:/etc/nginx:ro?nginx docker?run?-d?--name?nginx01?-v?具名掛在名稱:/etc/nginx:rw?nginx

Ro 只要看到ro就說(shuō)明這個(gè)路徑只能通過(guò)宿主機(jī)來(lái)進(jìn)行操作,容器內(nèi)是無(wú)法操作的!

初識(shí)Dockerfile

dockerfile

dockerfile就是用來(lái)構(gòu)建docker鏡像文件的!命令腳本!先體驗(yàn)一下

通過(guò)這個(gè)腳本可以生成鏡像,鏡像是一層一層的,腳本是一個(gè)個(gè)的命令,每個(gè)命令都是一層!

寫一個(gè)dockerfile

#?創(chuàng)立一個(gè)dockerfile文件,名字可以隨便的取,最好叫做dockerfile #?文件中的內(nèi)容?指令(大寫)?參數(shù) FROM?centos VOLUME?["volme01","volume02"] CMD?echo?"--------end----------" CMD?/bin/bash #這里每個(gè)指令就是鏡像的一層

使用dockerfile生成鏡像

docker?build?-f?dockerfile文件位置?-t?鏡像名稱和版本?鏡像生成的位置

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

進(jìn)入鏡像查看詳情

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

查看卷的同步目錄

docker ps -a

docker inspect 容器id

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

最后測(cè)試兩個(gè)文件夾中是不是同步

同步成功

總結(jié)

使用dockerfile構(gòu)建鏡像的方式在我們未來(lái)的使用中非常的多,因?yàn)槲覀兺ǔ?huì)構(gòu)建自己的鏡像

假設(shè)構(gòu)建鏡像時(shí)候沒(méi)有掛載卷,要手動(dòng)鏡像掛載-v

數(shù)據(jù)卷容器

實(shí)際上即使保證的容器之間的數(shù)據(jù)共享的問(wèn)題

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

數(shù)據(jù)卷容器實(shí)際上就是被拷貝數(shù)據(jù)的容器(A- volumes-from ->B,B是數(shù)據(jù)卷容器)

測(cè)試兩個(gè)鏡像之間同步

首先先開三個(gè)容器

創(chuàng)建docker01

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

創(chuàng)建docker02? –volumes-from docekr01

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

創(chuàng)建docker03? –volumes-from docekr02

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

查看docker01和docker03之間的數(shù)據(jù)共享

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

接著我們將docker02刪除,查看docker01和docker03之間的數(shù)據(jù)共享

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

總結(jié):

Docker總結(jié)分享之?dāng)?shù)據(jù)卷技術(shù)

實(shí)現(xiàn)多個(gè)mysql之間的數(shù)據(jù)共享

??docker?run?-d?-p?3310:3306?-v?/root/mysql/conf:/etc/mysql/conf.d?-v?/root/mysql/data:/var/lib/mysql?-e?MYSQL_ROOT_PASSWORD=123456?--name?mysql01?mysql:5.7 ??docker?run?-d?-p?3310:3306?--volumes-from?mysql01?-e?MYSQL_ROOT_PASSWORD=123456?--name? ??mysql02?mysql:5.7

總結(jié):

容器之間配置信息的傳遞。數(shù)據(jù)卷容器的聲明周期一直持續(xù)到?jīng)]有容器使用位置

理解:容器之間只要是共享就會(huì)數(shù)據(jù)copy,即使有的容器被刪除,數(shù)據(jù)依然存在,直到所有共享 的容器都刪除,數(shù)據(jù)才會(huì)被徹底刪除

但是一旦你持久化到了本地,這個(gè)時(shí)候,本地的數(shù)據(jù)是不會(huì)刪除的。

推薦學(xué)習(xí):《docker視頻教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享