1、存儲卷簡介
php
一、什麼是存儲卷(volume)nginx
就將一個容器的目錄和一個宿主機的目錄同步起來了,就稱之爲volume,也就是存儲卷。docker
當在容器中產生數據的時候,這個數據就會直接寫入到了物理磁盤,就解決了性能的問題apache
使用存儲卷,還實現了數據的持久存儲json
經過使用存儲卷,還能夠實現分佈式bash
二、存儲卷的類型架構
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,讓2和1用相同的存儲卷
[root@host1 ..]# docker run --name httpd2 --rm -it --volumes-from httpd1 busybox / # / # ls /data/ t.txt / #
三、基礎架構容器使用舉例
首先咱們能夠先作個容器,這個容器不須要運行,而是僅僅做爲一個基礎架構支撐容器
新建容器的卷複製於這個容器,好比,複製三個容器出來,第一個是nginx做爲反向代理,第二個是apache出來靜態請求,第三個是php處理php請求:
這個基礎架構支撐容器,還能夠提供一個公共的名稱空間,這樣上面的三個容器就有了相同的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