上一篇:Docker的那些事兒—Docker數(shù)據(jù)卷(一)(29)
本節(jié)繼續(xù)討論docker數(shù)據(jù)卷的相關(guān)操作。
Dockerfile中的VOLUME指令等價(jià)于docker run -v /data
上一節(jié)我們?cè)褂胐ocker run -itd -P -v /data --name myhttp httpd的形式啟動(dòng)容器,運(yùn)行的結(jié)果是docker在/var/lib/docker/volumes下自動(dòng)創(chuàng)建了一個(gè)目錄xxx,并將/var/lib/docker/volumes/xxx/_data目錄掛載到了容器的/data目錄。我們?cè)谇懊鎸W(xué)習(xí)Dockerfile的時(shí)候,知道有一個(gè)VOLUME指令。關(guān)于這個(gè)VOLUME指令的用法可以去查看:Dockerfile常用指令章節(jié)。我們簡(jiǎn)單的寫個(gè)Dockerfile,然后build鏡像,并使用新的鏡像啟動(dòng)一個(gè)容器。
FROM httpd
VOLUME ["/data"]
CMD [“/bin/bash”]
新的鏡像為httpd:v1.0,docker run啟動(dòng)時(shí)未使用-v選項(xiàng)

Docker仍然創(chuàng)建了卷:
bd3883a57997ee16365fac702e4915fb6a43c8175b67d42413e182f7cad5e820,并且將/var/lib/docker/volumes/bd3883a57997ee16365fac702e4915fb6a43c8175b67d42413e182f7cad5e820/_data掛載到了容器/data下。

docker container inspect 242cdd1fbfe4

這就是Dockerfile中VOLUME指令的作用。
docker run命令支持多個(gè)-v選項(xiàng)
例如:docker run -itd --rm -v?my_volume1:/data1 -v my_volume2:/data2 --name myhttp httpd。其執(zhí)行結(jié)果:
1、創(chuàng)建了兩個(gè)本地卷my_volume1和my_volume2,可以使用docker volume ls查詢。
2、分別將/var/lib/docker/volumes/my_volume1/_data和/var/lib/docker/volumes/my_volume2/_data掛載到容器的/data1和/data2目錄。


同一個(gè)卷支持掛載到多個(gè)容器,實(shí)現(xiàn)多個(gè)容器的數(shù)據(jù)共享
例如:
docker run -itd --rm -v my_volume1:/data1 --name myhttp1 httpd
docker run -itd --rm -v my_volume1:/data2 --name myhttp2 httpd


