因為今天參加 Google Developers 的 Community Leads Summit 到很晚又忘記屯稿,今天就用比較簡短的方式來介紹docker volume 吧!如果有缺什麼內容就日後再補。
container 在執行的時候使用的是虛擬環境(虛擬的file system),當container被刪除、或是 image 移到不同的地點時,舊有的(執行過的)資料便會消失、移除;這裡可以用資料庫舉例,當container被刪除時,因為資料庫的資料是依賴container的file system儲存,因此容器刪除必會一起消失;若是image更新,container整個被置換,container的file system也被改動,舊有的資料也會跟著被消失。以上,就是docker volume 存在的理由:我們將必要的、欲儲存的資料指定儲存在一個固定的卷宗 volume 上,且此 volume 獨立於 container (存在Host 上),當container被刪除時,資料不會遺失,當新的 container 想要利用其資料時,便可以利用指定目錄的方式存取。
建立卷宗最簡單的方式便是使用指令:
docker volume create my-vol
使用上面的指令過後,docker就會建立一個名叫 my-vol 的卷宗,我們可以使用線面這個指令來查看:
docker volume ls
也可以查看卷宗的詳細資料:
docker volume inspect my-vol
要移除則使用:
docker volume rm my-vol
使用 -v
、--mount
docker run -d \
--name devtest \
--mount source=myvol2,target=/app \
nginx:latest
以上指令會指定執行devtest的image,並掛載卷宗到container /app
的位置,使用--mount則是這樣打:
docker run -d \
--name devtest \
-v myvol2:/app \
nginx:latest
我們也可以在docker-compose.yml的service區段指定volume的位址來存取:
version: "3.9"
services:
frontend:
image: node:lts
volumes:
- myapp:/home/node/app
volumes:
myapp:
external: true
誒等等,什麼是docker-compose???這就是明天的文章啦