我們首先來回顧一下docker的理念,就是將應用和環境打包成一個鏡像,那數據呢就存在於容器中,如果容器被刪,那數據就會丟失,因此我們有一個希望數據可以長久保存的需求,就算容器被刪,也能找回數據,盡力減少刪庫跑路帶來的損失。實際上容器之間有一種數據共享的技術,使得docker容器產生的數據,直接同步到本地,這就是docker數據卷技術。
一 docker數據卷技術概念
實現數據的持久化和同步操作,實際上就是目錄的掛載,將容器內的目錄掛載到容器外的目錄 ,即linux上面,例子如下圖所示。容器內的Mysql文件系統放在/usr/mysql目錄下,通過數據卷技術,可以自動同步到容器外的/home/mysql.
二 數據卷使用
方式1.直接使用-v: docker run -it -v 主機目錄:容器內目錄 鏡像 /bin/bash
//目錄掛載
[root@wangstudy ~]# docker run -it centos /bin/bash
[root@56364a55ad50 /]# cd /home
[root@56364a55ad50 home]# ls
[root@56364a55ad50 home]# [root@wangstudy ~]# docker run -it -v /home/ceshi:/home centos /bin
//通過docker inspect 容器id查找到掛載信息
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
測試:
我們在容器內home目錄下添加了文件test.txt
然後去查看容器外/home/ceshi,也發現了test.txt
說明已經掛載成功。
再測試:停止容器後修改文件也能同步
1.停止容器
[root@wangstudy ceshi]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d13e77bcdb8b centos "/bin/bash" 7 minutes ago Up 7 minutes zealous_hellman
[root@wangstudy ceshi]# docker stop d13e77bcdb8b
d13e77bcdb8b
[root@wangstudy ceshi]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2. 修改test.txt內容,添加了wang
3.重啓docker centos鏡像並進入查看test.txt看到,同步成功
這表明我們要修改容器內的文件,可以通過數據卷技術在容器外掛載的目錄下修改對應文件而無需進入到容器內