答案是有的唷! 透過Volume 與 Bind Mount,可以達到數據持久化儲存的需求(不然每次啟動都沒有先前的記憶了)。
docker volume create [OPTIONS] [VOLUME_NAME]
範例:
docker volume create my_volume
docker volume ls [OPTIONS]
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
範例:
docker volume inspect my_volume
docker volume rm [OPTIONS] VOLUME [VOLUME...]
範例:
docker volume rm my_volume
搭配GUI可以直接從Volumes頁籤
看到你的指令結果
目標: 創建一個Volume,將其掛載到一個容器中,然後在Volume中創建一個文件。
步驟:
/data
目錄/data
目錄中創建一個文件目標: 使用同一個Volume在兩個運行中的容器之間共享數據。
步驟:
# 1. 創建一個新的Volume
docker volume create my_volume
# 2. 運行一個容器,將該Volume掛載到容器的 /data 目錄
docker run -it --name container1 -v my_volume:/data ubuntu /bin/bash
# 3. 在容器內的 /data 目錄中創建一個文件
# (在容器內執行)
echo "Hello from container1" > /data/test.txt
exit
# 4. 退出容器,然後啟動一個新容器,掛載同一個Volume
docker run -it --name container2 -v my_volume:/data ubuntu /bin/bash
# 5. 驗證在第一個容器中創建的文件是否存在
# (在新容器內執行)
cat /data/test.txt
Container1跟Container2有共同秘密了!
搭配GUI直接看到Volume真的直覺!
# 1. 創建一個新的Volume
docker volume create shared_volume
# 2. 運行兩個不同的容器,將相同的Volume掛載到兩個容器中
# 運行 Nginx 容器
docker run -d --name nginx_container -v shared_volume:/usr/shared/nginx/html nginx
# 運行 Ubuntu 容器
docker run -it --name ubuntu_container -v shared_volume:/shared_data ubuntu /bin/bash
# 3. 在 Ubuntu 容器中創建一個文件
# (在 Ubuntu 容器內執行)
echo "<h1>Hello from Ubuntu container</h1>" > /shared_data/index.html
exit
# 4. 在 Nginx 容器中驗證並修改該文件
docker exec -it nginx_container /bin/bash
# (在 Nginx 容器內執行)
cat /usr/share/nginx/html/index.html
echo "<h1>Updated in Nginx container</h1>" > /usr/shared/nginx/html/index.html
exit
# 5. 確認兩個容器可以看到相同的更新後的文件
# (在 Ubuntu 容器內執行)
cat /shared_data/index.html
exit
建立Volume
Ubuntu容器-新增檔案(index.html)
Nginx容器-觀察Ubuntu容器新增的檔案(index.html)
Nginx容器再次更新檔案 & Ubuntu觀察被更新的檔案
今天朋友的共同秘密就學到這邊!