認識 Docker — 使用 Mount 或 Volume

StyleLinz
Coding Book Club
Published in
4 min readMar 21, 2022
Photo by benjamin lehman on Unsplash

某些應用程式的容器(例如:MongoDB、MySQL 、 Redis 等資料庫)會將資料儲存在容器的可寫層上,因此當容器關閉後再次打開,就會發現上次存放的資料就會消失無蹤…

為了保留我們這些存起來的資料供下次使用,Docker 提供了以下三種方式

圖片來源:https://docs.docker.com/storage/volumes/

bind mount

將主機的檔案系統(檔案或資料夾)與容器內的檔案系統作綁定,讓容器可以使用主機內的檔案,例如:設定檔或程式碼等

  • 可以存放在主機的任何一個位置
  • 非 docker 的行程或是 docker 容器都可以隨時修改 mount 中的檔案
  • 使用 docker run --mount 進行操作

volume

volume 的資料都是存放在 /var/lib/docker/volumes 資料夾中

  • 建議只藉由 docker 進行操作
  • 可以使用 docker volume ... 進行 volume 的相關操作
  • 也可以搭配 dockerfile、docker-compose 等功能使用

tmpfs mount

讓容器使用額外的記憶體空間來儲存資料,容器關閉後就會清空該區塊的檔案,若需要較快的讀寫效能,但又不想長久儲存檔案可以使用這個

volume 的操作

這邊大概列出幾項常用的 volume 指令,若想知道其他指令或選項,可以在指令後加上 --help 看進一步的資訊

# 建立 volume
docker volume create <volume_name>
# 瀏覽 volume
docker volume ls
# 查看 volume 詳細資料
docker volume inspect <volume_name>
# 刪除 volume
docker volume rm <volume_name>

使用 --mount 與 -v/ --volume

當容器要經由 docker run ... 或是 docker create ... 產生出來之前,可以使用這兩種方法,讓容器可以綁定主機的檔案或資料夾

docker run -v <volume_name or host_file_path>:<container_path> ...

參考資料

到這邊可以看到更多更詳細的 mount 與 volume 的相關資料

--

--