Docker實現(xiàn)數(shù)據(jù)持久化-創(chuàng)新互聯(lián)

由于Docker技術(shù)的火爆,以至于現(xiàn)在大大小小的公司都在使用Docker。對Docker熟悉的朋友都明白DOcker容器運行是有生命周期的,如果docker容器發(fā)生故障,那么就意味著容器中的數(shù)據(jù)也將丟失。那么對于企業(yè)來說的話,數(shù)據(jù)是重要的!如何做到對docker容器中的數(shù)據(jù)持久化就是運維人員需要考慮的問題了!本篇博文將了解如何對容器中的數(shù)據(jù)進行持久化!

創(chuàng)新互聯(lián)公司專注于昂昂溪企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設公司,商城網(wǎng)站制作。昂昂溪網(wǎng)站建設公司,為昂昂溪等地區(qū)提供建站服務。全流程按需制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務

在了解Docker數(shù)據(jù)持久化之前,需要對Docker的存儲類型有一個簡單的了解,執(zhí)行以下命令即可看出:

[root@docker ~]# docker info              //查看Docker的詳細信息
Containers: 2                   //一共有幾個容器
 Running: 2                      //正在運行的有幾個容器
 Paused: 0                      //掛起、暫停的有幾個容器
 Stopped: 0                    //停止的有幾個容器
Images: 2                      //有幾個鏡像
Server Version: 18.09.0                         //docker的版本信息
Storage Driver: overlay2                       //存儲驅(qū)動類型為overlay2
 Backing Filesystem: xfs                      //支持的文件系統(tǒng):xfs
 Supports d_type: true                            
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local                                         //本地存儲    
 Network: bridge host macvlan null overlay             //支持的網(wǎng)絡類型
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-862.el7.x86_64               //內(nèi)核信息
Operating System: CentOS Linux 7 (Core)         //操作系統(tǒng)
OSType: linux                                     //操作系統(tǒng)類型
Architecture: x86_64                  
CPUs: 2                                         //CPU個數(shù)
Total Memory: 1.779GiB                       //內(nèi)存容量
Name: docker
ID: 3SU5:P433:UIFM:YK6O:FBGP:MJSN:MTSO:PKPA:3NMN:6VW4:XUOV:XL5H
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:                     
 127.0.0.0/8
Registry Mirrors:                 //采用的加速器信息
 http://f1361db2.m.daocloud.io/
Live Restore Enabled: false
Product License: Community Engine

Data Volume(數(shù)據(jù)卷管理操作)

數(shù)據(jù)庫管理操作分為兩種bind mount與docker managervolume兩種方式。

1)Bind mount(綁定掛載)

持久化存儲:本質(zhì)上是DockerHost文件系統(tǒng)中的目錄或文件,能夠直接被Mount到容器的文件系統(tǒng)中。在運行容器時,可以通過-v 實現(xiàn)。

Bind mount的特點:

  • Data Volume是目錄或文件,不能是沒有格式化的磁盤(塊設備);
  • 容器可以讀寫volume中的數(shù)據(jù);
  • 隨源文件變化而變化;
  • volume數(shù)據(jù)可以永久保存,即使使用它的容器已經(jīng)被銷毀;

示例:

[root@docker ~]# mkdir /html
[root@docker ~]# echo "hello world" >> /html/index.html    //創(chuàng)建測試頁面
[root@docker ~]# docker run -itd --name test -p 80:80 -v /html:/usr/share/nginx/html nginx:latest
//運行容器并使用“-v”選項指定掛載目錄,前面為docker host的目錄,“:”后面為容器中的目錄
[root@docker ~]# 
[root@docker ~]# curl 127.0.0.1                    //可以看到掛載已經(jīng)生效
hello world
[root@docker ~]# echo "lzj" > /html/index.html 
[root@docker ~]# curl 127.0.0.1                
//這種方式可以看出當源文件發(fā)生變化時,目標文件也會隨之發(fā)生變化
lzj
[root@docker ~]# docker inspect test    //查看容器的詳細信息
        "Mounts": [                            //找到Mount字段
            {
                "Type": "bind",                          //其類型為bind
                "Source": "/html",                      //源目錄
                "Destination": "/usr/share/nginx/html",               //目標目錄
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

注意:

  • DockerHost上需要被掛著的源文件或目錄,必須是已經(jīng)存在,否則,當做的一個目錄掛著到容器中;
  • 默認掛載到容器內(nèi)的文件,容器是有讀寫權(quán)限??梢栽谶\行容器“-v”選項后邊加“:ro” 選項來限制容器的寫入權(quán)限;
  • 可以掛載單獨的文件到容器內(nèi)部,使用場景:如果不想對整個目錄進行覆蓋,而只希望添加某個文件,就可以使用掛載單個文件;

2)Docker Manager Volume

示例:

[root@docker ~]# docker run -itd --name test1 -v /usr/share/nginx/html nginx:latest
//這種方式“-v”選項后,只需添加容器中的目錄即可
[root@docker ~]# docker inspect test1
        "Mounts": [
            {
                "Type": "volume",                     //其類型為volume
                "Name": "47545a64ef51aa1ea1065848b6cb5cc5f19e2da8b2c91966b256a910fca58c4d",
                "Source": "/var/lib/docker/volumes/47545a64ef51aa1ea1065848b6cb5cc5f19e2da8b2c91966b256a910fca58c4d/_data",            //源目錄(docker自動生成的)
                "Destination": "/usr/share/nginx/html",      //目標目錄
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
[root@docker ~]# ls /var/lib/docker/volumes/47545a64ef51aa1ea1065848b6cb5cc5f19e2da8b2c91966b256a910fca58c4d/_data
50x.html  index.html
//可以看出宿主機上的目錄就是容器中掛載的目錄

這種方式特點:

  • 會隨著源文件的變化而變化,跟Bind mount效果是一樣的!
  • 刪除容器的操作,默認不會對dockerhost主機上的原文件進行刪除,如果想要在刪除容器是將原文件刪除,可以在刪除容器時添加“-v”選項,(一般情況下不建議使用,因為文件有可能被其他容器就使用);

3)Volume container(容器與容器的數(shù)據(jù)共享)

Volume container:給其他容器提供volume存儲卷的容器。并且它可以提供bind mount,也可以提供docker manager volume。

[root@docker ~]#  docker create --name vc_data  -v /html:/usr/share/nginx/html busybox:latest
//創(chuàng)建一個容器(無須運行)
[root@docker ~]# docker run -itd --name test3 -P --volumes-from vc_data nginx:latest
//使用“--volumes-from”來掛載vc_data容器中的數(shù)據(jù)間到新的容器test3
[root@docker ~]# docker ps             //查看其映射的端口
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
021653708bb2        nginx:latest        "nginx -g 'daemon of…"   7 seconds ago       Up 5 seconds        0.0.0.0:32768->80/tcp    test3
[root@docker ~]# curl 127.0.0.1:32768        //測試效果
lzj

注意:以上方式在源目錄刪除后,容器中的數(shù)據(jù)也會發(fā)生丟失現(xiàn)象!

可以采用編寫dockerfile文件的方式,將目錄或文件寫到鏡像中,然后根據(jù)鏡像生成容器,才可保證原數(shù)據(jù)丟失,容器中的數(shù)據(jù)不會發(fā)生變化!

由于這種方式隨機性、靈活性太差,這里就不多做介紹了這樣就可以通過數(shù)據(jù)卷容器實現(xiàn)容器之間的數(shù)據(jù)共享。

通過以上機制,即使容器在運行過程中出現(xiàn)故障,用戶也不用擔心數(shù)據(jù)發(fā)生丟失。如果發(fā)生意外,只需快速重新創(chuàng)建容器即可!

注意:生產(chǎn)環(huán)境中最注重的就是存儲的可靠性,以及存儲的可動態(tài)擴展性,一定要在做數(shù)據(jù)卷時考慮到這一點,在這方面比較出色的還要數(shù)GFS文件系統(tǒng)了,我上面只是做了簡單的配置,若在生產(chǎn)環(huán)境中,一定要好好考慮,就比如上面做的鏡像卷容器,就可以在宿主機本地掛載GFS文件系統(tǒng),然后創(chuàng)建鏡像卷容器時,將掛載GFS的目錄映射到容器中的鏡像卷,這樣才是一個合格的鏡像卷容器。

——————————本文到此為止,感謝閱讀————————————

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

網(wǎng)站題目:Docker實現(xiàn)數(shù)據(jù)持久化-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://muchs.cn/article20/dhehjo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站收錄、網(wǎng)站營銷、App開發(fā)服務器托管、定制開發(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)

搜索引擎優(yōu)化