docker 容器数据卷
1.是什么
先來(lái)看看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ù)自然也就沒(méi)有了。
為了能保存數(shù)據(jù)在docker中我們使用卷。
一句話:有點(diǎn)類似我們Redis里面的rdb和aof文件
2.能干嗎
卷就是目錄或文件,存在于一個(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ù)卷
特點(diǎn):
1:數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
2:卷中的更改可以直接生效
3:數(shù)據(jù)卷中的更改不會(huì)包含在鏡像的更新中
4:數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
使用
以centos鏡像跑個(gè)容器 在數(shù)據(jù)卷位置 在宿主機(jī)/myDataVolume 文件位置 容器 /dataVolumeContainer centos 文件位置
docker run -it -v /myDataVolume:/dataVolumeContainer centos
只讀權(quán)限(容器只有讀的權(quán)限)
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
docker inspect [容器ID] 查看是否成功
找到下面內(nèi)容 就是成功了
dockerfile
可以自定義創(chuàng)作鏡像的文件
docker build -f /mydata/dockerfile -t zzyy/centos .
-f file 指定文件
-t 命名空間
. 在當(dāng)前目錄
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
說(shuō)明:
出于可移植和分享的考慮,用-v 主機(jī)目錄:容器目錄這種方法不能夠直接在Dockerfile中實(shí)現(xiàn)。
由于宿主機(jī)目錄是依賴于特定宿主機(jī)的,并不能夠保證在所有的宿主機(jī)上都存在這樣的特定目錄。
vim Dockerfile 輸入下面內(nèi)容
# volume testFROM centosVOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]CMD echo "finished,--------success1"CMD /bin/bash運(yùn)行命令
root@wang-virtual-machine:/mydocker# docker build -f /mydocker/Dockerfile -t zzyy/centos . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos---> 300e315adb2f Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]---> Running in 64c5c825c32e Removing intermediate container 64c5c825c32e---> 341e53b2e802 Step 3/4 : CMD echo "finished,--------success1"---> Running in 2119f9efca79 Removing intermediate container 2119f9efca79---> 90fb287eb281 Step 4/4 : CMD /bin/bash---> Running in e49f7edd5dd3 Removing intermediate container e49f7edd5dd3---> d5844312258b Successfully built d5844312258b Successfully tagged zzyy/centos:latest REPOSITORY TAG IMAGE ID CREATED SIZE zzyy/centos latest d5844312258b 21 seconds ago 209MB atguigu/mytomcat 1.2 b1b8324a0dec 4 hours ago 650MB tomcat latest 040bdb29ab37 6 weeks ago 649MB nginx latest f6d0b4767a6c 6 weeks ago 133MB centos latest 300e315adb2f 2 months ago 209MB "Mounts": [{"Type": "volume","Name": "b80080372c5184aa64d251a0655f678e03b9cbdcf6a302966106c6e10b9e486a","Source": "/var/lib/docker/volumes/b80080372c5184aa64d251a0655f678e03b9cbdcf6a302966106c6e10b9e486a/_data","Destination": "/dataVolumeContainer1","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "e387ebcbb56a7230f2fdd8d6f1aec8d574d458432c7f6613894bf60b65e91583","Source": "/var/lib/docker/volumes/e387ebcbb56a7230f2fdd8d6f1aec8d574d458432c7f6613894bf60b65e91583/_data","Destination": "/dataVolumeContainer2","Driver": "local","Mode": "","RW": true,"Propagation": ""}],宿主機(jī)文件位置:
/var/lib/docker/volumes/b80080372c5184aa64d251a0655f678e03b9cbdcf6a302966106c6e10b9e486a/_data
容器文件位置:
/dataVolumeContainer1
–volumes-from 容器間傳遞共享
命名的容器掛載數(shù)據(jù)卷,其它容器通過(guò)掛載這個(gè)(父容器)實(shí)現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱之為數(shù)據(jù)卷容器(可以理解為一個(gè)硬盤上連接幾個(gè)硬盤。其他硬盤繼承這個(gè)硬盤)
docker run -it --name dc04 --volumes-from dc03 zzyy/centosdc04容器 掛載 dc03 鏡像是zzyy/centos
容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止(父容器刪除不影響掛載文件,直到引用為0才會(huì)消失)
總結(jié)
以上是生活随笔為你收集整理的docker 容器数据卷的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ccd视觉定位教程_CCD视觉检测机有哪
- 下一篇: 虚拟机centos7 桥接模式