前面學習了鏡像的管理、容器的管理,今天學習數據的管理,畢竟一個服務或一個程序的發佈是離不開數據的,數據纔是企業的核心。html
# 1、數據的存放形式
咱們在部署容器的時候每每將數據是存放宿主機目錄的,你想若是把數據存放容器上,一不當心刪除了容器,就哭瞎眼了;並且放宿主機更便於維護和管理。將數據從宿主機掛載到容器中的三種方式:
一、 Volume:Docker會管理宿主機文件系統的一部分(/var/lib/docker/volumes),保存數據的最佳方式。nginx
二、Bind Mounts:將宿主機上的任意位置的文件或目錄掛載到容器中,說白了就是將宿主機的目錄映射到容器的目錄。docker
三、 tmpfs:掛載存儲在主機系統的內存中,而不會寫入主機的文件系統。若是不但願將數據持久存儲在何人位置,可使用tmpfs,同時避免寫入容器可寫層提升性能(此方法基本不用考慮)。app
# volume:
# 管理數據卷:
#docker volume create nginx-vol 建立數據卷
#docker volume ls 查看數據卷
#docker volume inspect nginx-vol 查看數據卷詳細信息
# 用已有卷建立一個容器:
#docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
#docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
解釋:--name=nginx-test ,給容器起名字
--mount 掛載數據卷,docker-ce版本新增的參數
src=nginx-vol 宿主機的數據卷
dst=/** 容器對應的路徑
-v 是舊版本中宿主機和容器目錄映射的參數
# 清理:**
#docker stop nginx-test
#docker rm nginx-test
#docker volume rm nginx-vol
注意:
一、若是沒有指定卷,自動建立
二、建議使用--mount, 更通用。ide
# Bind Mounts
用卷建立一個容器:
#docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
#docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
驗證綁定:
#docker inspect nginx-test
清理:
#docker stop nginx-test
#docker rm nginx-test
注意:
一、若是源文件/目錄沒有存在,建立容器時報錯
二、若是掛載目標在容器中非空目錄,則該目錄現有容器將被隱藏
三、不會自動建立,會拋出一個錯誤。性能
Volume特色:
多個運行容器之間共享數據,多個容器能夠同時掛載相同的卷。
當容器中止或被移除時,該卷依然存在。
當明確刪除卷時,卷纔會被刪除。
將容器的數據存儲咋i遠程主機或其餘存儲上。
將數據從一臺docker主機遷移到另外一臺時,先中止容器,而後容器備份卷的目錄(/var/lib/docker/volumes)
Bind Mount特色:
從主機共享配置文件到容器。默認狀況下,掛載主機/etc/resolv.conf到每一個容器,提供DNS解析。
在docker主機上的開發環境和容器之間共享源代碼。例如,能夠將Maven target目錄掛載到容器中,每次在docker主機上構建Maven項目時,容器均可以訪問構建的項目包。
當docker主機的文件或目錄機構保證與容器所需的綁定掛載一致時學習