關(guān)于Docker你不知道的那些事之Docker容器數(shù)據(jù)卷
docker容器數(shù)據(jù)卷
前言
是什么?
docker的理念
能干嘛
數(shù)據(jù)卷(在容器內(nèi)添加)
方式
直接命令添加
DockerFile添加
數(shù)據(jù)卷容器
是什么
總體介紹
容器間傳遞共享(--volumes-from)
總結(jié)
前言
這篇博文介紹的是Docker容器數(shù)據(jù)卷,關(guān)于這部分內(nèi)容也許是我們學(xué)習(xí)和使用docker的核心知識(shí)。學(xué)習(xí)了這部分知識(shí),我們就可以制作自己的將鏡像,運(yùn)行自己定制的容器,可以隨自己的需要任意使用docker,實(shí)實(shí)在在的解決我們的工作痛點(diǎn),提高我們的工作效率,這就是docker技術(shù)存在的意義。
有需要的同學(xué)可以了解一下這篇文章,謝謝。
是什么?
Docker的理念
將運(yùn)用與運(yùn)行的環(huán)境打包形成容器運(yùn)行,運(yùn)行可以伴隨著容器,但是我們對(duì)數(shù)據(jù)的要求希望是持久化的
容器之間希望有可能共享數(shù)據(jù)
Docker容器產(chǎn)生的數(shù)據(jù),如果不通過(guò)Docker commit生成新的鏡像,使得數(shù)據(jù)作為鏡像的一部分保存下來(lái),那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒有了
為了能保存數(shù)據(jù)在docker中我們使用卷
一句話:有點(diǎn)類似我們r(jià)edis里面的rdb和aof文件
能干嘛
容器的持久化
容器間繼承+共享數(shù)據(jù)
卷就是目錄或文件,存在于一個(gè)或多個(gè)容器中,有docker掛載到容器,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過(guò)Union File system 提供一些用于持續(xù)存儲(chǔ)或共享數(shù)據(jù)的特性:
卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此Docker不會(huì)在容器刪除時(shí)刪除其掛在的數(shù)據(jù)卷
數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù),也可以完成容器與主機(jī)之間的數(shù)據(jù)共享。
卷中的更改可以直接生效
數(shù)據(jù)卷中的更改不會(huì)包含在鏡像的更新中
數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
docker cp 從容器內(nèi)拷貝文件到主機(jī)上
數(shù)據(jù)卷(在容器內(nèi)添加)
方式
直接命令添加
DockerFile添加
直接命令添加
命令: docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄 鏡像名
查看數(shù)據(jù)卷是否掛載成功
容器和宿主機(jī)之間數(shù)據(jù)共享
容器停止退出后,主機(jī)修改后數(shù)據(jù)是否同步
命令(帶權(quán)限)
docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄:ro 鏡像名
解釋
ro:只讀
docker inspect 獲取容器/鏡像的元數(shù)據(jù)。
docker inspect是docker客戶端的原生命令,用于查看docker對(duì)象的底層基礎(chǔ)信息。包括容器的id、創(chuàng)建時(shí)間、運(yùn)行狀態(tài)、啟動(dòng)參數(shù)、目錄掛載、網(wǎng)路配置等等。另外,該命令也可以用來(lái)查看docker鏡像的信息。
docker inspect [OPTIONS] NAME|ID [NAME|ID…]
OPTIONS說(shuō)明:
-f :指定返回值的模板文件。
-s :顯示總的文件大小。
–type :為指定類型返回JSON。
# 查看redis:latest鏡像信息 docker inspect --type=image redis # 查看redis容器信息 docker inspect redis
1
2
3
4
5
DockerFile添加
根目錄下新建mydocker文件夾并進(jìn)入
可在Dockerfile中使用VOLUME指令來(lái)給鏡像添加一個(gè)或多個(gè)數(shù)據(jù)卷
File構(gòu)建
# volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finised,---------success1" CMD "/bin/bash"
1
2
3
4
5
翻譯一下,大致是以下意思:
docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 /bin/bash
1
build后生成鏡像:獲得了一個(gè)新的鏡像【zzyy/centos】
run容器
通過(guò)上述步驟,容器內(nèi)的卷目錄地址已經(jīng)知道對(duì)應(yīng)的主機(jī)目錄地址哪??
主機(jī)對(duì)應(yīng)默認(rèn)地址
使用docker inspect [IMAGE_ID]
數(shù)據(jù)卷容器
是什么
命名的容器掛載數(shù)據(jù)卷,其它容器通過(guò)掛載這個(gè)(父容器)實(shí)現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱之為數(shù)據(jù)卷容器
總體介紹
以上一步新建的鏡像zzyy/centos為模板并運(yùn)行容器dc01/dc02/dc03
它們已經(jīng)具有容器卷:/dataVolumeContainer1和/dataVolumeContainer2
容器間傳遞共享(–volumes-from)
先啟動(dòng)一個(gè)父容器dc01:在dataVolumeContainer2新增內(nèi)容
dc02/dc03繼承dc01
–volumes-from :繼承
命令:dc02/dc03分別在dataVolumeContainer2各自新增內(nèi)容
回到dc01可以看到02/03各自添加的都能共享了
刪除dc01,在dc02修改后dc03可否訪問
可以訪問,父容器dc01刪除之后,子容器dc02和dc03也可以進(jìn)行數(shù)據(jù)共享。
刪除dc02后dc03可否訪問 --可以訪問
新建dc04繼承dc03后再刪除dc03 --可以訪問
結(jié)論:容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
總結(jié)
歡迎加關(guān)注,謝謝!!!!
Docker Redis 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。