Docker Data Management
Docker Data Management
Docker容器数据管理概览:
- 绑定挂载文件(Bind Mount) – 指定容器外的路径和容器内的路径形成挂载映射关系,在容器内外可对文件的读写
- 卷(Volume) – 从宿主操作系统中挂载目录到容器内,挂载的目录由Docker进行管理
- 临时文件挂载(Tmpfs Mount) – 内容会随着容器的停止而消失
其中卷(Volume)和绑定挂载文件(Bind Mount)是持久化的,临时文件挂载(Tmpfs Mount)是非持久化的;
默认情况下,在容器内创建的所有文件都存储在容器读写层
上,这意味着:
- 当该容器A不再存在时,其数据将不会持久保存,另一个容器B无法使用容器A的数据;
- 容器的读写层与运行容器的主机紧密耦合,不能轻易地将数据移动到其他地方;
存储驱动程序使用Linux内核提供联合文件系统( Union Filesystem);
与使用直接写入主机文件系统的数据卷相比,这种额外的抽象降低了性能;
Docker提供了两个选项:卷(Volume)和绑定挂载文件(Bind Mounts),来将文件存储在主机中,以便容器停止后文件也可以持久存储;
1. Bind Mount
绑定挂载文件(Bind Mount)可以存储在主机系统上的任何位置,甚至可能是重要的系统文件或目录;
Docker主机或Docker容器上的非Docker进程可以随时对其进行修改;
最初
-vor
,--volume
标志用于独立容器,而--mount
标志用于集群服务;
但是,从Docker 17.06开始,可以使用--mount
独立容器;--mount
是更明确和冗长的,最大的区别是该-v
语法将所有选项合并在一个字段中,而--mount
语法将它们分开;
1.1 命令
使用-v
或--volume
命令,以冒号(:)分隔,这些字段必须以正确的顺序排列;
- 第一个字段是主机上文件或目录的路径。
- 第二个字段是文件或目录在容器中的安装路径。
- 第三个字段是可选的,并且是用逗号分隔的选项,诸如列表ro,consistent,delegated,cached,z,和Z。
--mount
:由多个键值对组成,这些键值对之间用逗号分隔,每个键值对都由一个<key>=<value>
元组组成;type
:可以是bind
,volume
或tmpfs
,本段此类型始终为bind
;source
:这是Docker守护程序主机上文件或目录的路径;destination|dst|target
:可以指定为source
或src
的destination
作为其值,其中的文件或目录被安装在容器的路径;readonly
:会使绑定安装以只读方式安装到容器中;bind-propagation
:将更改绑定传播,可以是rprivate
,private
,rshared
,shared
,rslave
,slave
;consistency
:如果存在,可以是一种consistent
,delegated
或cached
,此设置仅适用于Mac的Docker桌面,其他平台上将被忽略;
1.2 使用
创建一个index.html
,将其路径挂在到nginx容器中,运行容器,访问index:
- 创建本地路径
/Users/admin/localData
和index.html
,查看index.html
中内容为:Hello Weison - 运行容器
bind-mount-nginx
,暴露端口10086
映射其80
端口,将容器/usr/share/nginx/html
路径挂载至宿主机/Users/admin/localData
- 到容器
bind-mount-nginx
内,打开/usr/share/nginx/html
,查看index.html
,其内容与宿主机index.html
内容一致 - 在宿主机浏览器中访问:
localhost:10086
查看index.html
执行docker inspect bind-mount-nginx
可以看到有关容器数据挂载相关的信息:
启动容器时,在挂载选项
-v
后再接上:ro
可声明为只读挂载
1.3 使用场景
在保证安全性的前提下,有几种常见场景非常适合使用这种挂载方式:
- 当我们需要从宿主操作系统共享配置的时候,某些配置项,我们可以直接从容器外部挂载到容器中,这利于保证容器中的配置为我们所确认的值,也方便我们对配置进行监控。
- 当我们需要借助Docker进行开发的时候,如果我们直接把代码挂载进入容器,那么我们每次对代码的修改都可以直接在容器外部进行。
2. Tmpfs Mount
tmpfs挂载仅存储在主机系统的内存中,且永远不会写入主机系统的文件系统中,特征就是临时性挂载,只能在Linux上使用;
与挂载宿主操作系统目录或文件不同,挂载临时文件目录要通过 --tmpfs 这个选项来完成。由于内存的具体位置不需要我们来指定,这个选项里我们只需要传递挂载到容器内的目录即可。
1.1 命令
–tmpfs:挂载tmpfs挂载而不允许您指定任何可配置的选项,并且只能与独立容器一起使用;
tmpfs-size
:tmpfs安装的大小(以字节为单位),默认情况下不受限制;tmpfs-mode
:tmpfs的文件模式(八进制),例如700或0770。默认为1777或可全局写入;
–mount:独立容器和群集服务都可使用,语法比–tmpfs更详细
type
:可以是bind
,volume
或tmpfs
,本段此类型始终为tmpfs
;destination|dst|target
:指定路径被安装在容器中;
1.2 使用
执行命令:
#--mount
docker run -d -it --name tmpfs-mount-nginx --mount type=tmpfs,destination=/app nginx
#--tmpfs
docker run -d -it --name tmpfs-tmpfs-nginx --tmpfs /app nginx
1.3 使用场景
以下场景非常适合使用这种挂载方式:
- 应用中使用到,但不需要进行持久保存的敏感数据,可以借助内存的非持久性和程序隔离性进行一定的安全保障;
- 读写速度要求较高,数据变化量大,但不需要持久保存的数据,可以借助内存的高读写速度减少操作的时间;
3. Volume
卷(Volume):从宿主操作系统中挂载目录到容器内,这个挂载的目录由 Docker 进行管理(/var/lib/docker/volumes/在Linux上);
我们只需要指定容器内的目录,不需要关心具体挂载到了宿主操作系统中的哪里;
非Docker进程不应修改文件系统的这一部分,所以卷是在Docker中持久保存数据的最佳方法;
卷通常是更好的选择,因为卷不会增加使用卷的容器的大小,并且卷的内容存在于给定容器的生命周期之外
与绑定安装相比,卷具有几个优点:
与绑定安装相比,卷更易于备份或迁移。
您可以使用Docker CLI命令或Docker API管理卷。
卷在Linux和Windows容器上均可工作。
可以在多个容器之间更安全地共享卷。
卷驱动程序使您可以将卷存储在远程主机或云提供程序上,以加密卷内容或添加其他功能。
可以通过容器预先填充新卷的内容。
1.3 命令
使用-v
或--volume
命令,以冒号(:)分隔,这些字段必须以正确的顺序排列;
- 第一个字段是主机上文件或目录的路径。
- 第二个字段是文件或目录在容器中的安装路径。
- 第三个字段是可选的,并且是用逗号分隔的选项,诸如列表ro,consistent,delegated,cached,z,和Z。
--mount
:由多个键值对组成,这些键值对之间用逗号分隔,每个键值对都由一个<key>=<value>
元组组成;type
:可以是bind
,volume
或tmpfs
,本段此类型始终为volume
;source
:这是Docker守护程序主机上文件或目录的路径;destination|dst|target
:可以指定为source
或src
的destination
作为其值,其中的文件或目录被安装在容器的路径;readonly
:会使绑定安装以只读方式安装到容器中;bind-propagation
:将更改绑定传播,可以是rprivate
,private
,rshared
,shared
,rslave
,slave
;consistency
:如果存在,可以是一种consistent
,delegated
或cached
,此设置仅适用于Mac的Docker桌面,其他平台上将被忽略;
1.3 使用
1.3.1 创建卷
使用docker volume create
命令显式创建卷,或者在容器或服务创建期间创建卷,可以命名为或匿名:
使用docker volume rm删除卷,可以使用删除未使用的卷docker volume prune:
1.3.2 使用数据卷
已两种方式使用数据卷:
#--mount
docker run -d --name volume-mount-nginx --mount source=local-volume,target=/app nginx
#-v
docker run -d --name volume-v-nginx -v local-volume:/app nginx
#查看容器卷信息
docker inspect volume-mount-nginx
https://docs.docker.com/storage/volumes/
参考:
[ 1 ]. https://docs.docker.com/storage/
[ 2 ]. https://juejin.im/book/5b7ba116e51d4556f30b476c
推荐阅读
-
hdu 1064 Financial Management
-
B - Financial Management
-
Docker Data Management
-
Financial Management
-
Flex可携带数据的Aler组件(DataCarriableAlert) 博客分类: Flex/BlazeDS alertflex数据data自定义
-
删除mysql/data中的bin文件 博客分类: mysql mysqlbinlocalblog
-
CentOS 7 上安装使用 Docker 博客分类: linux
-
CentOS 7 上安装使用 Docker 博客分类: linux
-
(20210316已解决)docker-compose创建postgresql容器exited with code 1
-
Mesos概念 云计算集群Docker