最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker之實現(xiàn)掛載的三種方式匯總

 更新時間:2023年02月25日 14:06:58   作者:一只菜狗  
這篇文章主要介紹了Docker之實現(xiàn)掛載的三種方式匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Docker實現(xiàn)掛載的方式

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

1.容器是基于鏡像創(chuàng)建的,最后的容器文件系統(tǒng)包括鏡像的只讀層+可寫層,容器中的進程操作的數(shù)據持久化都是保存在容器的可寫層上。一旦容器刪除后,這些數(shù)據就沒了,除非我們人工備份下來(或者基于容器創(chuàng)建新的鏡像)。能否可以讓容器進程持久化的數(shù)據保存在主機上呢?這樣即使容器刪除了,數(shù)據還在。

2. 當我們在開發(fā)一個web應用時,開發(fā)環(huán)境是在主機本地,但運行測試環(huán)境是放在docker容器上。這樣的話,我在主機上修改文件(如html,js等)后,需要再同步到容器中。這顯然比較麻煩。

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

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

下面我們來介紹具體的實現(xiàn)機制。

一、通過docker run命令

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

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

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

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

上面-v的標記只設置了容器的掛載點,并沒有指定關聯(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
? ? }
],

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

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

下面我們創(chuàng)建另一個容器可以和test1(已經創(chuàng)建好的容器)共享 /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 兩個目錄,且目錄中內容是共享的,任何一個容器修改了內容,別的容器都能獲取到。

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

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

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

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

如: docker run --name dbdata myimage echo “data container”

說明:有個卷,容器之間的數(shù)據共享比較方便,但也有很多問題需要解決,如權限控制、數(shù)據的備份、卷的刪除等。以后在介紹。

關于Docker中掛載的解釋

現(xiàn)在有這么一個命令:

docker run -p 33061:3306 --name mysql ?--restart=always -e MYSQL_ROOT_PASSWORD=pisen ?-v /etc/localtime:/etc/localtime:ro ?-v /etc/timezone:/etc/timezone:ro ?-d mysql:5.7

因為著重要說掛載的問題,就單獨揪出來參數(shù)來說

-v /etc/localtime:/etc/localtime:ro

就是將  宿主機的/etc/localtime文件掛載到容器的/etc/localtime 文件,并且容器內的/etc/localtime文件設置為只讀(:ro)

實際的效果就是mysql容器啟動后,時間時區(qū)的設置,使用的就是宿主機的 /etc/localtime 文件內設置的內容起作用。

如果沒有設置只讀的情況下,該掛載實現(xiàn)的效果是:

情況1:使用echo命令去修改

echo 'lq' > timezone

無論更改宿主機上的/etc/localtime文件內容還是修改容器內的/etc/localtime文件內容,都會影響到對方。  

情況2:使用vi命令去修改

vi timezone

則無論修改哪邊都不會影響到另外一方的文件內容。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Docker 安裝 MySQL(8和5.7)

    Docker 安裝 MySQL(8和5.7)

    這篇文章主要介紹了Docker 安裝 MySQL(8和5.7),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 使用Docker-compose離線部署Django應用的方法

    使用Docker-compose離線部署Django應用的方法

    這篇文章主要介紹了使用Docker-compose離線部署Django應用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • docker容器連接宿主機redis與mysql的配置方法

    docker容器連接宿主機redis與mysql的配置方法

    最近有朋友在工作時遇到一個問題,docker容器無法訪問宿主機的redis,所以這里給大家總結下,這篇文章主要給大家介紹了關于docker容器連接宿主機redis與mysql的配置方法,需要的朋友可以參考下
    2023-06-06
  • Docker部署UI自動化測試環(huán)境的實現(xiàn)步驟

    Docker部署UI自動化測試環(huán)境的實現(xiàn)步驟

    本文主要介紹了Docker部署UI自動化測試環(huán)境的實現(xiàn)步驟,通過Docker可以快速創(chuàng)建、部署和測試腳本,提高測試效率,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Docker拉取鏡像超時的原因分析與解決方法

    Docker拉取鏡像超時的原因分析與解決方法

    這篇文章主要為大家詳細介紹了Docker在拉取鏡像時超時的相關原因分析與解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • 如何打jar包為Docker鏡像并部署

    如何打jar包為Docker鏡像并部署

    這篇文章主要介紹了打jar包為Docker鏡像并部署,通過將應用程序打包為Docker鏡像,并在容器中運行,可以提供更高的靈活性、可移植性和可靠性,簡化應用程序的部署和管理,提升開發(fā)和運維效率,降低系統(tǒng)運行成本,需要的朋友可以參考下
    2023-11-11
  • maven構建docker鏡像push到鏡像倉庫方式

    maven構建docker鏡像push到鏡像倉庫方式

    這篇文章主要介紹了maven構建docker鏡像push到鏡像倉庫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解利用nginx和docker實現(xiàn)一個簡易的負載均衡

    詳解利用nginx和docker實現(xiàn)一個簡易的負載均衡

    本篇文章主要介紹了利用nginx和docker實現(xiàn)一個簡易的負載均衡 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 如何利用Docker部署一個簡單的springboot項目

    如何利用Docker部署一個簡單的springboot項目

    這篇文章主要介紹了如何利用Docker部署一個簡單的springboot項目,本文通過實例圖文實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Docker可視化面板Portainer的實現(xiàn)

    Docker可視化面板Portainer的實現(xiàn)

    Portainer是一個免費的容器管理工具,支持Docker環(huán)境的可視化管理,通過Portainer,用戶可以輕松地在Windows或Linux容器中部署服務,大大簡化了Docker容器的管理工作,感興趣的可以了解一下
    2024-11-11

最新評論

阜城县| 始兴县| 靖州| 甘洛县| 保山市| 明光市| 昭觉县| 班玛县| 阿瓦提县| 安达市| 西林县| 裕民县| 辛集市| 玉屏| 天镇县| 西乌珠穆沁旗| 洪泽县| 买车| 芦山县| 灵川县| 星子县| 莆田市| 德兴市| 封丘县| 同德县| 孝昌县| 濮阳县| 安龙县| 法库县| 南昌县| 安庆市| 碌曲县| 耒阳市| 古丈县| 阿尔山市| 牟定县| 定兴县| 鹤壁市| 尼玛县| 锦屏县| 蕲春县|