Docker資料卷

Pluto_H發表於2020-10-23

1.容器資料卷簡介 

  一句話:有點類似我們Redis裡面的rdb和aof檔案

2.容器資料卷作用

 

  容器的持久化

  容器間繼承+共享資料

3.資料卷使用

[1].使用命令方式新增

(1).容器新增

語法:docker run -it -v /宿主機絕對路徑目錄:/容器內目錄      映象名

[root@pluto /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos:6.8

 

(2).檢視資料卷是否掛載成功

語法:docker inspect 容器ID

[root@pluto /]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

04bd9add86e3        centos:6.8          "/bin/bash"         4 minutes ago       Up 4 minutes                            angry_payne         

[root@pluto /]# docker inspect 04bd9add86e3

 

(3).容器和宿主機之間資料共享

 

(4).容器停止退出後,主機修改後資料是否同步

 

(5).僅讀

語法:docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 映象名

 

[2].DockerFile新增

(1).在主機建立目錄

  根目錄下新建mydocker資料夾並進入

[root@pluto /]# mkdir /mydocker

[root@pluto /]# cd mydocker/

(2).File構建

語法:VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

說明:

  出於可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。

  由於宿主機目錄是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。

  可在Dockerfile中使用VOLUME指令來給映象新增一個或多個資料卷

[root@pluto mydocker]# pwd

/mydocker

[root@pluto mydocker]# vim Dockerfile

 

# volume test

FROM centos:centos6.8

VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]

CMD echo "finished,--------success1"

CMD /bin/bash

  因為本機系統是centos6.8,所以如果不指定可能會出現"FATAL: kernel too old"的情況

(3).build

  build後生成映象,獲得一個新映象pluto/centos

[root@pluto mydocker]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos              6.8                 efa3cf7ee1f9        17 months ago       194.5 MB

[root@pluto mydocker]# docker build -f /mydocker/Dockerfile -t pluto/centos .

 

(4).run容器  

[root@pluto mydocker]# docker run -it pluto/centos

 

(5).容器卷目錄

  找到容器內的卷目錄地址對應的主機目錄地址

[root@pluto /]# docker ps

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES

a7e8f6f016b4        pluto/centos        "/bin/sh -c /bin/bas   46 minutes ago      Up 46 minutes                           modest_morse           

[root@pluto /]# docker inspect pluto/centos

 

 

  如果出現"cannot open directory"的錯誤

Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied

解決辦法:在掛載目錄後多加一個--privileged=true引數即可

4.資料卷容器

  命名的容器掛載資料卷,其它容器通過掛載這個(父容器)實現資料共享,掛載資料卷的容器,稱之為資料卷容器

 

 

 Docker run -it --name mydocker1 pluto/cetos

相關文章