06-docker數據管理

數據管理

在真實環境中docker需要對數據進行持久化,或者多個容器之間進行數據共享,涉及到容器的數據管理操作。

  • 數據卷:容器內數據映射到本地主機環境
  • 數據卷容器:使用特定容器維護數據卷

    數據卷

    數據卷(Data Volumes)是一個可供容器使用的特殊目錄,通過主機操作系統目錄直接映射進容器,類似mount
    特性:

  • 可以在容器間共享,重用
  • 對數據卷內數據的修改會立即生效,不論是在操作系統目錄下還是容器內
  • 對數據卷的更新不會影響容器
  • 卷會一直存在,知道沒有容器使用,可以卸載它

1、創建數據卷
docker提供了volume命令來管理數據卷,除了create(創建),還支持inspect(查看詳細信息),ls(列出已有數據卷),prune(清理無用數據卷),rm(刪除數據卷)等

[root@docker01 ~]# docker volume create -d local test
test
[root@docker01 ~]# ll /var/lib/docker/volumes/
total 24
drwxr-xr-x. 3 root root    19 Mar  9 23:21 1d300cc7b91123b4180bf8edb1f3ce130a8f317dba3332f21c55be23f27d0f30
-rw-------. 1 root root 32768 Mar 10 15:10 metadata.db
drwxr-xr-x. 3 root root    19 Mar 10 15:10 test
[root@docker01 ~]# docker volume ls
DRIVER              VOLUME NAME
local               1d300cc7b91123b4180bf8edb1f3ce130a8f317dba3332f21c55be23f27d0f30
local               test

2、綁定數據卷
可以在創建容器時將本地主機的任意路徑掛載到容器內作爲數據卷,這種形式創建的數據捲成爲綁定數據卷,docker [container] run --mount選擇使用數據卷。
-mount支持三種類型的數據卷:
volume:普通數據卷,映射到主機/var/lib/docker/volumes路徑下
bind:綁定數據卷,映射到主機指定路徑下
tmpfs:臨時數據卷,只存在於內存中
使用training/weapp鏡像創建一個web容器,並創建一個數據卷掛載到容器的/opt/webapp目錄下。

[root@docker01 ~]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp:ro training/webapp python app.py
#加個ro或rw表示目錄權限
[root@docker01 ~]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete 
909cd34c6fd7: Pull complete 
0b9bfabab7c1: Pull complete 
a3ed95caeb02: Pull complete 
10bbbc0fc0ff: Pull complete 
fca59b508e9f: Pull complete 
e7ae2541b15b: Pull complete 
9dd97ef58ce9: Pull complete 
a4c1b0cb7af7: Pull complete 
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
89b39b0e540a3fc4730f5d72c2606dc162d4e6fa3f74eaf3c9b441d4e664576b

數據卷容器

用戶需要在多個容器之間共享一些持續更新的數據,可以使用數據卷容器,數據卷容器也是一個容器,但它是專門提供數據卷給其他容器掛載
創建一個數據容器卷dbdata,並在其中創建一個數據卷掛載到/dbdate

[root@docker01 ~]# docker run -it -v /dbdate --name dbdate ubuntu:18.04 
root@f046a96ec64d:/# ls
bin  boot  dbdate  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run 

其他容器使用--volumes-from來掛載dbdate容器中的數據卷

[root@docker01 webapp]# docker run -it --volumes-from dbdate --name db1 ubuntu
root@fafd91f30ad1:/# ls
bin  boot  dbdate  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run 

測試,互相可以看到創建的文件

root@f046a96ec64d:~# cd /dbdate/
root@f046a96ec64d:/dbdate# touch aa
root@f046a96ec64d:/dbdate# ls
aa 
root@fafd91f30ad1:/# cd dbdate/
root@fafd91f30ad1:/dbdate# ls
aa

如果刪除了dbdata和db1數據卷不會被自動刪除,如果要刪除使用docker rm -v來刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章