溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

docker容器數(shù)據(jù)卷怎么使用

發(fā)布時(shí)間:2021-12-13 11:49:25 來(lái)源:億速云 閱讀:137 作者:iii 欄目:云計(jì)算

本篇內(nèi)容介紹了“docker容器數(shù)據(jù)卷怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

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

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

docker的理念回顧

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

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

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

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

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

docker容器數(shù)據(jù)卷怎么使用

總結(jié)一句話:容器的持久化和同步操作!容器間也是可以數(shù)據(jù)共享的!

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

方式一:直接使用命令來(lái)掛載  -v

docker run -it -v 主機(jī)目錄 : 容器內(nèi)目錄

# 測(cè)試
[root@dockertest ~]# docker run -it -v /home/ceshi:/home centos /bin/bash

# 啟動(dòng)起來(lái)后我們可以通過(guò) docker inspect 容器id 查看掛載信息
1
1

docker容器數(shù)據(jù)卷怎么使用

測(cè)試文件的同步

docker容器數(shù)據(jù)卷怎么使用

再來(lái)測(cè)試!

1、停止容器

2、宿主機(jī)上修改文件

3、啟動(dòng)容器

4、容器內(nèi)的數(shù)據(jù)依舊是同步的!

docker容器數(shù)據(jù)卷怎么使用

好處:我們以后修改只需要在本地修改即可,容器內(nèi)會(huì)自動(dòng)同步!

實(shí)戰(zhàn):安裝MySQL

思考:MySQL的數(shù)據(jù)持久化的問(wèn)題!

# 獲取鏡像
[root@dockertest network-scripts]# docker pull mysql:5.7

# 運(yùn)行容器。需要做數(shù)據(jù)掛載!    # 安裝啟動(dòng)mysql 需要配置密碼,這是要注意的一點(diǎn)。

# 官方測(cè)試:    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 啟動(dòng)我們的
-d 后臺(tái)運(yùn)行
-p 端口映射
-v 數(shù)據(jù)卷掛載
-e 環(huán)境配置
--name 容器名字
[root@dockertest network-scripts]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
e669cf988dabeea812faa544be2511fe4a5ad0c250022afbd10081f304fe26d7

# 啟動(dòng)成功之后,我們?cè)诒镜厥褂?sqlyog 來(lái)連接測(cè)試一下
# sqlyog--連接到服務(wù)器的3310 --  3310 和容器內(nèi)的 3306 映射,這個(gè)時(shí)候我們就可以連接上了!

# 在本地測(cè)試創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),查看一下我們映射的路徑是否ok!

假設(shè)我們將容器刪除

docker容器數(shù)據(jù)卷怎么使用

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

具名和匿名掛載

# 匿名掛載
-v  容器內(nèi)路徑!
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有的 volume 的情況
[root@dockertest network-scripts]# docker volume ls
DRIVER    VOLUME NAME
local     1b3548d552bdac0cd277157af18c5925903c509940bff9390326a29c1cc83fa2
local     310d040dc6743c5b7b68e2c3cae0399b8103a0144a63c6b1749694f69a17cd91
local     f472a5ba40dc3d7ad4768ee56ea1cff57132fd6f847bb72fd4431c7bd499cede

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

# 具名掛載
[root@dockertest network-scripts]# docker run -d -P --name nginx02 -v qls-nginx:/etc/nginx nginx
acbf53630d19aa7fc614ac54e61c36e3dcbd4d9d914de640fc15f7f841d4959e
[root@dockertest network-scripts]# docker volume ls
DRIVER    VOLUME NAME
local     1b3548d552bdac0cd277157af18c5925903c509940bff9390326a29c1cc83fa2
local     310d040dc6743c5b7b68e2c3cae0399b8103a0144a63c6b1749694f69a17cd91
local     f472a5ba40dc3d7ad4768ee56ea1cff57132fd6f847bb72fd4431c7bd499cede
local     qls-nginx

# 通過(guò) -v  卷名:容器內(nèi)路徑
# 查看一下這個(gè)卷

docker容器數(shù)據(jù)卷怎么使用

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

我們通過(guò)具名掛載可以方便的找到我們的卷,大多數(shù)情況使用 具名掛載

# 如何確定是具名掛載還是匿名掛載,還是指定路徑掛載!
-v    容器內(nèi)路徑    # 匿名掛載
-v    卷名:容器內(nèi)路徑    # 具名掛載
-v    /宿主機(jī)路徑 :: 容器內(nèi)路徑    # 指定路徑掛載!

拓展:

# 通過(guò) -v 容器內(nèi)路徑,ro rw 改變讀寫權(quán)限
ro    readonly    # 只讀
rw    readwrite    # 可讀可寫

# 一旦設(shè)置了這個(gè)容器的權(quán)限,容器對(duì)我們掛載出來(lái)的內(nèi)容就有限定了!
docker run -d -P --name nginx02 -v qls-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v qls-nginx:/etc/nginx:rw nginx

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

初識(shí)Dockerfile

Dockerfile 就是用來(lái)構(gòu)建 docker 鏡像的構(gòu)建文件!命令腳本!先體驗(yàn)一下!(commit可以構(gòu)建,這里講的時(shí)方式二)

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

# 創(chuàng)建一個(gè)dockerfile文件,名字可以隨意,建議起名為 Dockerfile
# 文件中的內(nèi)容

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash

# 這里的每個(gè)命令,就是鏡像的一層。
                

docker容器數(shù)據(jù)卷怎么使用

# 啟動(dòng)自己寫的容器

docker容器數(shù)據(jù)卷怎么使用

這個(gè)卷一定和外部有一個(gè)同步的目錄!

docker容器數(shù)據(jù)卷怎么使用

查看一下卷掛載的路徑

docker容器數(shù)據(jù)卷怎么使用

測(cè)試一下剛才的文件是否同步出去了

這種方式使用的很多,因?yàn)槲覀兺ǔ?huì)構(gòu)建自己的鏡像!

假設(shè)構(gòu)建鏡像時(shí)候沒(méi)有掛載卷,要手動(dòng)鏡像掛載 -v 卷名 : 容器內(nèi)路徑!

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

如兩個(gè)mysql同步數(shù)據(jù)

docker容器數(shù)據(jù)卷怎么使用

# 啟動(dòng)3個(gè)容器,通過(guò)我們剛才自己寫的鏡像啟動(dòng)

docker容器數(shù)據(jù)卷怎么使用

docker容器數(shù)據(jù)卷怎么使用

docker容器數(shù)據(jù)卷怎么使用

docker容器數(shù)據(jù)卷怎么使用

# 測(cè)試:可以刪除docker01,查看一下docker02和03 是否還可以訪問(wèn)這個(gè)文件

# 測(cè)試的結(jié)果,依舊可以訪問(wèn)

docker容器數(shù)據(jù)卷怎么使用

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

[root@dockertest network-scripts]# docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

[root@dockertest network-scripts]# docker run -d -p 3310:3306l -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

# 這個(gè)時(shí)候可以實(shí)現(xiàn)兩個(gè)容器數(shù)據(jù)同步!

“docker容器數(shù)據(jù)卷怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI