常見的使用場景是使用純數據容器來持久化數據庫、配置文件或者數據文件等。官方的文檔上有詳細的解釋。例如:web
$ docker run --name dbdata postgres echo "Data-only container for postgres"
該命令將會建立一個已經包含在Dockerfile裏定義過Volume的postgres鏡像,運行echo命令而後退出。當咱們運行docker ps命令時,echo能夠幫助咱們識別某鏡像的用途。咱們能夠用-volumes-from命令來識別其它容器的Volume:docker
$ docker run -d --volumes-from dbdata --name db1 postgres
使用數據容器的兩個注意點:shell
不要運行數據容器,這純粹是在浪費資源。數據庫
不要爲了數據容器而使用「最小的鏡像」,如busybox或scratch,只使用數據庫鏡像自己就能夠了。你已經擁有該鏡像,因此並不須要佔用額外的空間。ubuntu
若是要受權一個容器訪問另外一個容器的Volume,咱們可使用-volumes-from參數來執行docker runbash
#sudo docker run --volumes-from dbdata -v $(pwd):/backup--name worker ubuntu tar cvf /backup/backup.tar /dbdata
首先利用ubuntu鏡像建立一個容器worker.使用—volumes-from dbdata參數來讓容器掛載dbdata容器的數據卷;使用 –v $(pwd):/backup參數來掛載本機的當前目錄到worker容器的/backup目錄
Woker容器啓動後,執行tar命令將/dbdata壓縮到/backup/backup.tar,這樣就到物理機的當前目錄了app
在用docker run命令的時候,使用-v標記能夠在容器內建立一個數據卷。屢次使用-v標記能夠建立多個數據卷。
下面使用training/webapp鏡像建立一個Web容器,並建立一個數據卷掛載到容器的/we-bapp目錄:
$ sudo docker run -d -P --name web -v /webapp training/webapp
注意 -P是容許外部訪問容器須要暴露的端口。webapp
查看該數據卷在主機上的存儲目錄post
docker inspect -f {{.Volumes}} your-container-name
這種應該是在主機/var/lib/docker目錄底下隨機命名的一個目錄去掛載,若是是在mac上,則該目錄在visualbox上面。code
這個是在dockerfile中VOLUME沒法作到的
)使用-v標記也能夠指定掛載一個本地的已有目錄到容器中去做爲數據卷:
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp
上面的命令加載主機的/src/webapp目錄到容器的/opt/webapp目錄
掛載一個本地主機文件做爲數據卷-v標記也能夠從主機掛載單個文件到容器中做爲數據卷:
$ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash這樣就能夠記錄在容器輸入過的命令歷史了。