目錄
docker有哪幾種掛載方式
一透過docker run指令
二 透過dockerfile建立掛載點
三容器共用磁碟區(掛載點)
四最佳實踐:資料容器
首頁 運維 Docker docker有哪幾種掛載方式

docker有哪幾種掛載方式

Jan 28, 2022 am 10:23 AM
docker

方式:1、利用run指令,語法為「docker run --name test1 -it -v」;2、利用dockerfile的VOLUME指令建立掛載點,語法為「VOLUME ["/data1" ,"/data2"]”;3、利用容器共享卷。

docker有哪幾種掛載方式

本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。

docker有哪幾種掛載方式

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

1.容器是基於映像建立的,最後的容器檔案系統包括鏡像的唯讀層可寫層,容器中的程序操作的資料持久化都是保存在容器的可寫層上。一旦容器刪除後,這些資料就沒了,除非我們人工備份下來(或基於容器建立新的鏡像)。能否讓容器程序持久化的資料保存在主機上呢?這樣即使容器刪除了,資料還在。

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

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

3. 多個容器運行一組相關聯的服務,如果他們要共享一些資料怎麼辦?

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

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

一透過docker run指令

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

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

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

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

上面-v的標記只設定了容器的掛載點,並沒有指定關聯的主機目錄。這時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"值是對應的主機目錄。可以看出這種方式對應的主機目錄是自動建立的,其目的不是讓在主機上修改,而是讓多個容器共用。

二 透過dockerfile建立掛載點

上面介紹的透過docker run指令的-v標識所建立的掛載點只能對所建立的容器有效。透過dockerfile的 VOLUME 指令可以在映像中建立掛載點,這樣只要透過該映像建立的容器都有了掛載點。還有一個差異是,透過 VOLUME 指令建立的掛載點,無法指定主機上對應的目錄,是自動產生的。

#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]
登入後複製

上面的dockfile檔案透過VOLUME指令指定了兩個掛載點/data1 和/data2.

我們透過docker inspect 查看透過該dockerfile所建立的映像所產生的容器,可以看到以下資訊

"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
    }
],
登入後複製

可以看到兩個掛載點的資訊。

三容器共用磁碟區(掛載點)

下面我們建立另一個容器可以和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 兩個目錄,且目錄中內容是共享的,任何一個容器修改了內容,別的容器都能取得。

四最佳實踐:資料容器

如果多個容器需要共用資料(如持久化資料庫、設定檔或資料檔案等),可以考慮建立一個特定的資料容器,該容器有1個或多個卷。

其它容器透過–volumes-from 來共享這個資料容器的磁碟區。

因為容器的磁碟區本質上對應主機上的目錄,所以這個資料容器也不需要啟動。

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

說明:有個卷,容器之間的資料共享比較方便,但也有很多問題需要解決,如權限控制、資料的備份、磁碟區的刪除等。這些內容後續文章介紹。

推薦學習:《docker影片教學

以上是docker有哪幾種掛載方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

docker版本怎麼看 docker版本怎麼看 Apr 15, 2025 am 11:51 AM

要獲取 Docker 版本,您可以執行以下步驟:運行 Docker 命令“docker --version”來查看客戶端和服務器版本。對於 Mac 或 Windows,還可以通過 Docker Desktop GUI 的“版本”選項卡或“關於 Docker Desktop”菜單查看版本信息。

docker怎麼創建鏡像 docker怎麼創建鏡像 Apr 15, 2025 am 11:27 AM

創建 Docker 鏡像步驟:編寫包含構建指令的 Dockerfile。在終端中構建鏡像,使用 docker build 命令。標記鏡像,使用 docker tag 命令分配名稱和標籤。

docker desktop怎麼用 docker desktop怎麼用 Apr 15, 2025 am 11:45 AM

如何使用 Docker Desktop? Docker Desktop 是一款工具,用於在本地機器上運行 Docker 容器。其使用步驟包括:1. 安裝 Docker Desktop;2. 啟動 Docker Desktop;3. 創建 Docker 鏡像(使用 Dockerfile);4. 構建 Docker 鏡像(使用 docker build);5. 運行 Docker 容器(使用 docker run)。

docker怎麼更新鏡像 docker怎麼更新鏡像 Apr 15, 2025 pm 12:03 PM

更新 Docker 鏡像的步驟如下:拉取最新鏡像標記新鏡像為特定標籤刪除舊鏡像(可選)重新啟動容器(如果需要)

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

docker怎麼查看日誌 docker怎麼查看日誌 Apr 15, 2025 pm 12:24 PM

查看 Docker 日誌的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令運行 /bin/sh 並查看日誌文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

docker鏡像源怎麼換國內 docker鏡像源怎麼換國內 Apr 15, 2025 am 11:30 AM

可切換到國內鏡像源,步驟如下:1. 編輯配置文件 /etc/docker/daemon.json,添加鏡像源地址;2. 保存退出後,重啟 Docker 服務 sudo systemctl restart docker,即可提升鏡像下載速度和穩定性。

docker鏡像怎麼保存 docker鏡像怎麼保存 Apr 15, 2025 am 11:54 AM

在 Docker 中保存鏡像,可以使用 docker commit 命令創建新的鏡像,包含指定容器的當前狀態,語法為:docker commit [選項] 容器ID 鏡像名稱。要保存鏡像到倉庫,可以使用 docker push 命令,語法為:docker push 鏡像名稱[:標籤]。要導入已保存的鏡像,可以使用 docker pull 命令,語法為:docker pull 鏡像名稱[:標籤]。

See all articles