日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker基础-Docker数据管理

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker基础-Docker数据管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、數據卷

  數據卷是一個可供容器使用的特殊目錄,它將主機操作系統目錄直接映射進容器,類似于Linux中的mount操作。
  數據卷可以提供很多有用的特性:

1.數據卷可以在容器之間共享和重用,容器間傳遞數據將變得高效方便; 2.數據卷內數據的修改會立馬生效,無論是容器內操作還是本地操作; 3.數據卷的更新不會影響鏡像,解耦了應用和數據; 4.卷會一直存在,直到沒有容器使用,可以安全卸載它。

1.在容器內創建一個數據卷

  在使用docker run命令的時候,使用-v參數在容器內創建一個數據卷。多次重復使用可以創建多個數據卷。
  舉例如下:

[root@docker docker]# docker run -itd --name nginx -v /nginxdata -p 80:80 nginx:latest 2951cdfdaa53a2a4e0f67ab93bdc395a3587ce09e498d73b7fc83ffac387ea65 [root@docker docker]# [root@docker docker]# docker exec -it 2951cd /bin/bash root@2951cdfdaa53:/# ls bin boot dev etc home lib lib64 media mnt nginxdata opt proc root run sbin srv sys tmp usr var root@2951cdfdaa53:/#

  可以看到容器里內已經存在一個數據卷:nginxdata
  -p參數是暴露指定的容器服務端口到宿主機,其中 -p 80:80中,:前面的是宿主機的端口,:后面的是容器內暴露的端口,可以理解為將容器內暴露的端口綁定到宿主機。

2.掛載一個主機目錄作為數據卷

  使用-v參數也可以指定掛載一個本地目錄到容器中去作為數據卷(推薦方式)。
  舉例如下:

[root@docker /]# docker run -itd --name nginx_3 -v /data/nginxdata/:/opt/nginxdata -p 8083:80 nginx:latest 728014689c945412bc645d7039bbc8c0a33a2ab6812eec0fc21dfe21c19adf26 [root@docker /]# docker exec -it nginx_3 /bin/bash root@728014689c94:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@728014689c94:/# cd /opt/nginxdata/ root@728014689c94:/opt/nginxdata# touch test.txt root@728014689c94:/opt/nginxdata# echo "write in container" > test.txt root@728014689c94:/opt/nginxdata# exit [root@docker /]# cd /data/nginxdata/ [root@docker nginxdata]# ls test.txt [root@docker nginxdata]# cat test.txt write in container [root@docker nginxdata]#

  上面的:-v /data/nginxdata/:/opt/nginxdata是指將本地的/data/nginxdata/掛載到容器中的/opt/nginxdata作為數據卷。
  在容器nginx_3中的/opt/nginxdata目錄中創建一個test.txt并寫入"write in container"然后退出容器,在/data/nginxdata/中也存在這個文件和內容。

  當然,在本地寫入數據之后,在容器中也是立即生效的:

[root@docker nginxdata]# echo "write in local" >>./test.txt [root@docker nginxdata]# cat test.txt write in container write in local [root@docker nginxdata]# docker exec -it nginx_3 /bin/bash root@728014689c94:/# cd opt/nginxdata/ root@728014689c94:/opt/nginxdata# cat test.txt write in container write in local root@728014689c94:/opt/nginxdata#

3.掛載一個本地文件作為數據卷

  -v參數也可以指定一個本地文件掛載到容器中作為數據卷(不推薦)。

[root@docker ~]# docker run --rm -itd --name nginx_4 -v /data/nginxdata/index.html:/usr/share/nginx/html/index.html -p 8084:80 nginx:latest 9838611b1230ad85c96a4215151c281199e330c4b101b9e13f4179976aa338b3 [root@docker ~]#

  把指定的index.html文件掛載到容器中nginx的網站空間/usr/share/nginx/html/中,并把原先的index.html替換掉了。
  注意:
    如果直接掛載一個文件到容器中,使用文件編輯工具,包括vi、vim或者sed --in-place的時候可能會造成文件inode的改變,從Dcker1.1.0起,會報錯;推薦使用的方式是直接掛載文件所在的目錄。

2、數據卷容器

  如果用戶需要在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器也是一個容器,但是它的目的是專門用來提供數據卷供其他容器掛載。
  首先,創建一個數據卷容器,并在容器內創建一個數據卷掛載到/dbdata:

[root@docker ~]# docker run -it -v /dbdata --name dbdata centos:latest [root@695f96ac5b87 /]#

  查看/dbdata目錄:

[root@695f96ac5b87 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@695f96ac5b87 /]# cd dbdata/ [root@695f96ac5b87 dbdata]# ls [root@695f96ac5b87 dbdata]#

  在其他容器中使用--volumes-from來掛載dbdata容器中的數據卷:
  創建db1和db2兩個容器,都掛載在dbdata上,可以在兩個容器中都能看到dbdata目錄:

[root@docker ~]# docker run -it --volumes-from dbdata --name db1 centos:latest [root@6adc3ecfe19d /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@6adc3ecfe19d /]# exit exit [root@docker ~]# docker run -it --volumes-from dbdata --name db2 centos:latest [root@c9cade8bc911 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@c9cade8bc911 /]# exit exit [root@docker ~]#

  在dbdata容器的dbdata目錄中寫入數據:

[root@695f96ac5b87 /]# cd /dbdata/ [root@695f96ac5b87 dbdata]# ls [root@695f96ac5b87 dbdata]# echo "write in dbdata:/dbdata" > test.txt [root@695f96ac5b87 dbdata]# cat test.txt write in dbdata:/dbdata [root@695f96ac5b87 dbdata]#

  分別在db1和db2中查看:

     db1中查看:

[root@docker ~]# docker exec -it db1 /bin/bash [root@6adc3ecfe19d /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@6adc3ecfe19d /]# cd dbdata/ [root@6adc3ecfe19d dbdata]# ls test.txt [root@6adc3ecfe19d dbdata]# cat test.txt write in dbdata:/dbdata [root@6adc3ecfe19d dbdata]# echo "write in db1:/dbdata" >> test.txt [root@6adc3ecfe19d dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata [root@6adc3ecfe19d dbdata]#

    db2中查看:

[root@docker ~]# docker exec -it db2 /bin/bash [root@c9cade8bc911 /]# cd dbdata/ [root@c9cade8bc911 dbdata]# ls test.txt [root@c9cade8bc911 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata [root@c9cade8bc911 dbdata]# echo "write in db2:/dbdata" >> test.txt [root@c9cade8bc911 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata write in db2:/dbdata [root@c9cade8bc911 dbdata]#

  最后在dbdata容器中查看分別在db1和db2中寫入的數據:

[root@695f96ac5b87 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata write in db2:/dbdata [root@695f96ac5b87 dbdata]#

  可以多次使用--volumes-from參數來從多個容器掛載多個數據卷。還可以從其他已經掛載了容器卷的容器來掛載數據卷。
  舉例如下:

[root@docker ~]# docker run -itd --name db3 --volumes-from db1 centos:latest 3cb31e1771c26f3b1dc74b7e00091cf25576c32dbebf824a5b20dbe79e243930 [root@docker ~]# docker exec -it db3 /bin/bash [root@3cb31e1771c2 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@3cb31e1771c2 /]#

   注意:

      1.使用--volumes-from參數所掛載數據卷的容器自身并不需要保持在運行狀態。
      2.如果刪除了掛載的容器(包括dbdata、db1和db2),數據卷并不會自動刪除。如果要刪除一個數據卷,必須在刪除最后一個還掛載著它的容器時使用docker rm -v命令來指定同時刪除關聯的容器。

3、利用數據卷容器來遷移數據

  可以利用數據卷容器對其中的數據卷進行備份、恢復,以實現數據的遷移。=

1.備份

[root@docker ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos:latest tar zcf backup/backup.tar dbdata

  命令解釋:

1.首先利用centos:latest鏡像創建了一個名為worker的容器,使用--volumes-from參數讓worker容器掛載dbdata容器的數據卷/dbdata,使用-v $(pwd):/backup參數來掛載本地當前目錄到worker容器的/backup目錄。 2.worker容器啟動后,使用了tar zcf backup/backup.tar /dbdata命令來將/dbdata下內容備份到/backup/backup.tar,即當前目錄下會生成一個backup.tar的文件。

  查看本地當前目錄:

[root@docker ~]# ll total 525288 -rw-------. 1 root root 1071 Jan 19 2017 anaconda-ks.cfg -rw-r--r-- 1 root root 180 Nov 29 12:11 backup.tar -rw-r--r-- 1 root root 109 Nov 29 10:00 daemon.json -rwxr-xr-x 1 root root 67 Nov 28 16:13 docker-pid [root@docker ~]#

2.恢復

  要將備份好的數據恢復到一個容器,先要創建一個帶有數據卷的容器dbdata2,然后另建一個新的容器,掛載dbdata2的,并使用untar解壓備份文件到所掛載的容器卷中。
  舉例如下:

[root@docker ~]# docker run -itd -v /dbdata --name dbdata2 centos:latest 60919fece4a797d174b2c40228ccf09558a76d092500ea8428b7f6163fec49a9 [root@docker ~]# docker run --volumes-from dbdata2 -v $(pwd):/backup --name db4 centos:latest tar xf /backup/backup.tar

  在新的數據卷容器dbdata2中可以查案恢復結果:

[root@docker ~]# docker exec -it dbdata2 /bin/bash [root@60919fece4a7 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@60919fece4a7 /]# cd dbdata/ [root@60919fece4a7 dbdata]# ls test.txt [root@60919fece4a7 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata write in db2:/dbdata [root@60919fece4a7 dbdata]#

?

轉載于:https://www.cnblogs.com/jie-fang/p/7920201.html

總結

以上是生活随笔為你收集整理的Docker基础-Docker数据管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。