跳到主要內容

簡單介紹Docker儲存卷(Volume)的作用, 以及如何保存資料到宿主機上


前言

容器的鏡像是個由多個鏡像堆積起來的分層結構, 當容器啟動時容器層會被加載到所有鏡像層的頂部, 這是所有鏡像層中唯一的可寫層, 容器執行過程中的所有檔案變化都會被寫入到這一層中, 但是當容器生命週期結束時, 容器層也會跟著被消滅

若想要將這些改變保存下來的話, 可以使用docker的儲存卷功能, 將宿主機上的某個目錄掛載起來,  任何動態產生的資料就能被寫入到宿主機上保存

以下介紹兩種方法

1. 掛載匿名卷


使用Dockerfile


FROM node:8.11.1
WORKDIR /app
ADD . /app
RUN npm install 
VOLUME /app/upload_folder
EXPOSE 1337
CMD npm start
如果沒有特別想要指定宿主機上的某個目錄, 可以讓docker自動建立一個匿名卷掛載到容器內, 這個方法會在/var/lib/docker/volumes/<id>路徑下, 建立_data的資料夾, 容器內所有在upload_folder裡的寫入都會被保存到_data裡面

掛載匿名卷也可以使用docker -v 指令
docker -v /app/upload_folder

2. 掛載命名卷


當然我們也可以明確的告訴docker去掛載宿主機上的某個資料夾到容器內
docker -v /home/andy/upload_folder:/upload_folder



留言