欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker容器中數(shù)據(jù)卷volumes的使用

 更新時間:2022年04月12日 15:07:13   作者:冷雨澤  
volume(卷)用來存儲docker持久化的數(shù)據(jù),其實(shí)就是一個主機(jī)上的一個目錄,由docker統(tǒng)一管理,下面這篇文章主要給大家介紹了關(guān)于Docker容器中數(shù)據(jù)卷volumes使用的相關(guān)資料,需要的朋友可以參考下

volumes是Docker數(shù)據(jù)持久化機(jī)制。bind mounts依賴主機(jī)目錄結(jié)構(gòu),volumes完全由Docker管理。Volumes有以下優(yōu)點(diǎn):

  • Volumes更容易備份和移植。
  • 可以通過Docker CLI或API進(jìn)行管理
  • Volumes可以無區(qū)別的工作中Windows和Linux下。
  • 多個容器共享Volumes更安全。
  • Volume驅(qū)動可以允許你把數(shù)據(jù)存儲到遠(yuǎn)程主機(jī)或者云端,并且加密數(shù)據(jù)內(nèi)容,以及添加額外功能。
  • 一個新的數(shù)據(jù)內(nèi)容可以由容器預(yù)填充。

而且,volumes不會增加容器的大小,生命周期獨(dú)立與容器。

如果你的容器產(chǎn)生不需要持久化數(shù)據(jù),請使用tmpfs mount方式,可以避免容器的寫入層數(shù)據(jù)寫入。

Volumes use  rprivate  bind propagation, and bind propagation is not configurable for volumes.(不理解什么意思)

選擇使用 -v還是—mount

起初,-v或者—volume用于獨(dú)立容器,--mount用于 swarm services。然而,從 Docker 17.06開始,也可是使用 --mount用于獨(dú)立容器。—mount命令更精準(zhǔn)詳細(xì)。-v將選項進(jìn)行了合并。使用—mount。

如果你需要制定volume驅(qū)動選項,你必須使用 —mount。

  • -v或者--volume:由3部分參數(shù)組成,使用“:”間隔。順序不能顛倒。
    • 第一個部分是volumes名字,在宿主機(jī)上具有唯一性。匿名卷名字系統(tǒng)給出。
    • 第二部分是掛載到容器里的文件或文件夾路徑。
    • 第三部分是可選項列表分隔符,例如“or”,這些可選項在下面會討論。
  •     —mount:由多個鍵值對組成,<key>=<value>。—mount要比-v或者--volume命令更長,但是更容易理解。
    • type,可以是bind,volume或者tmpfs。這篇文章主要討論volumes,所以type一直使用volume.
    • source,volumes的名字,匿名volume可以省略。source可縮寫為src.
    • destination,掛載到容器中的文件或目錄路徑??梢部s寫為dst或者使用target。
    • readonly,指定掛載在容器中為只讀。
    • volume-opt,可選屬性,可以多次使用。

下面是—mount和-v的例子。

-v和—mount的不同行為

與bind mounts不同,對于—mount和-v所有的選項都可以使用。

當(dāng)使用volumes服務(wù)時,只支持—mount.

創(chuàng)建和管理volumes

不像bind mount,你可以在容器外創(chuàng)建和管理volumes。

創(chuàng)建一個volume:

$ docker volume create my-vol

顯示所有volumes

$ docker volume ls
local               my-vol

查看volumes

$  docker volume inspect my-vol
[
  {
  "Driver" :  "local" ,
         "Labels" :  {} ,
         "Mountpoint" :  "/var/lib/docker/volumes/my-vol/_data" ,
         "Name" :  "my-vol" ,
         "Options" :  {} ,
         "Scope" :  "local"
  }
]

刪除一個volume:

$ docker volume rm my-vol

啟動一個帶volume的容器

如果你啟動一個帶有volume容器,volume還沒有創(chuàng)建,Docker會為你創(chuàng)建。下面的例子掛載myvol2到容器中的/app/下。

下面的例子-v和—mount結(jié)果是一樣的。
—mount:

$  docker run  -d   \
  --name  devtest  \
  --mount   source = myvol2,target = /app  \
  nginx:latest

-v:

$ ?docker run ?-d? ?\
?--name? devtest ?\
?-v? myvol2:/app ?\
? nginx:latest

使用inspect查看掛載是否正確,查看Mounts部分:

"Mounts"?:? ?[
?{
?"Type"?:? ?"volume"?,
?"Name"?:? ?"myvol2"?,
?"Source"?:? ?"/var/lib/docker/volumes/myvol2/_data"?,
?"Destination"?:? ?"/app"?,
?"Driver"?:? ?"local"?,
?"Mode"?:? ?""?,
?"RW"?:? ?true?,
?"Propagation"?:? ?""
?}
],

可以看出掛載正確,并且是可讀寫的。

停止容器然后刪除volume

$ ?docker container stop devtest
$ ?docker container rm devtest
$ ?docker volume rm myvol2

啟動一個帶有volumes服務(wù)

當(dāng)你啟動服務(wù)定義一個volume,每個服務(wù)可以使用自己本地人volume.如果你使用local volume,容器不能分享數(shù)據(jù),但是一些volume驅(qū)動支持分享存儲。 Docker for AWS and Docker for Azure使用 Cloudstor插件 都支持持久化存儲。

下面的例子啟動4份nginx服務(wù),每個使用一個本地存儲myvol2。

$ ?docker service create ?-d? ?\
?--replicas?=?4 ?\
?--name? devtest-service ?\
?--mount? ?source?=?myvol2,target?=?/app ?\
? nginx:latest

使用 docker service ps devtest-service  查看服務(wù)是否運(yùn)行:

$ ?docker service ps devtest-service

ID????????????????? NAME??????????????? IMAGE?????????????? NODE??????????????? DESIRED STATE?????? CURRENT STATE??????????? ERROR?????????????? PORTS

4d7oz1j85wwn??????? devtest-service.1?? nginx:latest??????? moby??????????????? Running???????????? Running 14 seconds ago??

刪除服務(wù)

$ ?docker service rm devtest-service

服務(wù)標(biāo)識的不同

  docker service create  命令不支持-v或者—volume。必須使用—mount。

使用容器加載一個volume

和上面一樣,如果你啟動一個容器創(chuàng)建一個新的volume,在容器被掛載的目錄(/app/)中有文件或者文件夾,這個目錄中的內(nèi)容會被拷貝到volume中。然后容器掛載使用volume,其他容器使用這個volume也可以訪問預(yù)加載內(nèi)容。

為了說明這個,這個例子啟動一個nginx容器并且加載一個新volume nginx-vol,里面包括容器中 /usr/share/nginx/html  目錄中的內(nèi)容,里面存儲的是nginx默認(rèn)的HTML內(nèi)容。

—mount and -v具有相同結(jié)果

—mount:

$ ?docker run ?-d? ?\
?--name?=?nginxtest ?\
?--mount? ?source?=?nginx-vol,destination?=?/usr/share/nginx/html ?\
? nginx:latest

-v

$ ?docker run ?-d? ?\
?--name?=?nginxtest ?\
?-v? nginx-vol:/usr/share/nginx/html ?\
? nginx:latest

以下是運(yùn)行后清理命令

$ ?docker container stop nginxtest
$ ?docker container rm nginxtest
$ ?docker volume rm nginx-vol

使用只讀volume

對于一些開發(fā)應(yīng)用,容器需要回寫數(shù)據(jù)到Docker主機(jī)。但有時容器只需要讀數(shù)據(jù)。請記住多個容器可以掛載相同volume,一個掛載讀寫容器,也可以掛載只讀容器,還可以兩種同時掛載。

這個例子修改上面的例子,但是掛載的是只讀容器,使用’or’分隔符處理選項列表,

—mount and -v具有相同結(jié)果

—mount

$ ?docker run ?-d? ?\
?--name?=?nginxtest ?\
?--mount? ?source?=?nginx-vol,destination?=?/usr/share/nginx/html,readonly ?\
? nginx:latest

-v

$ ?docker run ?-d? ?\
?--name?=?nginxtest ?\
?-v? nginx-vol:/usr/share/nginx/html:ro ?\
? nginx:latest

使用  docker inspect nginxtest 命令查看是否掛載正確,查看Mounts部分

"Mounts"?:? ?[
?{
?"Type"?:? ?"volume"?,
?"Name"?:? ?"nginx-vol"?,
?"Source"?:? ?"/var/lib/docker/volumes/nginx-vol/_data"?,
?"Destination"?:? ?"/usr/share/nginx/html"?,
?"Driver"?:? ?"local"?,
?"Mode"?:? ?""?,
?"RW"?:? ?false?,
?"Propagation"?:? ?""
?}
],

清理命令

$ ?docker container stop nginxtest
$ ?docker container rm nginxtest
$ ?docker volume rm nginx-vol

機(jī)器間共享數(shù)據(jù)

當(dāng)構(gòu)建高可用應(yīng)用程序,你需要配置多個相同的服務(wù)訪問相同文件。

有幾種方法可以達(dá)到這種效果。一種是在你的應(yīng)用中添加對云存儲文件的訪問,如 Amazon S3。另一種是使用支持外服存儲驅(qū)動(NFS,  Amazon S3 )的volume。

Volume驅(qū)動允許你在應(yīng)用中抽象下層的存儲系統(tǒng)。例如,如果你的服務(wù)使用NFS驅(qū)動volume,你可以使用不同的驅(qū)動更新服務(wù),就像存儲在云中的數(shù)據(jù),不需要修改應(yīng)用邏輯。

使用volume驅(qū)動

當(dāng)你使用docker volume create創(chuàng)建一個volume,或者當(dāng)你啟動一個帶有沒創(chuàng)建volume的容器,你可以指定volume驅(qū)動。下面例子使用 vieux/sshfs volume驅(qū)動 ,首先創(chuàng)建一個獨(dú)立的volume,然后啟動一個創(chuàng)建新volume的容器。

初始化設(shè)置

這個例子假設(shè)你有兩個節(jié)點(diǎn),第一個是Docker主機(jī)而且可以連接到第二個的ssh.

在Docker主機(jī)中安裝vieux/sshfs插件:

$ ?docker plugin install ?--grant-all-permissions? vieux/sshfs

使用volume驅(qū)動創(chuàng)建volume

這個樣例指定一個SSH密碼,但是如果兩個主機(jī)共享keys配置,你可以省略密碼。每個volume驅(qū)動可以沒有或者更多配置選項,可以使用-o標(biāo)識。

$ ?docker volume create ?--driver? vieux/sshfs ?\
?-o? ?sshcmd?=?test?@node2:/home/test ?\
?-o? ?password?=?testpassword ?\
? sshvolume

test @node2:/home/test 為遠(yuǎn)程主機(jī)掛載點(diǎn)

啟動一個帶有使用volume驅(qū)動創(chuàng)建volume的容器

這個樣例指定一個SSH密碼,但是如果兩個主機(jī)共享keys配置,你可以省略密碼。每個volume驅(qū)動可以沒有或者更多配置選項。如果volume驅(qū)動要穿可選參數(shù),你必須使用—mount。

$ ?docker run ?-d? ?\
?--name? sshfs-container ?\
?--volume-driver? vieux/sshfs ?\
?--mount? ?src?=?sshvolume,target?=?/app,volume-opt?=?sshcmd?=?test?@node2:/home/test,volume-opt?=?password?=?testpassword ?\
? nginx:latest

參考: https://docs.docker.com/storage/volumes/

總結(jié)

到此這篇關(guān)于Docker容器中數(shù)據(jù)卷volumes使用的文章就介紹到這了,更多相關(guān)Docker volumes使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker和宿主機(jī)之間如何共享文件

    Docker和宿主機(jī)之間如何共享文件

    這篇文章主要介紹了Docker和宿主機(jī)之間如何共享文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker部署及使用壓測神器sysbench的方法

    Docker部署及使用壓測神器sysbench的方法

    sysbench 是一個開源跨平臺的多線程性能測試工具,這篇文章主要介紹了Docker部署及使用壓測神器sysbench的相關(guān)知識,需要的朋友可以參考下
    2022-08-08
  • Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫的方法

    Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫的方法

    這篇文章主要介紹了Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 淺談docker運(yùn)行nginx為什么要使用daemon off

    淺談docker運(yùn)行nginx為什么要使用daemon off

    這篇文章主要介紹了淺談docker運(yùn)行nginx為什么要使用daemon off,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 聊聊Docker不適合跑?MySQL?的N個原因

    聊聊Docker不適合跑?MySQL?的N個原因

    容器是為了解決“在切換運(yùn)行環(huán)境時,如何保證軟件能夠正常運(yùn)行”這一問題,這篇文章主要介紹了Docker?為什么不適合跑?MySQL?有N個原因,需要的朋友可以參考下
    2022-12-12
  • 本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1)

    本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1)

    這篇文章主要介紹了本地Docker安裝Postgres 12 + pgadmin的方法 (支持Apple M1),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 解決docker容器啟動后馬上退出的問題

    解決docker容器啟動后馬上退出的問題

    這篇文章主要介紹了解決docker容器啟動后馬上退出的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • docker編譯IJKPlayer播放器記錄詳解

    docker編譯IJKPlayer播放器記錄詳解

    這篇文章主要為大家介紹了docker編譯IJKPlayer播放器記錄詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Navicat 連接服務(wù)器端中的docker數(shù)據(jù)庫的方法

    Navicat 連接服務(wù)器端中的docker數(shù)據(jù)庫的方法

    這篇文章主要介紹了Navicat 連接服務(wù)器端中的docker數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • docker?部署?gitlab-ce?16.9.1的詳細(xì)過程

    docker?部署?gitlab-ce?16.9.1的詳細(xì)過程

    Docker是一個開源的應(yīng)用容器引擎,它允許開發(fā)者將應(yīng)用及其依賴打包到一個可移植的容器中,然后發(fā)布到任何支持Docker的Linux或Windows操作系統(tǒng)上,這篇文章主要介紹了docker?部署gitlab-ce?16.9.1的詳細(xì)過程,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-04-04

最新評論