是什么
先來看看Docker的理念:
- 將運用與運行的環境打包形成容器運行,運行可以伴隨著容器,但是我們對資料的要求希望是持久化的
- 容器之間希望有可能共享資料
Docker容器產生的資料,如果不通過docker commit生成新的鏡像,使得資料做為鏡像的一部分保存下來, 那么當容器洗掉后,資料自然也就沒有了,
為了能保存資料在docker中我們使用卷,
一句話:有點類似我們Redis里面的RDB和AOF
能干嘛
卷就是目錄或檔案,存在于一個或多個容器中,由docker掛載到容器,但不屬于聯合檔案系統,因此能夠繞過Union FileSystem提供一些用于持續存盤或共享資料的特性:
卷的設計目的就是資料的持久化,完全獨立于容器的生存周期,因此Docker不會在容器洗掉時洗掉其掛載的資料卷,
特點:
- 資料卷可在容器之間共享或重用資料
- 卷中的更改可以直接生效
- 資料卷中的更改不會包含在鏡像的更新中
- 資料卷容器的生命周期一直持續到沒有容器使用它為止 (--volumes from)
總結:
- 容器資料的持久化
- 容器間繼承+共享資料
資料卷
-
直接命令添加
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 鏡像名 // 帶命令,指定訪問權限, ro: read only
查看資料卷是否掛載成功:
docker inspect 容器ID


-
使用DockerFile添加
根目錄下新建mydocker檔案夾并進入
可在Dockerfile中使用VOLUME指令來給鏡像添加一個或多個資料卷

DockerFile 構建
DockerFile的撰寫可以參考 DockerHub 中各鏡像的DockerFile檔案,如tomcat:https://github.com/docker-library/tomcat/blob/300ac03f4696c761a81fa10afbb893f3368061de/8.5/jdk8/openjdk-buster/Dockerfile
#volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,-------success1" CMD /bin/bash
build后生成鏡像

獲得一個新鏡像zzyy/centos
run容器

通過上述步驟,容器內的卷目錄地址已經知道,對應的主機目錄在哪

備注:
Docker掛載主機目錄Docker訪問出現cannot open directory,Permission denied
解決辦法:在掛載目錄后多加一個--privileged=true引數即可
資料卷容器
-
是什么
命名的容器掛載資料卷,其它容器通過掛載這個(父容器)實作資料共享,掛載資料卷的容器,稱之為資料卷容器.
-
容器間傳遞共享(--volumes -from)
docker run -it --name dco2 --volumes-from dc01 zzyy/cenos // dc01是先創建的容器,dco2繼承dc01,實作資料共享
資料卷由父容器(dc01)掛載,如果在dc02,dc03掛載dc01后,洗掉dc01,資料卷仍然會有效,
容器之間配置資訊的傳遞,資料卷的生命周期一直持續到沒有容器使用它為止,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195908.html
標籤:Java
下一篇:群暉DS218+部署mysql
