Docker volume使用
一個數據卷是一個特別指定的目錄,該目錄利用容器的UFS文件系統可以為容器提供一些穩定的特性或者數據共享。數據卷可以在多個容器之間共享。
創建數據卷,只要在docker run命令后面跟上-v參數即可創建一個數據卷,當然你也可以跟多個-v參數來創建多個數據卷,當創建好帶有數據卷的容器后,你就可以在其他容器中通過--volumes-froms參數來掛載該數據卷了,而不管該容器是否運行。你也可以在Dockerfile中通過VOLUME指令來增加一個或者多個數據卷。
如果你有一些數據想在多個容器間共享,或者想在一些臨時性的容器中使用該數據,那么最好的方案就是你創建一個數據卷容器,然后從該臨時性的容器中掛載該數據卷容器的數據。例如如下操作:
#啟動一個Volume_Container容器,包含兩個數據卷docker run -v /var/volume1 -v /var/volume2 -name Volume_Container ubuntu14.04 linux_command#創建App_Container容器,掛載Volume_Container容器中的數據卷docker run -t -i -rm -volumes-from Volume_Container -name App_Container ubuntu14.04 linux_command#或者再創建一個容器,掛載App_Container中從Volume_Container掛載的數據卷docker run -t -i -rm -volumes-from App_Container -name LastApp_Container ubuntu14.04 linux_command
1 在一個終端內創建數據卷容器,并在數據卷目錄內寫入測試文件
2 另打開一個容器,掛載上一個數據卷容器的數據卷,查看測試文件
即使你刪除了剛開始的第一個數據卷容器或者中間層的數據卷容器,只要有其他容器使用數據卷,數據卷都不會被刪除的。
你也可以把一個本地主機的目錄當做數據卷掛載在容器上,同樣是在docker run后面跟-v參數,不過-v后面跟的不再是單獨的目錄了,他是[host-dir]:[container-dir]:[rw|ro]這樣格式的,host-dir是一個絕對路徑的地址,如果host-dir不存在,則docker會創建一個新的數據卷,如果host-dir存在,但是指向的是一個不存在的目錄,則docker也會創建該目錄,然后使用該目錄做數據源。例如:
docker run -i -t -v /tmp:/mnt ubuntu/14.04:14.04 /bin/bash
你不能使用docker export、save、cp等命令來備份數據卷的內容,因為數據卷是存在于鏡像之外的,但是總會有變通方法的,如下:
docker run -rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
創建一個新容器,掛載數據卷容器,同時掛載一個本地目錄,然后把遠程數據卷容器的數據卷通過備份命令備份到映射的本地目錄里面。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選