亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker中容器數(shù)據(jù)卷(Data Volume)和數(shù)據(jù)管理詳解

 更新時(shí)間:2017年02月24日 11:03:15   作者:IT筆錄  
本文主要給大家介紹了關(guān)于Docker中容器數(shù)據(jù)卷(Data Volume)和數(shù)據(jù)管理的相關(guān)資料,文中介紹的很詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。

卷(Volume)

眾所周知卷(Volume)是容器中的一個(gè)數(shù)據(jù)掛載點(diǎn),卷可以繞過(guò)聯(lián)合文件系統(tǒng),從而為Docker 提供持久數(shù)據(jù),所提供的數(shù)據(jù)還可以在宿主機(jī)-容器或多個(gè)容器之間共享。通過(guò)卷,我們可以可以使修改數(shù)據(jù)直接生效,而不必重新構(gòu)建鏡像。

一、數(shù)據(jù)卷

數(shù)據(jù)卷是一個(gè)可以繞過(guò)聯(lián)合文件系統(tǒng)的,專門指定的可在一或多個(gè)容器間共享目錄。卷為提供為持久化或共享數(shù)據(jù)提供了一些有用的特性。

數(shù)據(jù)卷設(shè)計(jì)的初哀是提供持久化數(shù)據(jù),而與容器的生命周期無(wú)關(guān)。因此,在刪除容器時(shí),Docker不會(huì)自動(dòng)刪除卷,直到?jīng)]有容器再引用。

1.1 添加數(shù)據(jù)卷

可以在docker createdocker create命令創(chuàng)建容器時(shí),通過(guò)-v參數(shù)為容器添加數(shù)據(jù)卷。-v參數(shù)參數(shù)可以多次使用,以添加多個(gè)數(shù)據(jù)卷。

如,可以像下面這樣為容器添加一個(gè)卷:

$ sudo docker run -t -i -v /home/test --name test itbilu/test /bin/bash

這樣就會(huì)在容器內(nèi)/webapp位置創(chuàng)建一個(gè)卷。

除了在創(chuàng)建容器時(shí)添加數(shù)據(jù)卷外,還可以通過(guò)Dockerfile文件中通過(guò)Volume指令添加,Volume可以多次使用以添加多個(gè)數(shù)據(jù)卷。

說(shuō)明:本文中使用的示例鏡像(itbilu/test)通過(guò)以下Dockerfile文件創(chuàng)建:

# Version: 0.0.3
FROM ubuntu:16.04
MAINTAINER 何民三 "cn.liuht@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello World, 我是個(gè)容器' \ 
 > /var/www/html/index.html
RUN mkdir /home/itbilu/
ENV ITBILU_PATH /home/itbilu/
VOLUME [$ITBILU_PATH]
EXPOSE 80

1.2 卷位置

添加卷后,可以通過(guò)docker inspect來(lái)查看數(shù)據(jù)卷在容器中的位置:

$ sudo docker inspect test

docker inspect可以用來(lái)查看容器或鏡像的詳細(xì)配置信息??梢栽谌萜鞯腗ounts節(jié)點(diǎn)下,查看容器的卷信息:

...
"Mounts": [{
 "Type": "volume",
 "Name": "5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24",
 "Source": "/var/lib/docker/volumes/5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24/_data",
 "Destination": "/home/test",
 "Driver": "local",
 "Mode": "",
 "RW": true,
 "Propagation": ""
},
{
 "Type": "volume",
 "Name": "e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773",
 "Source": "/var/lib/docker/volumes/e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773/_data",
 "Destination": "[/home/itbilu/]",
 "Driver": "local",
 "Mode": "",
 "RW": true,
 "Propagation": ""
}],
...

在以上示例中,有兩個(gè)掛載卷,一個(gè)是在docker run創(chuàng)建容器時(shí)創(chuàng)建的,而另一個(gè)是在創(chuàng)建運(yùn)行容器鏡像的Dockerfile文件中通過(guò)VOLUME指令創(chuàng)建。其中,Source表示宿主機(jī)源文件位置,Destination表示數(shù)據(jù)卷在容器中的掛載位置,而RW表示卷是否可讀/寫。

1.3 掛載本地?cái)?shù)據(jù)到容器數(shù)據(jù)卷

在前面示例中,我們運(yùn)行容器時(shí)并沒(méi)有指定要掛載到容器中數(shù)據(jù)卷的本地目錄,所在Docker使用一個(gè)默認(rèn)數(shù)據(jù)目錄。 -v參數(shù)除了可以在容器中創(chuàng)建數(shù)據(jù)卷外,還可以將宿主機(jī)中的目錄掛載到容器中的數(shù)據(jù)卷。

如,運(yùn)行容器,并將本地的~/code/itbilu目錄掛載到容器的/home/itbilu數(shù)據(jù)卷上:

$ sudo docker run -t -i -v ~/code/itbilu:/home/itbilu --name test itbilu/test /bin/bas

注意:掛載本地目錄到容器內(nèi)的掛載目錄時(shí),如果容器內(nèi)的數(shù)據(jù)卷中已經(jīng)存在數(shù)據(jù),那么本地內(nèi)容將與數(shù)據(jù)卷中的數(shù)據(jù)重疊,而不會(huì)刪除數(shù)據(jù)。

其中,容器目錄必須使用絕對(duì)路徑,而本地目錄可以使用絕對(duì)路徑或其它形式。

掛載共享存儲(chǔ)

除了可以載掛本地目錄到容器數(shù)據(jù)卷外,一些Docker卷插件讓你可以掛載共享存儲(chǔ)到容器的數(shù)據(jù)卷,如:iSCSI、NFS、FC。使用共享卷的好處是它們是獨(dú)立于主機(jī)的,這意味著,只要有訪問(wèn)共享存儲(chǔ)權(quán)限,并安裝插件,就可以在任何容器上啟動(dòng)卷。

詳細(xì)參考:

Mount a shared-storage volume as a data volume

掛載本地文件到容器數(shù)據(jù)卷

-v參數(shù)不僅可掛載目錄,還可以掛載單個(gè)文件。如:

$ sudo docker run -t -i -v ~/.bash_history:/root/.bash_history \
--name test itbilu/test /bin/bash

以上會(huì)把本地的~/.bash_history文件掛載到新容器中,這樣你就可以在容器內(nèi)訪問(wèn)宿主上的bash歷史記錄。

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

如果你有一些要在容器之間共享的持久性數(shù)據(jù),或者希望在非持久容器中使用,那么最好創(chuàng)建一個(gè)命名的數(shù)據(jù)卷容器,然后從其掛載數(shù)據(jù)。

接下來(lái),我們創(chuàng)建一個(gè)新的命名的共享容器。這個(gè)容器不運(yùn)行一個(gè)應(yīng)用程序,它利用training/postgres鏡像在所有的容器之間創(chuàng)建了一個(gè)共享層,以節(jié)省磁盤空間。

$ sudo docker create -v /dbdata --name dbstore training/postgres /bin/true

注意:training/postgres是Docker 官方文檔中提供的一個(gè)鏡像,本文拿來(lái)直接使用了。

使用數(shù)據(jù)卷容器

創(chuàng)建數(shù)據(jù)卷容器后,我們可以通過(guò)--volumes-from選項(xiàng),將一個(gè)數(shù)據(jù)容器掛載到其它容器:

$ sudo docker run -d --volumes-from dbstore --name db1 training/postgres

也可以在多個(gè)容器間共享。如,掛載到另一個(gè)容器:

$ sudo docker run -d --volumes-from dbstore --name db2 training/postgres

這時(shí),如果training/postgres鏡像內(nèi)有名/dbdata的目錄,則會(huì)從dbstore容器掛載卷,并會(huì)隱藏training/postgres鏡像中/dbdata下的文件。最終只有dbstore容器中的文件可見(jiàn)。

還可以擴(kuò)展掛載鏈,從已經(jīng)存在的dbstore容器(如:db1、db2)來(lái)掛載卷:

$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

這種情況下,如果移除己掛載卷的容器,無(wú)論是最初的dbstore容器,還是其后的db1或db2容器,卷都不會(huì)被移除。要將卷從硬盤上移除,必須使用docker rm -v命令刪除最后一個(gè)引用了該卷的容器。

三、備份、恢復(fù)與遷移數(shù)據(jù)卷

除上述操作外,數(shù)據(jù)卷的常用操作還有數(shù)據(jù)卷備份、恢復(fù)、合并操作。以下是一些常用操作:

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

在前面介紹數(shù)據(jù)卷容器時(shí),我們創(chuàng)建了一個(gè)名為dbdata容器,并在容器中創(chuàng)建了一個(gè)/dbdata的數(shù)據(jù)卷。接下來(lái),可以在創(chuàng)建容器使用--volumes-from參數(shù)來(lái)掛載這個(gè)數(shù)據(jù)卷,并對(duì)數(shù)據(jù)進(jìn)行備份:

$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

在這個(gè)操作中,我們通過(guò)ubuntu鏡像創(chuàng)建了一個(gè)容器,創(chuàng)建容器時(shí)通過(guò)--volumes-from參數(shù)共享了數(shù)據(jù)卷容器中的數(shù)據(jù),并將當(dāng)前目錄($(pwd) )掛載到了數(shù)據(jù)卷中。容器運(yùn)行后,使用tar命令對(duì)數(shù)據(jù)卷進(jìn)行了備份。

命令執(zhí)行結(jié)束后,容器就會(huì)停止,之后就可以在本地當(dāng)前操作目錄下找到所備份的數(shù)據(jù)。

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

數(shù)據(jù)備份后,可以在創(chuàng)建容器恢復(fù)備份數(shù)據(jù)到容器內(nèi)的數(shù)據(jù)卷中,從而實(shí)現(xiàn)數(shù)據(jù)的遷移。

首先,創(chuàng)建并運(yùn)行容器并添加一個(gè)數(shù)據(jù)卷:

$ sudo docker run -i -t -v /dbdata --name dbdata2 ubuntu /bin/bash

然后通過(guò)tar命令恢復(fù)備份數(shù)據(jù):

$ sudo docker run --rm --volumes-from dbdata2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

這樣,數(shù)據(jù)就被恢復(fù)到了容器dbdata2的/dbdata目錄下,我們可以容器中操作和使用這些數(shù)據(jù)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 在Docker中使用mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼

    在Docker中使用mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了在Docker中使用mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Docker 限制容器可用的CPU的方式

    Docker 限制容器可用的CPU的方式

    這篇文章主要介紹了Docker 限制容器可用的CPU的方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • docker compose部署主從復(fù)制的實(shí)現(xiàn)

    docker compose部署主從復(fù)制的實(shí)現(xiàn)

    本文記錄了通過(guò) docker compose 搭建一主雙從的 Redis 服務(wù)。文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • dockerfile健康檢查HEALTHCHECK的命令學(xué)習(xí)

    dockerfile健康檢查HEALTHCHECK的命令學(xué)習(xí)

    HEALTHCHECK 指令告訴 Docker 如何測(cè)試一個(gè)容器,以檢查它是否仍在工作,本文主要介紹了dockerfile健康檢查HEALTHCHECK的命令學(xué)習(xí),感興趣的可以了解一下
    2024-01-01
  • Docker構(gòu)建pinpoint部署的方法

    Docker構(gòu)建pinpoint部署的方法

    這篇文章主要介紹了Docker構(gòu)建pinpoint部署的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 基于jib-maven-plugin插件快速構(gòu)建微服務(wù)docker鏡像的方法

    基于jib-maven-plugin插件快速構(gòu)建微服務(wù)docker鏡像的方法

    這篇文章主要介紹了基于jib-maven-plugin快速構(gòu)建微服務(wù)docker鏡像的方法,對(duì)于?Java?程序來(lái)說(shuō)使用?jib-maven-plugin?插件來(lái)構(gòu)建鏡像還是非常方便的,本文通過(guò)實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • Docker如何使用link建立容器之間的連接

    Docker如何使用link建立容器之間的連接

    本篇文章主要介紹了Docker如何使用link建立容器之間的連接,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • docker安裝MinIO全過(guò)程

    docker安裝MinIO全過(guò)程

    這篇文章主要介紹了docker安裝MinIO全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Docker網(wǎng)絡(luò)配置的三種方式

    Docker網(wǎng)絡(luò)配置的三種方式

    在使用Docker時(shí),網(wǎng)絡(luò)通信是必不可少的,它可以使不同的Docker容器相互通信,也可以將容器與外部網(wǎng)絡(luò)連接起來(lái),本文給大家介紹了Docker網(wǎng)絡(luò)配置的三種方式,文中通過(guò)圖文給大家講解非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 一文教會(huì)你用Docker打包Python運(yùn)行環(huán)境

    一文教會(huì)你用Docker打包Python運(yùn)行環(huán)境

    Docker提供了容器級(jí)別的資源隔離,由于Python的外部依賴管理中存在的問(wèn)題,我們通常會(huì)使用virtualenv來(lái)對(duì)不同的項(xiàng)目創(chuàng)建其唯一的依賴環(huán)境,下面這篇文章主要給大家介紹了如何通過(guò)一篇文章教會(huì)你用Docker打包Python運(yùn)行環(huán)境的相關(guān)資料,需要的朋友可以參考下
    2022-05-05

最新評(píng)論