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

淺談docker Dockerfile 指令 VOLUME 介紹

 更新時間:2017年02月23日 09:39:25   作者:51kata  
本篇文章主要介紹了淺談docker Dockerfile 指令 VOLUME 介紹 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在介紹VOLUME指令之前,我們來看下如下場景需求:

1)容器是基于鏡像創(chuàng)建的,最后的容器文件系統(tǒng)包括鏡像的只讀層+可寫層,容器中的進程操作的數(shù)據(jù)持久化都是保存在容器的可寫層上。一旦容器刪除后,這些數(shù)據(jù)就沒了,除非我們?nèi)斯浞菹聛恚ɑ蛘呋谌萜鲃?chuàng)建新的鏡像)。能否可以讓容器進程持久化的數(shù)據(jù)保存在主機上呢?這樣即使容器刪除了,數(shù)據(jù)還在。

2)當我們在開發(fā)一個web應用時,開發(fā)環(huán)境是在主機本地,但運行測試環(huán)境是放在docker容器上。

這樣的話,我在主機上修改文件(如html,js等)后,需要再同步到容器中。這顯然比較麻煩。

3)多個容器運行一組相關(guān)聯(lián)的服務,如果他們要共享一些數(shù)據(jù)怎么辦?

對于這些問題,我們當然能想到各種解決方案。而docker本身提供了一種機制,可以將主機上的某個目錄與容器的某個目錄(稱為掛載點、或者叫卷)關(guān)聯(lián)起來,容器上的掛載點下的內(nèi)容就是主機的這個目錄下的內(nèi)容,這類似linux系統(tǒng)下mount的機制。 這樣的話,我們修改主機上該目錄的內(nèi)容時,不需要同步容器,對容器來說是立即生效的。 掛載點可以讓多個容器共享。

下面我們來介紹具體的機制。

一、通過docker run命令

1、運行命令:docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash

其中的 -v 標記 在容器中設置了一個掛載點 /data(就是容器中的一個目錄),并將主機上的 /home/xqh/myimage 目錄中的內(nèi)容關(guān)聯(lián)到 /data下。

這樣在容器中對/data目錄下的操作,還是在主機上對/home/xqh/myimage的操作,都是完全實時同步的,因為這兩個目錄實際都是指向主機目錄。

2、運行命令:docker run --name test1 -it -v /data ubuntu /bin/bash

上面-v的標記只設置了容器的掛載點,并沒有指定關(guān)聯(lián)的主機目錄。這時docker會自動綁定主機上的一個目錄。通過docker inspect 命令可以查看到。

xqh@ubuntu:~/myimage$ docker inspect test1
[
{
  "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c",
.............................
  "Mounts": [
    {
      "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01",
      "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data",
      "Destination": "/data",
      "Driver": "local",
      "Mode": "",
      "RW": true
    }
  ],
...........................

上面 Mounts下的每條信息記錄了容器上一個掛載點的信息,"Destination" 值是容器的掛載點,"Source"值是對應的主機目錄。

可以看出這種方式對應的主機目錄是自動創(chuàng)建的,其目的不是讓在主機上修改,而是讓多個容器共享。

二、通過dockerfile創(chuàng)建掛載點

上面介紹的通過docker run命令的-v標識創(chuàng)建的掛載點只能對創(chuàng)建的容器有效。

通過dockerfile的 VOLUME 指令可以在鏡像中創(chuàng)建掛載點,這樣只要通過該鏡像創(chuàng)建的容器都有了掛載點。

還有一個區(qū)別是,通過 VOLUME 指令創(chuàng)建的掛載點,無法指定主機上對應的目錄,是自動生成的。

#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]

上面的dockfile文件通過VOLUME指令指定了兩個掛載點 /data1 和 /data2.

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

  "Mounts": [
    {
      "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21",
      "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data",
      "Destination": "/data1",
      "Driver": "local",
      "Mode": "",
      "RW": true
    },
    {
      "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36",
      "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data",
      "Destination": "/data2",
      "Driver": "local",
      "Mode": "",
      "RW": true
    }
  ],

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

三、容器共享卷(掛載點)

docker run --name test1 -it myimage /bin/bash

上面命令中的 myimage是用前面的dockerfile文件構(gòu)建的鏡像。 這樣容器test1就有了 /data1 和 /data2兩個掛載點。

下面我們創(chuàng)建另一個容器可以和test1共享 /data1 和 /data2卷 ,這是在 docker run中使用 --volumes-from標記,如:

可以是來源不同鏡像,如:

docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash

也可以是同一鏡像,如:

docker run --name test3 -it --volumes-from test1 myimage /bin/bash

上面的三個容器 test1 , test2 , test3 均有 /data1 和 /data2 兩個目錄,且目錄中內(nèi)容是共享的,任何一個容器修改了內(nèi)容,別的容器都能獲取到。

四、最佳實踐:數(shù)據(jù)容器

如果多個容器需要共享數(shù)據(jù)(如持久化數(shù)據(jù)庫、配置文件或者數(shù)據(jù)文件等),可以考慮創(chuàng)建一個特定的數(shù)據(jù)容器,該容器有1個或多個卷。

其它容器通過--volumes-from 來共享這個數(shù)據(jù)容器的卷。

因為容器的卷本質(zhì)上對應主機上的目錄,所以這個數(shù)據(jù)容器也不需要啟動。

如:

docker run --name dbdata myimage echo "data container"

說明:有個卷,容器之間的數(shù)據(jù)共享比較方便,但也有很多問題需要解決,如權(quán)限控制、數(shù)據(jù)的備份、卷的刪除等。這些內(nèi)容后續(xù)文章介紹。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot使用Docker分層打包的設置方法

    Spring Boot使用Docker分層打包的設置方法

    Spring Boot 現(xiàn)在支持分層打包技術(shù)了, 我們也來用一用, 加速Docker打包, 構(gòu)建的時候速度也會非???本文重點給大家介紹Spring Boot使用Docker分層打包的設置方法,感興趣的朋友一起看看吧
    2021-08-08
  • docker連接spring boot和mysql容器方法介紹

    docker連接spring boot和mysql容器方法介紹

    這篇文章主要介紹了docker連接spring boot和mysql容器方法介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • docker部署訪問postgres數(shù)據(jù)庫的實現(xiàn)方法

    docker部署訪問postgres數(shù)據(jù)庫的實現(xiàn)方法

    本文主要介紹了docker部署訪問postgres數(shù)據(jù)庫的實現(xiàn)方法,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Docker安裝運行apache2服務器做圖片服務器的方法

    Docker安裝運行apache2服務器做圖片服務器的方法

    這篇文章主要介紹了Docker安裝運行apache2服務器做圖片服務器的方法,需要的朋友可以參考下
    2017-06-06
  • 用docker一鍵部署前后端分離項目的詳細流程

    用docker一鍵部署前后端分離項目的詳細流程

    這篇文章主要介紹了如何用docker一鍵部署前后端分離項目的詳細流程,通過圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • 如何使用docker配置wordpress

    如何使用docker配置wordpress

    本文詳細介紹了如何使用Docker安裝并配置WordPress,包括配置Yum源下載Docker,檢查安裝成功,并設置開機啟動,還涉及了如何配置MySQL密碼,以及設置php.ini來增加WordPress的文件上傳大小限制,最后,通過訪問指定IP完成WordPress的配置
    2024-10-10
  • docker compose自定義網(wǎng)絡實現(xiàn)固定容器ip地址

    docker compose自定義網(wǎng)絡實現(xiàn)固定容器ip地址

    這篇文章主要介紹了docker compose自定義網(wǎng)絡實現(xiàn)固定容器ip地址,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • dockerfile指令構(gòu)建docker鏡像的示例代碼

    dockerfile指令構(gòu)建docker鏡像的示例代碼

    本文主要介紹了dockerfile指令構(gòu)建docker鏡像的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 用docker部署RabbitMQ環(huán)境的詳細介紹

    用docker部署RabbitMQ環(huán)境的詳細介紹

    這篇文章主要介紹了用docker部署RabbitMQ環(huán)境,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 解決docker重啟redis,mysql數(shù)據(jù)丟失的問題

    解決docker重啟redis,mysql數(shù)據(jù)丟失的問題

    這篇文章主要介紹了解決docker重啟redis,mysql數(shù)據(jù)丟失的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論