首页 > 网站 > 建站经验 > 正文

Docker中容器数据卷(Data Volume)和数据管理详解

2019-11-02 16:03:46
字体:
来源:转载
供稿:网友

卷(Volume)

众所周知卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享。通过卷,我们可以可以使修改数据直接生效,而不必重新构建镜像。

一、数据卷

数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录。卷为提供为持久化或共享数据提供了一些有用的特性。

数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关。因此,在删除容器时,Docker不会自动删除卷,直到没有容器再引用。

1.1 添加数据卷

可以在docker createdocker create命令创建容器时,通过-v参数为容器添加数据卷。-v参数参数可以多次使用,以添加多个数据卷。

如,可以像下面这样为容器添加一个卷:

$ sudo docker run -t -i -v /home/test --name test itbilu/test /bin/bash

这样就会在容器内/webapp位置创建一个卷。

除了在创建容器时添加数据卷外,还可以通过Dockerfile文件中通过Volume指令添加,Volume可以多次使用以添加多个数据卷。

说明:本文中使用的示例镜像(itbilu/test)通过以下Dockerfile文件创建:

# Version: 0.0.3FROM ubuntu:16.04MAINTAINER 何民三 "cn.liuht@gmail.com"RUN apt-get updateRUN apt-get install -y nginxRUN echo 'Hello World, 我是个容器' /  > /var/www/html/index.htmlRUN mkdir /home/itbilu/ENV ITBILU_PATH /home/itbilu/VOLUME [$ITBILU_PATH]EXPOSE 80

1.2 卷位置

添加卷后,可以通过docker inspect来查看数据卷在容器中的位置:

$ sudo docker inspect test

docker inspect可以用来查看容器或镜像的详细配置信息。可以在容器的Mounts节点下,查看容器的卷信息:

..."Mounts": [{ "Type": "volume", "Name": "5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24", "Source": "/var/lib/docker/volumes/5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24/_data", "Destination": "/home/test", "Driver": "local", "Mode": "", "RW": true, "Propagation": ""},{ "Type": "volume", "Name": "e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773", "Source": "/var/lib/docker/volumes/e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773/_data", "Destination": "[/home/itbilu/]", "Driver": "local", "Mode": "", "RW": true, "Propagation": ""}],...

在以上示例中,有两个挂载卷,一个是在docker run创建容器时创建的,而另一个是在创建运行容器镜像的Dockerfile文件中通过VOLUME指令创建。其中,Source表示宿主机源文件位置,Destination表示数据卷在容器中的挂载位置,而RW表示卷是否可读/写。

1.3 挂载本地数据到容器数据卷

在前面示例中,我们运行容器时并没有指定要挂载到容器中数据卷的本地目录,所在Docker使用一个默认数据目录。 -v参数除了可以在容器中创建数据卷外,还可以将宿主机中的目录挂载到容器中的数据卷。

如,运行容器,并将本地的~/code/itbilu目录挂载到容器的/home/itbilu数据卷上:

$ sudo docker run -t -i -v ~/code/itbilu:/home/itbilu --name test itbilu/test /bin/bas
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表