1. 程式人生 > >【Docker】之 資料卷(Data Volumes)

【Docker】之 資料卷(Data Volumes)

當容器(Container)停止並被刪除,則容器中的資料也會隨之刪除。

那有沒有一種獨立於容器、提供持久化並能服務於多個容器的東西呢?

Docker 資料卷(Data Volumes)

一、 資料卷

資料卷 : 是一個可供一個或多個容器使用的特殊目錄

特性:

  • 資料卷可以在容器之間共享和重用
  • 對資料卷的修改會立馬生效
  • 對資料卷的更新,不會影響映象
  • 資料卷預設會一直存在,即使容器被刪除

這裡寫圖片描述

二、 Docker持久化資料的方案

(1)基於本地檔案系統的Volume

可以在執行Docker create 或 Docker run時,通過-v

引數將主機的目錄作為容器的資料卷。

(2)基於plugin 的Volume

支援第三方的儲存方案,比如NAS, aws

三、Volume的型別

  • 受管理的data Volume,由docker後臺自動建立
  • 繫結掛在的Volume,具體掛載位置可以由使用者指定

四、小栗子(資料持久化:Data Volume)

驗證 資料卷 獨立 於容器,並重用資料卷

1. 建立mysql容器

因為 mysql Dockerfile 中有涉及 volume,so 可以以此為例(詳看

建立並執行命名為mysql1的容器, mysql密碼設定為空
sudo docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

2. 檢視

sudo docker volume ls
這裡寫圖片描述

sudo docker volume inspect 226d8c5d1f789da85b996cd4f836052cbb65c5cddd6a040897d89943a4bfb3e7
這裡寫圖片描述

3. 刪除後
# 先停止執行
sudo docker stop mysql1

# 移除容器
sudo docker rm mysql1

# 檢視
sudo docker ps -a

# 檢視volume
sudo docker volume ls

這裡寫圖片描述

4. 重用資料卷(重新命名volume)

重新命名mysql
sudo docker run -d -v mysql:/var/lib/mysql --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql


這裡寫圖片描述

驗證
sudo docker exec -it mysql /bin/bash
這裡寫圖片描述

建立mysql2並重用 mysql volume
sudo docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
這裡寫圖片描述

之後檢視資料庫,發現原先建立的dockerMysql還在。

五、大栗子(資料持久化:Bind Mounting)

實時更新容器

本地目錄和容器目錄進行對映
docker run -v /home/aaa:/root/aaa

當本地目錄中檔案更改,對應的容器目錄中的檔案也會更改。