Docker入門:(五)容器數據券

概念

Docker中的數據可以存儲在類似於虛擬機磁盤的介質中,在Docker中稱爲數據卷(Data Volume)。數據卷可以用來存儲Docker應用的數據,也可以用來在Docker容器間進行數據共享。

Docker的理念將運行的環境打包形成容器運行,運行可以伴隨容器,但是我們對數據的要求是希望持久化,容器之間可以共享數據,Docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據作爲容器的一部分保存下來,那麼當容器被刪除之後,數據也就沒了,爲了能夠保存數據,在docker容器中使用卷。

數據卷呈現給Docker容器的形式就是一個目錄,支持多個容器間共享,不屬於聯合文件系統,修改也不會影響鏡像。使用Docker的數據卷,類似在系統中使用 mount 掛載一個文件系統。

卷的設計目的就是數據的持久化,完全獨立與容器的生命週期,因此Docker不會在容器刪除時刪除其掛載的數據卷。
特點:

  1. 數據卷可以在容器之間共享和重用數據。
  2. 卷的更改可以直接生效。
  3. 數據卷的更改不會包含在鏡像的更新中。
  4. 數據卷的生命週期一直持續到沒有容器使用它爲止。

容器數據券添加

命令添加

創建數據券

$ docker run -it -v /宿主機目錄:/容器目錄 鏡像名

執行命令後,在宿主機和容器創建數據券目錄
在這裏插入圖片描述
使用命令 docker inspect 6946198b2e8c查看數據券是否掛載成功
在這裏插入圖片描述
掛載成功後,就可以實現容器和宿主機之間的數據共享,在容器內操作的數據會同步到宿主機,在宿主機操作的數據也會同步到容器
在這裏插入圖片描述

數據券權限

$ docker run -it -v /宿主機目錄:/容器目錄:ro 鏡像名

在容器目錄後加:ro(readonly),是創建只讀數據券,這樣只允許宿主機單向操作數據券,而容器內不能操作數據券

DockerFile添加

出於可移植和分享的考慮,用-v主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。由於宿主機目錄是依賴於特定宿主機的,並不能保證在所有的宿主機上都存在這樣的特定目錄
DockerFile可以使用VOLUME指令給鏡像添加一個或者多個數據券

1.DockerFile的構建

在這裏插入圖片描述
該DockerFile表示基於centos,創建兩個數據卷,並打印“start my docker image…”,然後執行/bin/bash

該DokcerFile含義類似於docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash

2.build後生成鏡像

命令:docker build [OPTIONS] PATH | URL | -

Options:
-f 後綴dockerfile文件路徑
在這裏插入圖片描述
執行build命令,創建鏡像,可以看到,控制檯打印了“start my docker image…”
如圖創建鏡像成功
在這裏插入圖片描述

3. 使用鏡像運行容器

創建鏡像之後,我們就可以使用docker run來運行容器
在這裏插入圖片描述
運行之後,查看目錄,發現容器券創建成功,但是這時候有個問題,我們在命令添加數據券的時候指定了宿主機的目錄,可以和容器內數據券目錄共享,但是用dockerfile執行因爲沒有指定宿主機目錄,那容器數據券如何共享呢?實際上docker給我們創建了默認的宿主機目錄
在這裏插入圖片描述
: 如果碰到Dokcer掛載主機目錄Docker訪問出現cannot opendirectory …Permission denied 在掛載目錄後加上 --privileged=true參數即可

數據卷容器

命名的容器掛載數據卷,其他容器通過掛載這個容器(父容器)實現數據共享,掛載數據卷的容器,稱之爲數據卷容器
數據卷共享命令:–volumes-from
創建第一個容器,容器內創建容器數據卷,在數據卷內創建一個文件,這個容器就是數據卷容器
在這裏插入圖片描述
我們以第一個容器作爲父容器,創建二個容器

docker run -it --name container02 --volumes-from container01 wmx/centos
docker run -it --name container03 --volumes-from container01 wmx/centos

在這裏插入圖片描述
從上圖我們可以看出,我在父容器中創建的文件出現在了容器2中,容器2中創建的文件也出現在了容器3中,我們在容器3(子容器)中創建的文件,也出現在了容器1中,可見,並不是只有父容器可以向子容器共享文件,子容器中創建的文件也能共享到父容器中。而且即使我們刪除父容器,因爲數據已經共享到子容器,也不會影響數據
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章