容器中的管理數據主要有兩種方式:
1.數據卷
數據卷是一個供容器使用的特殊目錄,位于容器中。可將宿主機的目錄掛載到數據卷上,對數據卷的修改操作立刻可見,并且更新數據不會影響鏡像,從而實現數據在宿主機與容器之間的遷移。數據卷的使用類似于?Linux?下對目錄進行的 mount 操作
除了使用 volume 子命令來管理數據卷外,還可以在創建容器時將主機的任意路徑 掛載到容器內作為數據卷,這種形式創建的數據卷稱為綁定數據卷。在用 docker [container] run命令的時候,可以使用 mount 選項來使用數據卷。?mount 項支持三種類型的數據卷,包括
- volume:?普通數據卷,映射到主機/var/ lib /docke /volumes 路徑下;
- bind :綁定數據卷,映射到主機指定路徑下;
- ?tmpfs :臨時數據卷,只存在于內存中
綁定數據卷:如果掛載的路徑在宿主機上不存在,Docker 會自動創建該路徑。
#創建一個 web1 容器作為數據卷容器
[root@Docker ~]# docker run --name web1 -v /var/www:/test1 -it centos:7 /bin/b[root@a89b95b269bc /]# ls
anaconda-post.log dev home lib64 mnt proc run srv test1 usr
bin etc lib media opt root sbin sys tmp var
[root@a89b95b269bc /]# echo "I am test1" >/test1/haha.txt
[root@a89b95b269bc /]# exit
exit
這里宿主機上的 /var/www 目錄不存在,Docker 則會自動創建這個目錄 (但僅限于是目錄,不是文件,否則會報錯)
#返回宿主機檢查?
2.數據卷容器
??如果需要在容器之間共享一些數據,最簡單的方法就是使用數據卷容器。數據卷容器是一個普通的容器,專門提供數據卷給其他容器掛載使用
#創建一個 web2 容器作為數據卷容器
[root@Docker ~]# docker run --name web2 -v /test1 -v /test2 -it centos:7 /bin/bash
[root@ce3ce76e3b7c /]# ls
anaconda-post.log dev home lib64 mnt proc run srv test1 tmp var
bin etc lib media opt root sbin sys test2 usr
[root@ce3ce76e3b7c /]# echo "this is test1" >/test1/haha.txt
[root@ce3ce76e3b7c /]# echo "this is test2" >/test2/haha.txt
[root@ce3ce76e3b7c /]# exit
exit
#使用? --volumes-from 來掛載 web2 容器中的數據卷到新的容器中
[root@Docker ~]# docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
[root@049bca80ec53 /]# ls
anaconda-post.log dev home lib64 mnt proc run srv test1 tmp var
bin etc lib media opt root sbin sys test2 usr
[root@049bca80ec53 /]# cat /test1/haha.txt
this is test1
[root@049bca80ec53 /]# cat /test2/haha.txt
this is test2
3.?利用數據卷容器來遷移數據
可以利用數據卷容器對其中的數據卷進行備份、恢復,以實現數據的遷移
#備份 web1 數據卷
# 建立容器并指定使用卷到要備份的容器
[root@Docker ~]# docker run --volumes-from web1 \
-v $(pwd):/backup --name woker1 centos:7 \ # 把當前目錄掛載到容器中用于保存備份數據
tar zcf /backup/backup.tar /test1 # 備份數據到本地#驗證備份文件
[root@Docker ~]# tar -tvf backup.tar
drwxr-xr-x root/root 0 2025-03-04 15:44 test1/
-rw-r--r-- root/root 11 2025-03-04 17:49 test1/haha.txt
#傳送備份文件到目標服務器
[root@Docker ~]# scp backup.tar 192.168.8.164:~
root@192.168.8.164's password:
backup.tar 100% 10KB 7.2MB/s 00:00
#數據恢復
[root@centos ~]# docker run --rm --volumes-from new_web -v $(pwd):/backup centos:7 \
> bash -c "mkdir -p /data && tar xvf /backup/backup.tar -C /data -m -p"
test1/
test1/haha.txt
[root@centos ~]#