Use Docker Volume to Build Databases

Ubuntu: 18.04

Docker: 18.09

雖然 Docker Container 可以建立出完全獨立的環境,但是有些時候我們仍有共用資料的需求,例如資料庫。實際在應用上,不會因為關掉 Database 的 Container 以後就放任資料消失,這時候就可以使用 Docker Volumes 的功能,將本機的實際目錄掛載進 Container 中,達成共享資料的目的。

Docker Volume
(圖片來源:Docker 官網

Usage

Docker 提供了 docker volume 的指令來操作 volume

; 建立 db-data volume
docker volume create --name my-data

; 查看 volume 清單
docker volume ls

; 查看 volume 狀態
docker volume inspect my-data

; 刪除 volume
docker volume rm my-data

Notice: 這裡建的 Volume 實體預設都會放在本機的 /var/lib/docker/volumes

Volume 建立完成之後,就可以透過 docker run -v 指令將 Volume 掛進 Container

; 將 my-data volume 掛載進 Container 的 /mydb/data 中
; 建立 test_file 檔案
docker run -v my-data:/mydb/data -it ubuntu:19.04 touch /mydb/data/test_file

; 建立第二個 Container,一樣將 my-data volume 掛載進 Container,一樣可以看到 test_file 的檔案
docker run -v my-data:/mydb/data -it ubuntu:19.04 ls -la /mydb/data

另外,也可以將本機指定的目錄掛載進去 Container

DB 範例

; 建立 DB 的 Container,並且共享資料庫資料
; 將 ~/resource/docker/data 掛載進 /var/lib/mysql
docker run -d --name my-db \
    -e MYSQL_ROOT_PASSWORD=password \
    -v ~/resource/docker/data:/var/lib/mysql \
    mysql:5.7

這樣一來,資料庫的資料都會存在本機的 ~/resource/docker/data 裡,因此就算 Container 關閉了,資料仍會存在。

Categories: Docker