Docker容器的數(shù)據(jù)管理-創(chuàng)新互聯(lián)

文章首發(fā)于公眾號《程序員果果》
地址:https://mp.weixin.qq.com/s/qg8eXHobNxzfPAaHB3U9cw

創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十載時間我們累計服務(wù)了上千家以及全國政企客戶,如成都橡塑保溫等企業(yè)單位,完善的項目管理流程,嚴(yán)格把控項目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致贊揚(yáng)。

一、容器的數(shù)據(jù)卷

1. 什么是數(shù)據(jù)卷?

docker的理念之一就是將應(yīng)用和運(yùn)行的環(huán)境打包,因此docker容器的生存周期通常都是與在容器中運(yùn)行的程序相同的,而我們對數(shù)據(jù)的要求是持久化,docker容器之間也需要一個共享數(shù)據(jù)的渠道。這些需求就催生了docker數(shù)據(jù)卷的誕生。

docker數(shù)據(jù)卷是經(jīng)過特殊設(shè)計的目錄,可以繞過聯(lián)合文件系統(tǒng)(UFS),為一個或多個容器提供訪問。

數(shù)據(jù)卷設(shè)計的目的,在于數(shù)據(jù)的永久化,它完全獨立于容器的生命周期。因此,docker不會在容器刪除時刪除其掛在的數(shù)據(jù)卷,也不會存在類似的垃圾收集機(jī)制,對容器引用的數(shù)據(jù)進(jìn)行處理

2. 數(shù)據(jù)卷的特點

  • docker數(shù)據(jù)卷獨立于docker存在,與docker容器的生存周期分離。
  • 存在于宿主機(jī)(docker host)中。
  • docker數(shù)據(jù)卷,可以是目錄,也可以是文件。
  • docker容器可以利用數(shù)據(jù)卷技術(shù)與宿主機(jī)進(jìn)行數(shù)據(jù)共享。

3. 數(shù)據(jù)卷的特點

  • 數(shù)據(jù)卷在容器啟動時初始化,如果容器使用的鏡像在掛載點包含了數(shù)據(jù),這些數(shù)據(jù)會拷貝到新初始化的數(shù)據(jù)卷中。
  • 數(shù)據(jù)卷可以在容器之間共享和重用。
  • 可以對數(shù)據(jù)卷里的內(nèi)容直接進(jìn)行修。
  • 數(shù)據(jù)卷的變化不會影響鏡像的更新。
  • 即使掛載數(shù)據(jù)卷的容器已經(jīng)被刪除,卷也會一直存在。

4. 數(shù)據(jù)卷的使用方法

#為容器添加數(shù)據(jù)卷使用-v選項
docker run -v ~/container_data:/data -it IMAGE /bin/bash

容器中


root@311b7376b879:/# ls  
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@311b7376b879:/# cd data/
root@311b7376b879:/data# echo "hi , what's up man ?" > hi.txt

宿主機(jī)

huanchu-mbp:~ huanchu$ docker run -it -d -v ~/Documents/ttt:/data --name test1 nginx /bin/bash
huanchu-mbp:~ huanchu$ cat Documents/ttt/hi.txt 
hi , what's up man ?

5. 數(shù)據(jù)卷添加訪問權(quán)限

掛載的數(shù)據(jù)默認(rèn)為可讀寫權(quán)限。
但也可以根據(jù)自己的需求,將容器里掛載共享的數(shù)據(jù)設(shè)置為只讀,這樣數(shù)據(jù)修改就只能在宿主機(jī)上操作,用法如下:

#ro:指定為只讀。
docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash

6. 使用Dockerfile創(chuàng)建包含數(shù)據(jù)卷的鏡像

Dockerfile指令:
?   VOLUME [ "/data"]

在Dockerfile中 VOLUME 指令創(chuàng)建的掛載點,無法指定主機(jī)上對應(yīng)的目錄,是自動生成的

Dockerfile
# Version: 0.0.1
FROM ubuntu:latest 
VOLUME ["/data/volume1","/data/volume2"]
RUN apt-get update RUN apt-get install -y nginx 
RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
EXPOSE 80
構(gòu)建鏡像
docker build -t="mynginx2" .
啟動容器
docker run -it --name mynginx_test mynginx2
查看數(shù)據(jù)卷
root@e22ae166d8fa:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@e22ae166d8fa:/# cd data/
root@e22ae166d8fa:/data# ls
volume1  volume2
root@e22ae166d8fa:/data#
查看主機(jī)掛載點

我們通過docker inspect 查看通過該dockerfile創(chuàng)建的鏡像生成的容器,可以看到如下信息:

可以看到兩個掛載點的信息。

"Mounts": [
            {
                "Type": "volume",
                "Name": "596925f444bbcb7d3b75c3b844700ce8f43bd5fc8b18bb97f323e2825a1df13e",
                "Source": "/var/lib/docker/volumes/596925f444bbcb7d3b75c3b844700ce8f43bd5fc8b18bb97f323e2825a1df13e/_data",
                "Destination": "/data/volume1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "0a28aed7c33a588dd74ce008d78670a5ff01dbea17e659597ebd5506bf8824cb",
                "Source": "/var/lib/docker/volumes/0a28aed7c33a588dd74ce008d78670a5ff01dbea17e659597ebd5506bf8824cb/_data",
                "Destination": "/data/volume2",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }

二、數(shù)據(jù)卷容器

1. 什么是數(shù)據(jù)卷容器?

命名的容器掛載數(shù)據(jù)卷,其他容器通過掛載這個容器實現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,就叫做數(shù)據(jù)卷容器。

2. 構(gòu)建一個數(shù)據(jù)卷容器

huanchu-mbp:Documents huanchu$ docker run -it -v ~/Documents/ttt:/data --name container_data ubuntu
root@832301c940b6:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@832301c940b6:/# cd data/
root@832301c940b6:/data# ls
Dockerfile  com  hi.txt
root@832301c940b6:/data# echo      
Dockerfile  com/        hi.txt      
root@832301c940b6:/data# echo 
Dockerfile  com/        hi.txt      
root@832301c940b6:/data# echo "ha ha ha !" > ha.txt
root@832301c940b6:/data# ls
Dockerfile  com  ha.txt  hi.txt

3. 掛載數(shù)據(jù)卷容器的方法

docker run --volumes-from [container name]

創(chuàng)建一個新的容器,并掛載剛才創(chuàng)建的數(shù)據(jù)卷容器 container_data

huanchu-mbp:Documents huanchu$ docker run -it --name ubuntu_test --volumes-from container_data ubuntu /bin/bash
root@1d6b918c00e5:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@1d6b918c00e5:/# cd data/
root@1d6b918c00e5:/data# ls
Dockerfile  com  ha.txt  hi.txt
root@1d6b918c00e5:/data# cat ha.txt 
ha ha ha !
root@1d6b918c00e5:/data#

使用inspect命令查看掛載細(xì)節(jié)

"Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/huanchu/Documents/ttt",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]

三、數(shù)據(jù)卷的備份和還原

數(shù)據(jù)卷數(shù)據(jù)備份

方法

docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar

例如

docker run --volumes-from container_data -v ~/Documents/ttt:/backup --name ubuntu_test1 ubuntu tar cvf /backup/ubuntu_test1.tar /data

在宿主機(jī)上可以查看到備份的數(shù)據(jù)

huanchu-mbp:ttt huanchu$ ls -l
total 1272
-rw-r--r--  1 huanchu  staff     191 12 24 15:48 Dockerfile
drwxr-xr-x  3 huanchu  staff      96 12 12 14:45 com
-rw-r--r--  1 huanchu  staff      11 12 24 17:04 ha.txt
-rw-r--r--  1 huanchu  staff      21 12 24 14:26 hi.txt
-rw-r--r--  1 huanchu  staff  593920 12 24 18:09 ubuntu_test1.tar

數(shù)據(jù)卷數(shù)據(jù)還原

方法

docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar

例如

#第一步
docker run -v ~/Documents/ttt:/data --name ubuntu_test2 ubuntu tar xvf /data/ubuntu_test1.tar
#第二步
docker run -it --volumes-from ubuntu_test2 --name ubuntu_test3 ubuntu /bin/bash

歡迎關(guān)注我的公眾號《程序員果果》,關(guān)注有驚喜~~
Docker 容器的數(shù)據(jù)管理

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:Docker容器的數(shù)據(jù)管理-創(chuàng)新互聯(lián)
瀏覽地址:http://muchs.cn/article10/dgejgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)App設(shè)計、網(wǎng)站收錄、網(wǎng)站導(dǎo)航、Google、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)