欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker數(shù)據(jù)持久化之如何讓新容器同步舊數(shù)據(jù)詳解

 更新時(shí)間:2025年10月21日 09:08:50   作者:一勺菠蘿丶  
這篇文章主要為大家詳細(xì)介紹了Docker如何讓新容器同步舊數(shù)據(jù),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下

適合人群:剛接觸 Docker 的 Java / 后端開(kāi)發(fā)者

目標(biāo):徹底理解 -v 數(shù)據(jù)卷的作用、數(shù)據(jù)保存機(jī)制,以及容器刪除后數(shù)據(jù)為什么不丟

一、Docker 的容器與數(shù)據(jù)之間的關(guān)系

我們先來(lái)理解一個(gè)關(guān)鍵概念:

Docker 容器 ≠ 數(shù)據(jù)庫(kù)本身。

可以把 Docker 想象成一個(gè)“小房子”:

  • 房子里裝著程序(比如 MySQL、Redis);
  • 數(shù)據(jù)(比如數(shù)據(jù)庫(kù)表)其實(shí)放在房子里面的“儲(chǔ)物柜”里。

當(dāng)你執(zhí)行:

docker run -di --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:8.0

你只是建了個(gè)房子(容器),而數(shù)據(jù)默認(rèn)存在房子里面的 /var/lib/mysql 目錄下。

問(wèn)題是:

當(dāng)你把這個(gè)容器刪掉時(shí)(docker rm -f mysql8.0),房子和里面的數(shù)據(jù)儲(chǔ)物柜都會(huì)一起被“炸掉”,數(shù)據(jù)全沒(méi)。

二、解決辦法:用-v數(shù)據(jù)卷掛載

Docker 提供了一個(gè)“外 掛儲(chǔ)物柜”的功能,叫 數(shù)據(jù)卷(Volume)。

舉個(gè)例子:

docker run -di \
  --name=mysql8.0 \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ~/docker/mysql/data:/var/lib/mysql \
  mysql:8.0

這里的 -v 參數(shù)代表:

Mac宿主機(jī)路徑 : 容器內(nèi)部路徑

即:

  • 你的 Mac 上的 ~/docker/mysql/data 文件夾
  • 實(shí)際上掛載到了容器里的 /var/lib/mysql

這意味著:

不管容器如何刪、重建,~/docker/mysql/data 的內(nèi)容都不會(huì)被刪除,數(shù)據(jù)會(huì)一直保留在宿主機(jī)上。

三、驗(yàn)證實(shí)驗(yàn):刪容器后數(shù)據(jù)還在!

下面我們來(lái)做個(gè)小實(shí)驗(yàn):

Step 1. 創(chuàng)建容器

docker run -di \
  --name=mysql8.0 \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ~/docker/mysql/data:/var/lib/mysql \
  mysql:8.0

Step 2. 進(jìn)入容器創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)

docker exec -it mysql8.0 mysql -uroot -proot
CREATE DATABASE testdb;

Step 3. 刪除容器

docker rm -f mysql8.0

Step 4. 查看宿主機(jī)目錄

ls ~/docker/mysql/data

你會(huì)看到很多 .ibd、.frm、testdb 文件夾還在。

說(shuō)明數(shù)據(jù)沒(méi)有被刪除!

四、重新創(chuàng)建容器,數(shù)據(jù)還能“復(fù)活”!

現(xiàn)在我們重新啟動(dòng)一個(gè)新容器,但繼續(xù)掛載同一個(gè)路徑:

docker run -di \
  --name=mysql_new \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ~/docker/mysql/data:/var/lib/mysql \
  mysql:8.0

然后進(jìn)入新容器:

docker exec -it mysql_new mysql -uroot -proot
SHOW DATABASES;

你會(huì)驚喜地發(fā)現(xiàn) ——上次創(chuàng)建的 testdb 數(shù)據(jù)庫(kù)還在!

五、原理解釋?zhuān)簽槭裁葱氯萜髂芡脚f數(shù)據(jù)?

這是因?yàn)椋?/p>

  • -v 參數(shù)讓容器內(nèi)部的 /var/lib/mysql 與宿主機(jī)的文件夾建立了“實(shí)時(shí)映射關(guān)系”;
  • 容器只是“使用”那里的數(shù)據(jù)文件,并不會(huì)直接擁有;
  • 刪除容器只會(huì)刪除容器本身的鏡像層,不會(huì)影響宿主機(jī)的文件。

換句話(huà)說(shuō):

數(shù)據(jù)卷是“獨(dú)立存在的外部存儲(chǔ)”,容器只是臨時(shí)使用它。

六、同樣適用于 Redis、Elasticsearch 等服務(wù)

服務(wù)掛載命令容器內(nèi)默認(rèn)路徑推薦宿主機(jī)路徑
MySQL-v ~/docker/mysql/data:/var/lib/mysql/var/lib/mysql~/docker/mysql/data
Redis-v ~/docker/redis/data:/data/data~/docker/redis/data
Elasticsearch-v ~/docker/es/data:/usr/share/elasticsearch/data/usr/share/elasticsearch/data~/docker/es/data
Jenkins-v ~/docker/jenkins:/var/jenkins_home/var/jenkins_home~/docker/jenkins
MinIO-v ~/docker/minio/data:/data/data~/docker/minio/data

這些路徑同理:只要掛載過(guò),再建容器掛載相同路徑 → 數(shù)據(jù)自然“同步回來(lái)”。

七、額外提示:查看掛載信息

想看某個(gè)容器的掛載狀態(tài):

docker inspect 容器名 | grep Mounts -A 10

可以看到類(lèi)似:

"Mounts": [
    {
        "Type": "bind",
        "Source": "/Users/yourname/docker/mysql/data",
        "Destination": "/var/lib/mysql"
    }
]

這就說(shuō)明你的數(shù)據(jù)卷掛載成功。

八、小白總結(jié)一圖流

無(wú) -v 掛載:
[容器]——數(shù)據(jù)放在容器內(nèi)(刪容器=刪數(shù)據(jù))

有 -v 掛載:
[容器]←→[宿主機(jī)文件夾](刪容器≠刪數(shù)據(jù))

重新啟動(dòng)時(shí):

新容器 ←→ [同一個(gè)宿主機(jī)路徑] → 數(shù)據(jù)自動(dòng)同步回來(lái) ?

九、日常使用建議

場(chǎng)景建議做法
本地開(kāi)發(fā)一定要掛載 -v 保存數(shù)據(jù)
測(cè)試環(huán)境可選擇性?huà)燧d
生產(chǎn)環(huán)境統(tǒng)一放在掛載卷或 NFS 存儲(chǔ)上
容器遷移拷貝宿主機(jī)對(duì)應(yīng)路徑即可恢復(fù)數(shù)據(jù)

十、總結(jié)一句話(huà)

沒(méi)有 -v,容器刪了數(shù)據(jù)也沒(méi)了;

有了 -v,數(shù)據(jù)存在宿主機(jī)目錄中,刪容器也不影響。

只要新容器掛載相同目錄,數(shù)據(jù)就能“原地復(fù)活”。

延伸閱讀

Docker 官方文檔:https://docs.docker.com/storage/volumes/

推薦命令:

docker volume ls     # 查看所有數(shù)據(jù)卷
docker volume inspect 卷名
docker system df     # 查看磁盤(pán)空間占用

到此這篇關(guān)于Docker數(shù)據(jù)持久化之如何讓新容器同步舊數(shù)據(jù)詳解的文章就介紹到這了,更多相關(guān)Docker新容器同步舊數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論