当前位置: 首页 >> 新闻世界 >> 儋州,akg,长征-卡通池-孩童的天空,有趣的视角-给你带来不同的新闻 >> 正文

儋州,akg,长征-卡通池-孩童的天空,有趣的视角-给你带来不同的新闻

2019年05月21日 08:39:34     作者:admin     分类:新闻世界     阅读次数:210    

介绍

Docker是一种盛行的容器化东西,用于向软件应用程序供给包括运转所需的一切内容的文件体系。运用Docker容器保证软件将以相同的办法运转,而不论其布置在哪里,由于它的运转时环境无残暴地共同。 一般来说,Docker容器是时间短的,只需在容器中宣布的指令完结果运转。可是,有时,应用程序需求在容器被删去后同享对数据的拜访或耐久化数据。数据库,网站的用户生成的内容和日志文件仅仅一些数据的示例,这些数据在Docker镜像中是不切实际或不或许包括的,可是哪些应用程序需求拜访。 Docker卷供给对数据的耐久拜访。

先决条件

要跟从这篇文章,你将需求一个Ubuntu 16.04服务器,具有以下:

  • 具有sudo权限的非root用户。在运用Ubuntu 16.04初始服务器设置攻略介绍怎么设置起来。
  • 第1步第2步中的阐明进行装置Docker怎么在Ubuntu 16.04装置和运用Docker

注:即便先决条件给出了在Ubuntu 16.04装置Docker指令, docker本文中Docker数据量的指令应该在其它操作体系上,只需Docker已装置并运转sudo用户已被增加到docker组。 Docker卷能够在创立容器的同一指令中创立和附加,也能够独立于任何容器创立,然后再衔接。在本文中,咱们将介绍在容器之间同享数据的四种不同办法。

1 - 创立独立卷

在Docker的1.9版别中引进的docker volume create指令,能够没有它与任何特定的容器创立卷。 咱们将运用这个指令来增加一个名为量DataVolume1 :

docker volume create --name DataVolume1

将显现称号,表示指令成功。

Output
DataVolume1

为了运用量,咱们将创立一个从Ubuntu的镜像新的容器,运用--rm标志,当咱们退出时主动删去。 咱们将运用-v装置新卷。 -v需求大卷,一个冒号,然后是绝对途径地点的卷应出现在容器内的称号。 假如途径中的目录不作为映像的一部分存在,那么将在指令运转时创立它们。 假如他们存在,装置的卷将躲藏现有内容。

docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu

当咱们在那里,咱们将写一些数据到卷:

echo "Example1" > /datavolume1/Example1.txt

由于咱们运用了--rm标志,咱们的容器时,将主动退出咱们删去。可是,咱们的卷依然能够拜访。

exit

咱们能够验证卷存在与体系上docker volume inspect :

docker volume inspect DataVolume1
Output
[
{
"Name": "DataVolume1",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/datavolume1/_data",
"Labels": null,
"Scope": "local"
}
]

留意:咱们乃至能够看一下数据在主机上列为装置点的途径。可是,咱们应该避免更改它,由于它或许导致数据损坏,假如应用程序或容器不知道更改。 接下来,让咱们开端一个新的容器,并附加DataVolume1 :

docker run --rm -ti -v DataVolume1:/datavolume1 ubuntu
cat /datavolume1/Example1.txt
Output
Example1

让咱们退出容器。

exit

在此示例中,咱们创立了一个卷,将其附加到容器,并验证其耐久性。

2 - 创立在容器删去时继续存在的卷

鄙人一个示例中,咱们将创立一个与容器一起的卷,删去容器,然后将卷附加到一个新容器。 咱们将运用docker run指令创立运用基地的新容器ubuntu形象。 -t会给咱们一个终端, -i将使咱们能够与它进行交互。 为了清楚起见,咱们将运用--name辨认容器。 接下来,咱们将增加-v标志创立 咱们将运用-v来创立新卷。 咱们将其命名为DataVolume2 。 咱们将运用冒号将此称号与卷应该在容器中加载的途径分隔。 最终,咱们将指定基Ubuntu的形象,并依靠在默许的指令Ubuntu的根本图画的Docker文件 , bash ,咱们放到一个外壳。

docker run -ti --name=Container2 -v DataVolume2:/datavolume2 ubuntu

注: -v标志是十分灵敏的。 它能够绑定或命名一个卷,只需略微调整语法。 假如第一个参数一个开端/或~/你要创立一个绑定装入。删去它,而且命名卷。例如:

  • -v /path:/path/in/container装入主机目录, /path在/path/in/container
  • -v path:/path/in/container创立一个名为量path与主机没有任何关系。

欲了解更多关于从主机bindmounting的目录,请参阅怎么Docker容器和主机之间的数据同享 当咱们在那里,咱们将写一些数据到卷:

echo "Example2" > /datavolume2/Example2.txt
cat /datavolume2/Example2.txt
Output
Example2

咱们将退出容器:

exit

当咱们重新发动它,卷将主动装置。

docker start -ai Container2

让咱们验证该卷是否已装置,而且咱们的数据依然存在:

cat /datavolume2/Example2.txt
Output
Example2

最终,让咱们退出并整理。

exit

Docker不会让咱们删去一个容器引证的卷。让咱们看看当咱们测验时会发作什么:

docker volume rm DataVolume2

该音讯通知咱们,卷仍在运用,并供给容器ID的长版别:

Output
Error response from daemon: Unable to remove volume,
volume still in use: remove DataVolume2: volume is in use -
[719f98391ecf1d6f0f053ffea1bbd84cd2dc9cf6d31d5a4f348c60d98392804c]

咱们能够运用ID来删去容器:

docker rm 719f98391ecf1d6f0f053ffea1bbd84cd2dc9cf6d31d5a4f348c60d98392804c
Output
719f98391ecf1d6f0f053ffea1bbd84cd2dc9cf6d31d5a4f348c60d98392804c

删去容器不会影响卷。咱们能够看到,它依然存在于体系中经过列出与卷docker volume ls :

docker volume ls
Output
DRIVER VOLUME NAME
local DataVolume2

而且咱们能够运用docker volume rm将其删去。

docker volume rm DataVolume2

在此示例中,咱们在创立容器的一起创立了一个空数据卷。鄙人一个示例中,咱们将讨论在运用现已包括数据的容器目录创立卷时会发作什么。

3 - 运用数据从现有目录创立卷

一般地,用独立创立卷docker volume create和制造一个在创立一个容器是等效的,但有一个破例。 假如咱们创立一起一个卷作为咱们创立一个容器咱们供给的途径包括该根本图画中的数据,该数据将被复制到该卷的目录。 作为一个比如,咱们将创立一个容器,并在其间增加数据量/var ,其间包括根本的图画数据的目录:

docker run -ti --rm -v DataVolume3:/var ubuntu

将来自根本映像的/ var目录的一切内容复制到卷中,咱们能够将该卷挂载到新容器中。这一次,而不是依赖于根底映像的默许bash指令,咱们会宣布咱们自己的ls指令,该指令将显现卷的内容,而无需输入外壳:

docker run --rm -v DataVolume3:/datavolume3 ubuntu ls DataVolume3

DataVolume3具有的根本映像的内容复制/var目录:

Output
backups
cache
lib
local
lock
log
mail
opt
run
spool
tmp

这是不或许的,咱们即将装置/var/这样,但假如咱们制造咱们自己的形象,并期望有一个简略的办法来保存数据,这会很有协助。鄙人一个示例中,咱们将演示怎么在多个容器之间同享卷。

4 - 在多个Docker容器之间同享数据

到目前为止,咱们一次将一个卷附加到一个容器。可是常常,咱们需求多个容器附加到同一个数据卷。这是相对直接的完结,但有一个要害的正告:这时,Docker不处理文件确定。假如需求多个容器写入到卷,这些容器运转的应用程序的规划有必要写入同享数据存储,以避免数据损坏。

创立Container4和DataVolume4

运用docker run到创立一个名为新的容器Container4附有数据卷。

docker run -ti --name=Container4 -v DataVolume4:/datavolume4 ubuntu 

接下来,咱们将创立一个文件并增加一些文本:

echo "This file is shared between containers" > /datavolume4/Example4.txt

然后,咱们将退出容器。

exit

这将返回到主机指令提示符,在那里咱们将创立一个新的容器,从Container4挂载数据卷

从Container4创立Container5和装载卷

咱们将创立Container5,并从Container4挂载卷:

docker run -ti --name=Container5 --volumes-from Container4 ubuntu
cat /datavolume4/Example4.txt
Output
This file is shared between containers

现在让咱们从第二个容器中增加一些文本:

echo "Both containers can write to DataVolume4" >> /datavolume4/Example4.txt

最终,咱们将退出容器:

exit

接下来,咱们将查看咱们的数据是否依然存在Container4。

查看Container5中所做的更改

让咱们经过重新发动Container4来查看由Container5写入数据卷的更改:

docker start -ai Container4
cat /datavolume4/Example4.txt
cat /DataVolume4/Example4.txt
Output
This file is shared between containers
Both containers can write to DataVolume4

现在咱们现已验证了这两个容器都能够从数据卷读取和写入,咱们将退出该容器:

exit

再次,Docker不处理任何文件确定,因而应用程序有必要考虑文件确定自己。 它能够装入一个容积Docker为只读,以保证数据损坏当容器需求经过增加只读拜访不会发作意外:ro 。让咱们看看这是怎么作业的。

发动容器6并将卷挂载为只读

一旦一个卷被装置在一个容器中,而不是象咱们在典型的Linux文件体系那样卸载它,咱们改为创立一个新的容器,假如需求的话,删去曾经的容器。为了使卷只读,咱们追加:ro到容器称号的结束:

docker run -ti --name=Container6 --volumes-from Container4:ro ubuntu

咱们将经过测验删去示例文件来查看只读状况:

rm /datavolume4/Example4.txt
Output
rm: cannot remove '/datavolume4/Example4.txt': Read-only file system

最终,咱们将退出容器并整理咱们的测验容器和卷:

exit

现在咱们完结了,让咱们整理咱们的容器和卷:

docker rm Container4 Container5 Container6
docker volume rm DataVolume4

在本例中,咱们现已展现了怎么运用数据卷在两个容器之间同享数据,以及怎么以只读办法挂载数据卷。

定论

在本教程中,咱们创立了一个数据卷,答应经过删去容器来保存数据。咱们现已在容器之间同享了数据卷,需求留意的是,应用程序需求规划为处理文件确定以避免数据损坏。最终,咱们展现了怎么以只读形式挂载同享卷。假如你有爱好了解容器和主机体系之间同享数据,请参阅怎么将Docker容器和主机之间的数据同享 。

除非特别注明,本文『儋州,akg,长征-卡通池-孩童的天空,有趣的视角-给你带来不同的新闻』来源于互联网、微信平台、QQ空间以及其它朋友推荐等,非本站作者原创。 本站作者admin不对本文拥有版权,如有侵犯,请投诉。我们会在72小时内删除。 但烦请转载时请标明出处:“本文转载于『卡通池-孩童的天空,有趣的视角-给你带来不同的新闻』,原文地址:http://www.katokoichi.com/articles/2315.html