Docker與docker-compose中volume參數(shù)的使用方式
數(shù)據(jù)卷Volume的概念
在docker內(nèi)有個(gè)“數(shù)據(jù)卷持久化”的概念,也就是我們常說的“數(shù)據(jù)掛載”。
它的作用是,將宿主機(jī)上的數(shù)據(jù)與容器內(nèi)的數(shù)據(jù)形成映射,實(shí)現(xiàn)數(shù)據(jù)的共享或者數(shù)據(jù)的保存;當(dāng)刪除容器的時(shí)候,在宿主機(jī)上仍然能夠保留文件目錄,這就是Volume,數(shù)據(jù)卷。
數(shù)據(jù)掛載的實(shí)現(xiàn)方式
docker實(shí)現(xiàn)數(shù)據(jù)掛載的方式本質(zhì)上分為兩種:
- 通過宿主機(jī)絕對(duì)路徑掛載
- 通過卷標(biāo)映射掛載(又包括匿名掛載與具名掛載)
宿主機(jī)路徑掛載在docker/docker-compose中的使用
使用方法:
# docker
docker run -itd -v 宿主機(jī)路徑:容器路徑 --name 容器名 鏡像
# docker-compose.yaml
services:
service_name:
container_name: container_name
image: image:tag
restart: always
volumes:
- 宿主機(jī)路徑:容器路徑引例如下:

卷標(biāo)映射掛載在docker/docker-compose中的使用
當(dāng)使用卷標(biāo)的方式進(jìn)行數(shù)據(jù)掛載的時(shí)候,容器數(shù)據(jù)具體存放在宿主機(jī)的什么路徑其實(shí)并不直觀,但是docker提供了方法查看數(shù)據(jù)卷的宿主機(jī)目錄,具體查看的方法如下,后文會(huì)在引例中直觀說明。
# 查看所有的數(shù)據(jù)卷 sudo docker volume ls # 查看指定數(shù)據(jù)卷的詳細(xì)信息 sudo docker volume inspect 數(shù)據(jù)卷名稱
A.匿名掛載
使用方法:
# docker
docker run -itd -v 容器路徑 --name 容器名 鏡像
# docker-compose.yaml
services:
service_name:
container_name: container_name
image: image:tag
restart: always
volumes:
- 容器路徑引例:

這種情況下,我們可以看到,當(dāng)我們通過docker volume ls查看卷標(biāo)的時(shí)候,我們只能查看到其對(duì)應(yīng)的“匿名”的數(shù)據(jù)卷。
如下圖所示,如果我們隨便查看一個(gè)數(shù)據(jù)卷的詳細(xì)信息(命令為docker volume inspect 數(shù)據(jù)卷),可以看出其掛載點(diǎn)實(shí)際是在/var/lib/docker/volumes/<uuid>/_data下面的,其中uuid是docker自動(dòng)生成的,而/var/lib/docker是docker的默認(rèn)路徑。

B.具名掛載
使用方法:
# docker
docker run -itd -v 數(shù)據(jù)卷名稱:容器路徑 --name 容器名 鏡像
# docker-compose.yaml
services:
service_name:
container_name: container_name
image: image:tag
restart: always
volumes:
- 數(shù)據(jù)卷名稱:容器路徑
volumes:
數(shù)據(jù)卷名稱:引例:

這種情況下,我們可以看到,當(dāng)我們通過docker volume ls查看卷標(biāo)的時(shí)候,我們能查看到其對(duì)應(yīng)的“具名”的數(shù)據(jù)卷。
可以看出其掛載點(diǎn)實(shí)際是在/var/lib/docker/volumes/<數(shù)據(jù)卷名稱>/_data下面的,/var/lib/docker是docker的默認(rèn)路徑。
別急,特別針對(duì)docker-compose,還有另一個(gè)現(xiàn)象要看,如下:

可以看到,當(dāng)我們通過docker-compose啟動(dòng)容器時(shí),數(shù)據(jù)卷的名稱多了一個(gè)software的前綴,而這正是docker-compose.yaml的存放路徑,同時(shí)其掛載點(diǎn)在/var/lib/docker/volumes/<yaml路徑_數(shù)據(jù)卷名稱>/_data下面的。
特別的,如果docker-compose在根目錄執(zhí)行,則數(shù)據(jù)卷的名稱的前綴會(huì)默認(rèn)設(shè)置為default。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在wsl-ubuntu中如何通過 docker 啟動(dòng) gpu-jupyter
這篇文章主要介紹了在wsl-ubuntu中如何通過 docker 啟動(dòng) gpu-jupyter,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
Docker部署Go項(xiàng)目發(fā)布鏡像到倉庫
這篇文章主要為大家介紹了Docker部署Go項(xiàng)目發(fā)布鏡像到倉庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
docker安裝openjdk并運(yùn)行jar包的操作方法
這篇文章主要介紹了docker安裝openjdk并運(yùn)行jar包的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Ubuntu20.04上安裝docker步驟及docker使用方法
Docker是一個(gè)可以簡化容器中應(yīng)用程序進(jìn)程管理過程的應(yīng)用程序,容器允許你在資源隔離的進(jìn)程中運(yùn)行應(yīng)用程序,這篇文章主要介紹了Ubuntu20.04上安裝docker步驟及docker使用的相關(guān)資料,需要的朋友可以參考下2026-04-04
Docker沒有啟動(dòng)環(huán)境變量的問題解決
在使用Docker容器時(shí),有時(shí)候我們會(huì)遇到一個(gè)問題,就是在容器中沒有啟動(dòng)環(huán)境變量,本文主要介紹了Docker沒有啟動(dòng)環(huán)境變量的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
詳解利用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置
本篇文章主要介紹了詳解利用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

