Use Docker Volume to Build Databases
Ubuntu: 18.04
Docker: 18.09
雖然 Docker Container
可以建立出完全獨立的環境,但是有些時候我們仍有共用資料的需求,例如資料庫。實際在應用上,不會因為關掉 Database 的 Container
以後就放任資料消失,這時候就可以使用 Docker Volumes 的功能,將本機的實際目錄掛載進 Container
中,達成共享資料的目的。
(圖片來源: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
關閉了,資料仍會存在。