Docker內空間的資料能不能保存下來? 當我關閉一個Container後下次重開一個新的Container能不能夠承接之前的檔案? 其實這些都是可以的。接下來介紹一下Docker Volume,這是docker資料持久層。
docker volume create <VolName>
建立新的保存空間並命名 (可以用-d來指定位置)docker volume ls
列出本機上所有的volumedocker volume inspect <VolName>
查看該volume相關docker volume prune
刪除所有未被container使用到的volumedocker volume rm <VolName>
刪除volume如下圖,建立一個名字叫做myvol的空間。用inspect可以看到空間的路徑。
要是不-d指定特定空間,系統會自動幫你生成空間,然而具體會在電腦的哪裡呢?
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
/var/lib/docker/volumes/
windows版:
在container run時加上-v就能掛載了,參數為 -v <VolName>:<內部絕對路徑>
,要是VolName不存在Docker會自動幫你建立一個。舉昨天例子來說,我們將myvol掛載到新建立的Web_App_Vol Container中,myvol空間會保存/usr/local/apache2/htdocs/
目錄下的資料夾。
docker run -it -d -p 8081:80 -v myvol:/usr/local/apache2/htdocs/ --name Web_App_Vol httpd:2.4
現在進入修改並刪除container,然後重新掛載新的container
# 進入container
docker exec -it Web_App_Vol bash
# 改寫index.html
echo "<h1>Hello Docker Vol</h1>" > /usr/local/apache2/htdocs/index.html
# 離開container
exit
# 停下並刪除container
docker stop Web_App_Vol
docker rm Web_App_Vol
# 重新掛載新的Container
docker run -it -d -p 8082:80 -v myvol:/usr/local/apache2/htdocs/ --name Web_App_Vol2 httpd:2.4
可以發現重新掛載的Container,繼承了之前修改的東西
但是每次修改container內的資料都要用exec進去,很麻煩。有沒有能夠在container外面改好裡面自動修改的方式呢? 有,就是volume (廢話,不然我就不會放在Volume章節了)
-v指令本質上就是內外空間映射。
window版不能直接掛載,要先調一下設定。
新版本window desktop可以直接掛載,指令:
docker run -v <外部絕對路徑>:<內部路徑> <ImageName>
舉例來說,我在windows電腦//e/program/ITBAN/DockerExample
下放了index.html要映射給/usr/local/apache2/htdocs
docker run -it -d --name Web_Vol -p 8081:80 -v //e/program/ITBAN/DockerExample:/usr/local/apache2/htdocs httpd:2.4
現在在外部修改就能直接影響到Container內部了。
今天打了AZ,希望明天能繼續寫下去。