「docker volume」和掛載的區別是:「docker volume」是宣告式的,「Docker Engine」本身會佔用系統的某個目錄,Docker會預設在佔用的路徑下為volume分配一個路徑;而掛載不會佔用一個路徑作為掛載點。
本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。
docker volume和掛載的區別是什麼
#一直一來,對於多個容器需要共享存取相同資料目錄,或者需要持久化容器內資料(如資料庫)時,我們都是採用掛載目錄形式(bind mounts),將宿主機的某一目錄掛載到容器內的指定目錄,這種方式能解決問題,但這種方式也一直有一些缺點:
- 容器在不同的伺服器部署需要根據實際磁碟掛載目錄修改路徑
- 不同作業系統的檔案和目錄權限會搞得你昏頭轉向,火冒三丈 ?
而這些問題,使用Volume就可以解決。我們先來比較一下bind mounts和docker volume,然後看volume是如何解決bind mounts的問題的。先來看一張圖:

這圖說明bind mount和volume其實都是利用宿主機的檔案系統,不同之處在於volume是docker自身管理的目錄中的子目錄,所以不存在權限引發的掛載的問題,並且目錄路徑是docker自身管理的,所以也不需要在不同的伺服器上指定不同的路徑,你不需要關心路徑(其實也不全是,下面會關心?)。接下來就來看看bind mount和volume的不同用法吧。
1. 容器在不同的伺服器部署需要根據實際磁碟掛載目錄修改路徑
例如:
在Linux系統中,我們經常使用"/var/someDir"作為掛載目錄;
然而到了Mac上,/var/ 並不是真實存在的目錄,Mac用戶會告訴你,我們比Linux更先進,我們不用/var/ ,使用者不需要;
在Windows系統中,Windows使用者會反問你:/var/ 是什麼? C盤、D盤是最合理的分法~


2. 不同作業系統的檔案與目錄權限會搞得你昏頭轉向,火冒三丈 ?
本來在Linux系統中測試的挺好,結果到了Windows上掛載路徑各種問題,這裡就不一一細說了,沒有遇到這些問題的可以嘗試一下,體驗體驗。不過在Mac中還好一些,畢竟和Linux同宗。
Docker中除了掛載方式,還有一種Volume可以持久化數據,說到這裡有點汗顏,使用Docker這麼久,一直把掛載當成Volume,不過也不怪我,Docker-compose檔案中在volume段中寫容器和宿主機掛載路徑映射關係也沒問題,就一直這麼誤解了。 。 (花式甩鍋?)
其實「掛載」和「Docker Volume」並不是一回事,有一定的區別,Docker Volume是聲明式的, Docker Engine本身會佔用系統的某個目錄,Linux一般為"/var/lib/docker",Mac和Windows下都可以調節。當我們宣告一個volume,Docker會預設在佔用的路徑下為volume分配一個路徑,例如:

- docker run -d -v "test_vol:/var/data" some_image,這樣就將容器內的/var/data目錄掛載到了"test_vol"的掛載點;
- docker-compose中類似,不過要在docker-compose.yaml檔案中宣告volume,我們還是拿上面的範例修改一下:
Attention !!
- 需要注意volume 會造成docker目錄膨脹,因為既要存鏡像,又要存volume,最好不要放在系統盤,將docker 的安裝目錄配置到其他更大的掛載碟。
- 兩者有一個不同的行為:當容器外的對應目錄是空的,volume會先將容器內的內容拷貝到容器外目錄,而mount會將外部的目錄覆蓋容器內部目錄! !
- volume 還有一個不如bind mount的地方,不能直接掛載文件,例如掛載nginx容器的設定檔:nginx.conf。
這裡需要說明,類似於配置文件這種單文件方式並不適合使用volume,bind mount雖然也可以解決,但由於config文件中包含一些類似於數據庫密碼等敏感信息,因此,最好的方式是使用tmpfs。
kubernetes的volume也體現出類似的設計,subPath雖然可以解決設定檔掛載的問題,但實際上最好的方式是使用configMap。
推薦學習:《docker影片教學》
以上是docker volume和掛載的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

AUFS是docker最早支持的存储引擎。AUFS是一种Union File System,是文件级的存储驱动,是Docker早期用的存储驱动,是Docker18.06版本之前,Ubuntu14.04版本前推荐的,支持xfs、ext4文件。

docker中的镜像会自动更新;可以利用Watchtower工具来自动更新镜像,Watchtower是一个可以监控正在运行的容器镜像是否更新的工具,当本地镜像与远程镜像有差异的时候,可以自动使用当前容器的运行参数以新镜像重新创建一个新的容器,并删除旧的容器。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),