Docker | 容器數據卷詳解
什麼是容器數據卷
從docker的理念說起,docker將應用和環境打包成一個鏡像,運行鏡像(生成容器)就可以訪問服務了。
- 如果數據都存在容器中,那麼刪除容器,數據就會丟失!需求:數據可以持久化
- MySQL容器刪了,就相當於刪庫了。需求:MySQL數據可以本地存儲
容器之間可以有一個數據共享的技術,docker容器產生的數據同步到本地或者別的地方。
這就是數據卷技術,就是目錄掛載,將容器內的目錄,掛載到虛擬機上或者Linux上

目的:實現容器數據的持久化和同步操作。容器間也可以數據共享
數據的覆蓋問題
-
如果掛載一個
空的數據卷到容器中的一個非空目錄中,那麼這個目錄下的文件會被複制到數據卷中。 -
如果掛載一個
非空的數據卷到容器中的一個目錄中,那麼容器中的目錄中會顯示數據卷中的數據。如果原來容器中的目錄中有數據,那麼這些原始數據會被隱藏掉。
這兩個規則都非常重要,靈活利用第一個規則可以幫助我們初始化數據卷中的內容。掌握第二個規則可以保證掛載數據卷後的數據總是你期望的結果。
使用數據卷
方式一:直接使用命令掛載 -v
docker run -it -v 主機目錄:容器內目錄
docker run -it -v /home/test:/home centos /bin/bash
docker inspect 命令查看容器資訊

測試掛載卷
1、在容器內部修改文件同步到Linux主機上
進入容器,在/home目錄下創建123.sh文件

主機內可以查看在容器內部創建的文件

2、同樣地,在Linux上修改掛在卷文件可以同步到容器內部

3、停止容器,修改Linux主機上的文件,同步到容器內
# 1、停止容器
exit
# 2、查看容器是否還在運行
docker ps
# 3、在Linux主機上修改對應目錄的文件
# 4、啟動容器並查看
# 4.1、 查看歷史運行的容器
docker ps -a
# 4.2、 啟動容器
docker start CONTAINER ID
# 4.3、 進去容器
docker attach CONTAINER ID
# 4.4、 查看數據卷文件

方式二:Dockerfile文件
請查看下一章節
數據卷命令
docker volume
docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.

具名掛載/匿名掛載
匿名掛載
-v 容器內路徑
-P 自動分配埠號
docker run -d -P --name nginx02 -v /etc/nginx nginx
具名掛載
-v 卷名:容器內路徑
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx

查看數據卷
方式一:docker inspect 容器ID

方式二:docker volume inspect juming-nginx

查看Linux主機docker工作目錄
/var/lib/docker所有docker容器內的卷,沒有指定目錄的情況下都是存放在
/var/lib/docker/volumes/xxx/_data目錄下

掛載三種方式
# 1
-v 容器內路徑 # 匿名掛載
# 2
-v 卷名:容器內路徑 # 具名掛載
# 3
-v 宿主機路徑:容器內路徑 # 指定路徑掛載
擴展
給掛載的數據卷增加讀寫許可權控制
通過 -v 容器內路徑, ro rw 改變讀寫許可權
-
ro readonly 只讀
-
rw readwrite 可讀寫
# 一旦設置了容器許可權,容器對我們掛載出來的內容就有限定了
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx
ro : 說明這個路徑只能通過宿主機來操作,容器內無法操作
我是 甜點cc
熱愛前端,也喜歡專研各種跟本職工作關係不大的技術,技術、產品興趣廣泛且濃厚,等待著一個創業機會。本號主要致力於分享個人經驗總結,希望可以給一小部分人一些微小幫助。
希望能和大家一起努力營造一個良好的學習氛圍,為了個人和家庭、為了中國的互聯網物聯網技術、數字化轉型、數字經濟發展做一點點貢獻。數風流人物還看中國、看今朝、看你我。