激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識(shí) - 淺談docker Dockerfile 指令 VOLUME 介紹

淺談docker Dockerfile 指令 VOLUME 介紹

2021-01-15 18:1751kata 服務(wù)器知識(shí)

本篇文章主要介紹了淺談docker Dockerfile 指令 VOLUME 介紹 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

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

2)當(dāng)我們?cè)陂_發(fā)一個(gè)web應(yīng)用時(shí),開發(fā)環(huán)境是在主機(jī)本地,但運(yùn)行測試環(huán)境是放在docker容器上。

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

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

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

下面我們來介紹具體的機(jī)制。

一、通過docker run命令

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

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

這樣在容器中對(duì)/data目錄下的操作,還是在主機(jī)上對(duì)/home/xqh/myimage的操作,都是完全實(shí)時(shí)同步的,因?yàn)檫@兩個(gè)目錄實(shí)際都是指向主機(jī)目錄。

2、運(yùn)行命令:docker run --name test1 -it -v /data ubuntu /bin/bash

上面-v的標(biāo)記只設(shè)置了容器的掛載點(diǎn),并沒有指定關(guān)聯(lián)的主機(jī)目錄。這時(shí)docker會(huì)自動(dòng)綁定主機(jī)上的一個(gè)目錄。通過docker inspect 命令可以查看到。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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下的每條信息記錄了容器上一個(gè)掛載點(diǎn)的信息,"Destination" 值是容器的掛載點(diǎn),"Source"值是對(duì)應(yīng)的主機(jī)目錄。

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

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

上面介紹的通過docker run命令的-v標(biāo)識(shí)創(chuàng)建的掛載點(diǎn)只能對(duì)創(chuàng)建的容器有效。

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

還有一個(gè)區(qū)別是,通過 VOLUME 指令創(chuàng)建的掛載點(diǎn),無法指定主機(jī)上對(duì)應(yīng)的目錄,是自動(dòng)生成的。

?
1
2
3
4
#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]

上面的dockfile文件通過VOLUME指令指定了兩個(gè)掛載點(diǎn) /data1 和 /data2.

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"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
  }
],

可以看到兩個(gè)掛載點(diǎn)的信息。

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

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

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

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

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

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

也可以是同一鏡像,如:

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

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

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

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

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

因?yàn)槿萜鞯木肀举|(zhì)上對(duì)應(yīng)主機(jī)上的目錄,所以這個(gè)數(shù)據(jù)容器也不需要啟動(dòng)。

如:

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

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/51kata/p/5266626.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产人成精品综合欧美成人 | h视频在线播放 | 成人精品视频在线 | 神马福利网 | 国产高潮好爽好大受不了了 | 亚洲性在线视频 | 91高清免费在线观看 | 久久久久久久黄色片 | 欧美日韩专区国产精品 | 国产精品久久久久久久久久了 | 性欧美大战久久久久久久免费观看 | 久久精品一二三区 | 中国一级无毛黄色 | 性aaa| 免费欧美一级视频 | 成人午夜精品久久久久久久蜜臀 | 日韩激情一区二区三区 | 免费国产一区二区视频 | 日韩精品中文字幕一区二区 | 成人毛片100免费观看 | 天天色图片 | 黑人日比| 欧美精品亚洲人成在线观看 | 欧美三级一级 | 正在播放91精 | 一区二区三区在线观看免费 | 国产乱淫a∨片免费观看 | 精品久久久久久久久久久下田 | 欧美精品第1页 | 92看片淫黄大片欧美看国产片 | 在线看免电影网站 | 日本中文字幕电影在线观看 | 一区二区三区在线播放视频 | 久久久婷婷 | 久久亚洲精品久久国产一区二区 | 欧美精品日日鲁夜夜添 | 国产自在自线午夜精品视频在 | 精品久久久久久久久久久下田 | 久久精品性视频 | 亚洲午夜一区二区三区 | 欧美一级特级 |