Docker系列7:邏輯卷

1、存儲卷簡介
php

一、什麼是存儲卷(volume)nginx

  • 就將一個容器的目錄和一個宿主機的目錄同步起來了,就稱之爲volume,也就是存儲卷。docker

  • 當在容器中產生數據的時候,這個數據就會直接寫入到了物理磁盤,就解決了性能的問題apache

  • 使用存儲卷,還實現了數據的持久存儲json

  • 經過使用存儲卷,還能夠實現分佈式bash

    image.png

二、存儲卷的類型架構

  • Bind mount volume:分佈式

  • Docker managed volumeide

Bind mount volume性能

  • 這種類型是指在建立容器的時候,須要同時指定容器中的掛載點和宿主機的一個目錄,這樣來完成掛載

Docker managed volume

  • 這種類型是在建立容器的時候,僅僅須要同指定容器中的掛載點,不須要指定宿主機中的目錄就能夠完成掛載。

  • 宿主機中的目錄會由docker自動生成,並且是隨機生成,默認:/var/lib/docker/vfs/dir/xxxx

案例1:建立一個docker管理的卷

[root@host1 ~]# docker run --name httpd1 -it --rm -v /data busybox
/ # 
/ # echo "test message">>/data/test.txt
/ #
[root@host1 ~]# docker inspect httpd1
"Mounts": [
            {
                "Type": "volume",
                "Name": "636a1967c63705161f941550edf4b0ced1584bf71087596ad61a49df4cd6ae4c",
                "Source": "/var/lib/docker/volumes/636a1967c63705161f941550edf4b0ced1584bf71087596ad61a49df4cd6ae4c/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
[root@host1 ~]# cd /var/lib/docker/volumes/636a1967c63705161f941550edf4b0ced1584bf71087596ad61a49df4cd6ae4c/_data
[root@host1 _data]# cat test.txt 
test message
[root@host1 _data]#

案例2:建立容器,使用宿主機的/disk目錄掛載到容器中

[root@host1 ~]# docker run --name httpd1 -it --rm -v /disk:/data busybox
/ # 
/ # echo "test message">/data/t.txt
/ #
[root@host1 ..]# cat /disk/t.txt 
test message
  • 宿主機上的/disk若是不存在,會自動建立

咱們在設置容器所用的存儲卷的時候,還能夠設置容器所用的存成卷和另外一個容器的存儲卷相同

案例3:好比前面咱們作好了容器httpd1,這裏咱們再作一個httpd2,讓21用相同的存儲卷

[root@host1 ..]# docker run --name httpd2 --rm -it --volumes-from httpd1 busybox
/ # 
/ # ls /data/
t.txt
/ #

三、基礎架構容器使用舉例

  • 首先咱們能夠先作個容器,這個容器不須要運行,而是僅僅做爲一個基礎架構支撐容器

  • 新建容器的卷複製於這個容器,好比,複製三個容器出來,第一個是nginx做爲反向代理,第二個是apache出來靜態請求,第三個是php處理php請求:

    image.png

  • 這個基礎架構支撐容器,還能夠提供一個公共的名稱空間,這樣上面的三個容器就有了相同的IP,主機名,並且也能夠基於127進行通訊了

案例:基於基礎架構容器製做容器

1)先建立基礎架構容器

[root@host1 ~]# docker run --name base1 -it --rm -v /disk:/data busybox

2)建立nginx容器,複製基礎架構的卷,並使用基礎架構名空間

[root@host1 ..]# docker run --name nginx1 \
> --network container:base1 \
> --volumes-from base1 -it nginx:1.14-alpine

過濾容器屬性數據

  • docker inspect的結果是一個列表,在列表列表中是json格式的字符串

  • 若是此時要過濾數據,其格式是 docker inspect -f {xxx} b5 來實現過濾效果

  • -f後面是雙{},外側的{}是固定格式,內側的{}表示從{}中進行過濾

  • 過濾元素的格式 -f '{{.path.item}}'

[root@host1 ..]# docker inspect httpd1 -f '{{.Id}}'
24053ef79c61400f0f8a151087bfd7c1e31e004ee9b87b8a2e64f1efd72d2b52

[root@host1 ..]# docker inspect httpd1 -f '{{.State.Status}}'
running
相關文章
相關標籤/搜索