docker 容器数据卷
1.是什么
先來看看Docker的理念:
-
將運用與運行的環境打包形成容器運行 ,運行可以伴隨著容器,但是我們對數據的要求希望是持久化的
-
容器之間希望有可能共享數據
Docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據做為鏡像的一部分保存下來,
那么當容器刪除后,數據自然也就沒有了。
為了能保存數據在docker中我們使用卷。
一句話:有點類似我們Redis里面的rdb和aof文件
2.能干嗎
卷就是目錄或文件,存在于一個或多個容器中,由docker掛載到容器,但不屬于聯合文件系統,因此能夠繞過Union File System提供一些用于持續存儲或共享數據的特性:
卷的設計目的就是數據的持久化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數據卷
特點:
1:數據卷可在容器之間共享或重用數據
2:卷中的更改可以直接生效
3:數據卷中的更改不會包含在鏡像的更新中
4:數據卷的生命周期一直持續到沒有容器使用它為止
使用
以centos鏡像跑個容器 在數據卷位置 在宿主機/myDataVolume 文件位置 容器 /dataVolumeContainer centos 文件位置
docker run -it -v /myDataVolume:/dataVolumeContainer centos
只讀權限(容器只有讀的權限)
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
docker inspect [容器ID] 查看是否成功
找到下面內容 就是成功了
dockerfile
可以自定義創作鏡像的文件
docker build -f /mydata/dockerfile -t zzyy/centos .
-f file 指定文件
-t 命名空間
. 在當前目錄
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
說明:
出于可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。
由于宿主機目錄是依賴于特定宿主機的,并不能夠保證在所有的宿主機上都存在這樣的特定目錄。
vim Dockerfile 輸入下面內容
# volume testFROM centosVOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]CMD echo "finished,--------success1"CMD /bin/bash運行命令
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": ""}],宿主機文件位置:
/var/lib/docker/volumes/b80080372c5184aa64d251a0655f678e03b9cbdcf6a302966106c6e10b9e486a/_data
容器文件位置:
/dataVolumeContainer1
–volumes-from 容器間傳遞共享
命名的容器掛載數據卷,其它容器通過掛載這個(父容器)實現數據共享,掛載數據卷的容器,稱之為數據卷容器(可以理解為一個硬盤上連接幾個硬盤。其他硬盤繼承這個硬盤)
docker run -it --name dc04 --volumes-from dc03 zzyy/centosdc04容器 掛載 dc03 鏡像是zzyy/centos
容器之間配置信息的傳遞,數據卷的生命周期一直持續到沒有容器使用它為止(父容器刪除不影響掛載文件,直到引用為0才會消失)
總結
以上是生活随笔為你收集整理的docker 容器数据卷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ccd视觉定位教程_CCD视觉检测机有哪
- 下一篇: 虚拟机centos7 桥接模式