1、什么是數據卷
- 將運用與運行的環境打包形成容器運行 ,運行可以伴隨着容器,但是我們對數據的要求希望是持久化的
- 容器之間希望有可能共享數據
Docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據做為鏡像的一部分保存下來,
那么當容器刪除后,數據自然也就沒有了。
為了能保存數據在docker中我們使用卷。
卷就是目錄或文件,存在於一個或多個容器中,由docker掛載到容器,但不屬於聯合文件系統,因此能夠繞過Union File System提供一些用於持續存儲或共享數據的特性:
卷的設計目的就是數據的持久化,完全獨立於容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數據卷
特點:
1:數據卷可在容器之間共享或重用數據
2:卷中的更改可以直接生效
3:數據卷中的更改不會包含在鏡像的更新中
4:數據卷的生命周期一直持續到沒有容器使用它為止
2、容器添加數據卷
- 命令方式
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名
#代表將宿主機/usr/local/src中數據掛載到容器中home目錄
docker run -it -v /usr/local/src/:/home cento
#home后:ro代表只讀
docker run -it -v /usr/local/src/:/home:ro cento
可以通過命令查看數據卷是否掛載成功:docker inspect 容器ID
- Dockerfile方式
可在Dockerfile中使用VOLUME指令來給鏡像添加一個或多個數據卷
FROM centos
VOLUME ["/test1","/test2"]
CMD echo "hello world"
CMD /bin/bash
說明:
出於可移植和分享的考慮,用-v 主機目錄:容器目錄這種方法不能夠直接在Dockerfile中實現。
由於宿主機目錄是依賴於特定宿主機的,並不能夠保證在所有的宿主機上都存在這樣的特定目錄。
構建Dockerfile文件
# -f 指定Dockerfile路徑 -t 新鏡像名稱
docker build -f /usr/local/src/Dockerfile -t centos-redis-01 .
構建成功后可以通過docker images查看鏡像。
可以通過命令查看數據卷是否掛載成功並且可以查看具體對應test1,test2的宿主機目錄:docker inspect 容器ID
3、數據卷容器
命名的容器掛載數據卷,其它容器通過掛載這個(父容器)實現數據共享,掛載數據卷的容器,稱之為數據卷容器。
docker run -it --name centos-redis-02-vm --volumes-from centos-redis-01-vm centos-redis-01
#代表centos-redis-02-vm共享centos-redis-01-vm 數據卷