Docker數據卷 Volume 掛載,容器路徑與linux主機路徑的一致性映射,mysql 實戰


十年河東,十年河西,莫欺少年窮

學無止境,精益求精

本文參考:你必須知道的Docker數據卷(Volume)  【作者是阿里雲最有價值MVP,第一次見到這個稱呼~_~】

1.引言

docker的鏡像是由多個只讀的文件系統疊加在一起形成的。當我們在我啟動一個容器的時候,docker會加載這些只讀層並在這些只讀層的上面(棧頂)增加一個讀寫層。這時如果修改正在運行的容器中已有的文件,那么這個文件將會從只讀層復制到讀寫層。該文件的只讀版本還在,只是被上面讀寫層的該文件的副本隱藏。當刪除docker,或者重新啟動時,之前的更改將會消失。在Docker中,只讀層及在頂部的讀寫層的組合被稱為Union File System(聯合文件系統)。

為了很好的實現數據保存和數據共享,Docker提出了Volume這個概念,簡單的說就是繞過默認的聯合文件系統,而以正常的文件或者目錄的形式存在於宿主機上。又被稱作數據卷。

在Docker中,要想實現數據的持久化(所謂Docker的數據持久化即數據不隨着Container的結束而結束),需要將數據從宿主機掛載到容器中。目前Docker提供了三種不同的方式將數據從宿主機掛載到容器中:說白了就是當我們刪除容器時,為了保留容器運行期間產生的數據,通過數據卷volume技術,實現容器內部與linux主機上文件目錄共享的技術。

2.數據卷

2.1、創建數據卷,新建的數據卷默認會放在linux主機的位置為: /var/lib/docker/volumes 目錄中

docer volume create 數據卷名稱

2.2、 查看數據卷

docker volume ls // 查看所有容器卷
docker volume inspect 數據卷名稱  //查看數據卷詳情

 

 

  2.3、刪除數據卷

# docker stop edc-nginx // 暫停容器實例
# docker rm edc-nginx // 移除容器實例
# docker volume rm edc-nginx-vol // 刪除自定義數據卷

創建使用指定卷的容器,也稱之為掛載數據卷

docker run -it --name=centos01 -v myvol01:/home/centosvol01 centos /bin/bash

其中myvol01 為我們創建的數據卷 /home/centosvol01 為容器內路徑 

如果不使用默認的數據卷存放路徑,我們可以顯式的指定一個本機路徑,如下:

docker run -it --name=centos01 -v /home/share/centosvol01:/home/centosvol01 --name=centos002 centos /bin/bash

其中 /home/share/centosvol01 為本地路徑  /home/centosvol01 為容器內路徑

 2.4、查看容器是否數據卷掛載是否成功

docker inspect 容器ID

 

 此時,我們不管是在主機路徑內新建一個文件,還是在容器內路徑新建一個文件,都會展示到兩個目錄中。也可以理解為:這兩個路徑進行了雙向綁定,或者一致性映射。

通過MYSQL進行實戰

1、拉取Mysql鏡像

docker pull mysql:5.7

2、設置MySql容器路徑掛載、端口映射、登錄密碼 可參考官方文檔:https://hub.docker.com/_/mysql

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/comf.d -v /home/mysql/data:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

-d 后台運行

-p 端口映射

-v 數據卷掛載  兩個-v 掛載兩個目錄

-e 環境配置,這里配置的是密碼

--name 給容器起個名字

3、通過Navicat連接數據庫,下載Navicat 地址:https://www.navicat.com/en/products

2022-12-09 更新

具名掛載

所謂具名掛載,就是掛載時,指定數據卷名稱

1、新建MYsql 存儲data的數據卷

docker volume create mysqlDatavolume

2、新建Mysql存儲配置文件的數據卷

docker volume create mysqlConfvolume

3、具名掛載

docker run -d --name mysql01 -p 3316:3306 -v mysqlDatavolume:/var/lib/mysql -v mysqlConfvolume:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql

其他:

刪除數據卷

docker volume rm mysqlVolume

查看數據卷

docker inspect mysqlVolume

 

 數據卷存放路徑都在 /var/lib/docker/volumes 目錄下

 

 

@天才卧龍的波爾克

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM