06容器的數據管理

Docker數據管理python

容器中的管理數據主要有兩種方式:nginx

方式 描述 特性
1:數據卷(Data Volumes) 容器內數據直接映射到本地主機的目錄,相似於掛載 1:數據卷能夠在容器之間共享和重用
2:對數據卷內數據的修改會立馬生效,不管是容器內操做仍是本地操做
3:對數據卷的更新不會影響鏡像,解耦開應用和數據
4:卷會一直存在,直到沒有容器使用,能夠安全地卸載它
2:數據卷容器(Data Volume Containers) 使用特定容器維護數據卷 1:多個容器之間共享一些會持續更新的數據

查看幫助文檔

[root@docker ~]# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

或者:
[root@docker ~]# man docker-volume-create    #查看子命令

一:數據卷操做web

1:建立數據卷
[root@docker ~]# docker volume create -d local  test
test
#-d, --driver="local" :Specify volume driver name

# /var/lib/docker/volumes會有一個建立的數據卷
[root@docker volumes]# ls -l /var/lib/docker/volumes/
total 24
-rw------- 1 root root 32768 Nov 16 13:37 metadata.db
drwxr-xr-x 3 root root    18 Nov 16 13:37 test

2:綁定數據卷:在建立容器的時候將主機的本地任意路徑  掛載到 容器內做爲數據卷
2.1:
[root@docker ~]# docker pull training/webapp
Using default tag: latest
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

2.2:建立目錄
[root@docker ~]# mkdir /webapp

2.3:綁定本地目錄/webapp到容器的/opt/webapp目錄
[root@docker /]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
ff6c0af55c8b73fa4b117d067280d53aca423e1bd658b65e445114e85fe6d3da
#-P[大寫]:在宿主機上經過隨機端口映射容器內啓用端口
#-d:run the container in the background and print the new container ID
#本地目錄必須是絕對路徑,容器路徑沒有就會自動建立

#不建議使用training/webapp測試,建立數據卷以後,死活不能再進入容器
#使用
ubuntu@ubuntu:~$ sudo docker run -d -p 82:80 -v /src/webapp:/opt/webapp nginx
245633eb9cea1a5833ff3e6b74b2905f11890f604d7c45e2fc3ec8f6aef2dfc2
ubuntu@ubuntu:~$ docker ps -al
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
245633eb9cea        nginx               "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds        0.0.0.0:82->80/tcp      trusting_goldberg
ubuntu@ubuntu:~$ docker exec -it 2456 /bin/bash   #進入容器,並打開一個shell交互僞終端
root@245633eb9cea:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@245633eb9cea:/# cd opt/
root@245633eb9cea:/opt# ls
webapp
root@245633eb9cea:/opt# cd webapp/
root@245633eb9cea:/opt/webapp# ls
root@245633eb9cea:/opt/webapp# touch test
root@245633eb9cea:/opt/webapp# echo "I love you " >>test 
root@245633eb9cea:/opt/webapp# 

#從新開一個終端
ubuntu@ubuntu:~$ cd /src/webapp/
ubuntu@ubuntu:/src/webapp$ cat test 
I love  you 


下面這條命令效果同樣:-v參數
#格式: docker -it -v /宿主機絕對路徑:/容器內目錄  鏡像
[root@docker /]# docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py

二:數據卷容器:docker

1:建立一個數據卷容器dbdata,並將其中一個數據卷掛載到容器內的/dbdata
[root@docker /]# docker run -it -v /dbdata --name dbdata  ubuntu:18.04
root@075058f48803:/# cd /dbdata/
root@075058f48803:/dbdata# ls
#v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]
#The CONTAINER-DIR must be an absolute path such
# /dbdata 是容器內的路徑  

2:使用--volumes-from 來掛載dbdata容器中的數據卷
[root@docker /]# docker run -it --volumes-from dbdata --name db1 ubuntu:18.04
root@47a22834f404:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@47a22834f404:/# cd /dbdata/
root@47a22834f404:/dbdata# ls
[root@docker /]# docker run -it --volumes-from dbdata --name db2 ubuntu:18.04

# 容器db1和容器db2都掛載到同一個數據捲到相同的/dbdata目錄,三個容器共享這個目錄。



[root@docker /]# docker start 47a22834f404    #啓動一個退出的容器
[root@docker /]# docker exec  -it 47a22834f404 /bin/bash      #進入一個已經運行的容器。

三:利用容器來遷移數據shell

1:備份:使用下面的命令來備份dbdata數據卷容器-內的-數據卷
[root@docker /]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:18.04 tar -cvf /backup/backup.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
/dbdata/zz

#建立一個容器,掛載,tar包到新建立的容器內,實現遷移
#1:利用ubuntu鏡像建立了一個容器worker。使用--volumes-from dbdata參數來讓worker容器掛載dbdata容器的數據卷(即dbdata數據卷)
#2:使用-v $(pwd):/backup參數來掛載本地的當前目錄 到worker容器的/backup目錄
#3:worker容器啓動後,使用tar cvf /backup/backup.tar /dbdata命令將/dbdata下內容備份爲容器內的/backup/backup.tar

2:恢復:若是要恢復數據到一個容器,能夠按照下面的操做
#首先建立一個帶有數據卷的容器dbdata2
[root@docker /]# docker run -v /dbdata --name dbdata2 ubuntu:18.04 /bin/bash
[root@docker /]# ls -l backup.tar    #本地當前目錄的文件backup.tar 
-rw-r--r-- 1 root root 10240 Nov 16 14:35 backup.tar  

[root@docker /]#  docker run -itd --volumes-from dbdata2 -v  $(pwd):/backup  busybox  tar xvf    /backup/backup.tar
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
Status: Downloaded newer image for busybox:latest
dbdata/
dbdata/zz


#使用-v $(pwd):/backup參數來掛載本地的當前目錄 到busybox容器的/backup目錄

# 查看/驗證恢復的數據,能夠再啓動一個容器掛載一樣的容器捲來查看

[root@docker /]# docker run --volumes-from dbdata2 busybox /bin/ls /dbdata
zz


 docker run --volumes-from dbdata2 -v  $(pwd):/backup  busybox  tar xvf    /backup/backup.tar
相關文章
相關標籤/搜索