Docker中處理持久化存儲(如數(shù)據(jù)庫)的方法詳解
Docker中處理持久化存儲(如數(shù)據(jù)庫)的方法
技術(shù)背景
在使用Docker容器時(shí),容器的生命周期通常是短暫的,當(dāng)容器被刪除后,其內(nèi)部的數(shù)據(jù)也會隨之丟失。然而,對于像數(shù)據(jù)庫這樣需要持久化存儲數(shù)據(jù)的應(yīng)用來說,這是不可接受的。因此,需要一種方法來確保容器中的數(shù)據(jù)能夠在容器重啟或刪除后仍然存在,這就是Docker持久化存儲的需求。
實(shí)現(xiàn)步驟
Docker 1.9.0及以上版本
創(chuàng)建命名數(shù)據(jù)卷:
docker volume create --name hello
在運(yùn)行容器時(shí)掛載數(shù)據(jù)卷:
docker run -d -v hello:/container/path/for/volume container_image my_command
管理數(shù)據(jù)卷:
- 列出所有數(shù)據(jù)卷:
docker volume ls - 查看數(shù)據(jù)卷詳細(xì)信息:
docker volume inspect volume_name - 刪除懸空數(shù)據(jù)卷:
docker volume rm $(docker volume ls -f dangling=true -q)或使用docker volume prune(Docker 1.13.x及以上)
Docker 1.8.x及以下版本
創(chuàng)建數(shù)據(jù)容器:
docker run -v /data --name DATA busybox true
在其他容器中使用數(shù)據(jù)容器的卷:
docker run --volumes-from DATA some-other-container command-to-execute
數(shù)據(jù)備份與恢復(fù):
- 備份:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- **恢復(fù)**:
# 創(chuàng)建新的數(shù)據(jù)容器 sudo docker run -v /data --name DATA2 busybox true # 將備份文件解壓到新容器的數(shù)據(jù)卷中 sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
使用Docker Compose
編寫docker-compose.yml文件:
version: "2"
services:
db:
restart: on-failure:10
image: postgres:9.4
volumes:
- "db-data:/var/lib/postgresql/data"
web:
restart: on-failure:10
build: .
command: gunicorn mypythonapp.wsgi:application -b :8000 --reload
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
volumes:
db-data:
啟動容器:
docker-compose up -d
核心代碼
Docker 1.9.0及以上創(chuàng)建和使用數(shù)據(jù)卷
# 創(chuàng)建數(shù)據(jù)卷 docker volume create --name myvolume # 運(yùn)行容器并掛載數(shù)據(jù)卷 docker run -d -v myvolume:/app/data nginx
Docker Compose配置示例
version: '3'
services:
mysql:
image: mysql:5.7
volumes:
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
mysql-data:
最佳實(shí)踐
- 使用命名數(shù)據(jù)卷:從Docker 1.9.0開始,推薦使用命名數(shù)據(jù)卷,它可以獨(dú)立于容器存在,便于管理和維護(hù)。
- 定期備份數(shù)據(jù):即使使用了持久化存儲,也應(yīng)該定期備份數(shù)據(jù),以防止數(shù)據(jù)丟失。
- 使用Docker Compose:對于復(fù)雜的應(yīng)用,使用Docker Compose可以更方便地管理多個(gè)容器和數(shù)據(jù)卷。
常見問題
權(quán)限問題
當(dāng)使用 -v 掛載主機(jī)目錄到容器時(shí),可能會出現(xiàn)用戶ID不匹配導(dǎo)致的權(quán)限問題。可以通過在容器內(nèi)設(shè)置合適的用戶和權(quán)限來解決。
數(shù)據(jù)卷丟失
如果不小心刪除了數(shù)據(jù)卷,可能會導(dǎo)致數(shù)據(jù)丟失。因此,在刪除數(shù)據(jù)卷之前,一定要確保不再需要該數(shù)據(jù)卷。同時(shí),定期備份數(shù)據(jù)可以降低數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
到此這篇關(guān)于Docker中處理持久化存儲(如數(shù)據(jù)庫)的方法詳解的文章就介紹到這了,更多相關(guān)Docker處理持久化存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker Desktop中安裝MySQL并開啟遠(yuǎn)程訪問的詳細(xì)教程
本文主要介紹了在Docker Desktop中安裝MySQL并開啟遠(yuǎn)程訪問,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
基于Docker+Jenkins實(shí)現(xiàn)自動化部署的方法
這篇文章主要介紹了基于Docker+Jenkins實(shí)現(xiàn)自動化部署,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Windows10系統(tǒng)下docker安裝指南以及踩坑解決
這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下docker安裝指南以及踩坑解決的相關(guān)資料,相信大家都知道Docker有很多種安裝的選擇,其中支持最好的是Ubuntu系統(tǒng),而且docker如果想在windows上運(yùn)行必須借助docker-machine,需要的朋友可以參考下2023-08-08
docker network 自定義網(wǎng)絡(luò)配置與管理指南詳細(xì)過程
Docker網(wǎng)絡(luò)是容器間通信和與外部世界交互的基礎(chǔ),通過自定義網(wǎng)絡(luò),可以實(shí)現(xiàn)容器間的隔離、靜態(tài) IP 分配和服務(wù)發(fā)現(xiàn),這篇文章主要介紹了docker network 自定義網(wǎng)絡(luò)配置與管理指南,需要的朋友可以參考下2025-05-05
Docker + Nginx 實(shí)現(xiàn) Java 服務(wù)零停機(jī)發(fā)布并解決發(fā)布
本文介紹了一種低成本實(shí)現(xiàn)SpringBoot服務(wù)零停機(jī)發(fā)布的方案,通過雙實(shí)例兜底和Nginx自動重試機(jī)制解決傳統(tǒng)部署中的502問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04

