發現其他人構建容器docker run與自己寫法不一樣
docker run --name=mysql5.7.21 \
-p 33061:3306 \
--privileged=true \
--mount type=bind,src=/data/mysql/conf/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/data/mysql/data,dst=/var/lib/mysql \
--restart=always \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql/mysql-server:5.7.21
好奇研究一下這個 --mount type 與-v
首先官方文檔說明
https://docs.docker.com/storage/
默認情況下,在容器內創建的所有文件都存儲在可寫容器層上。這意味着:
- 當該容器不再存在時,數據不會持續存在,並且如果另一個進程需要數據,則可能很難將數據從容器中取出。
- 容器的可寫層與運行容器的主機緊密耦合。您無法輕松地將數據移動到其他地方。
- 寫入容器的可寫層需要 存儲驅動程序來管理文件系統。存儲驅動程序提供了一個聯合文件系統,使用 Linux 內核。與使用直接寫入主機文件系統的數據卷相比,這種額外的抽象會降低性能 。
Docker 有兩個選項讓容器在主機上存儲文件,以便即使在容器停止后文件也能持久保存:volumes和 bind mounts。
Docker 還支持將文件存儲在主機內存中的容器。此類文件不會持久保存。如果您在 Linux 上運行 Docker,則使用tmpfs mount將文件存儲在主機的系統內存中。如果您在 Windows 上運行 Docker,命名管道用於將文件存儲在主機的系統內存中。
繼續閱讀有關持久化數據或利用內存文件的更多信息。
選擇正確的坐騎類型
無論您選擇使用哪種類型的掛載,容器內的數據看起來都是一樣的。它以目錄或容器文件系統中的單個文件的形式公開。
可視化卷、綁定掛載和tmpfs
掛載之間差異的一種簡單方法是考慮數據在 Docker 主機上的位置。
-
卷存儲在由 Docker(
/var/lib/docker/volumes/
在 Linux 上)管理的主機文件系統的一部分中。非 Docker 進程不應修改文件系統的這一部分。卷是在 Docker 中持久化數據的最佳方式。 -
綁定掛載可以存儲在主機系統的任何位置。它們甚至可能是重要的系統文件或目錄。Docker 主機或 Docker 容器上的非 Docker 進程可以隨時修改它們。
-
tmpfs
掛載僅存儲在主機系統的內存中,永遠不會寫入主機系統的文件系統。
......
看個開頭基本上已經差不多明白了 --mount type 就跟nfs/mount類似的功效;-V 相當於"給容器添加了一塊磁盤" 以供容器管理開銷 “非 Docker 進程不應修改文件系統的這一部分” 也很好的說明了某些在容器內的修改失效的情況
查了一下其他博主相關的解說
容器自身存儲的問題
Docker鏡像是由多個文件系統(只讀層)疊加而成,容器啟動的時候是在原鏡像層上面加了一層可讀寫層,容器層,如果運行中的容器修改了現有的一個已經存在的文件,那該文件將會從讀寫層下面的只讀層復制到讀寫層,該文件的只讀版本仍然存在,只是已經被讀寫層中該文件的副本所隱藏。當刪除Docker容器<不commit-Jaylon補充>,並通過該鏡像重新啟動時,之前的更改將會丟失。
————————————————
版權聲明:本文為CSDN博主「Y。S。H。」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yangshihuz/article/details/103976407
不搬運了 就此結束