【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘

 博客首页:派 大 星

⛳️  欢迎关注  ❤️ 点赞   收藏  ✏️ 留言

 本文由派大星原创编撰

 系列专栏:Docker—云原生

 本系列记录容器化技术的初次探险与深入思考历程,如有描述有误的地方还望诸佬不吝赐教


【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘_第1张图片


实战探究Docker数据卷的奥秘

        • 前言:什么是数据卷
        • 小试牛刀之创建数据卷
        • 查看数据卷
        • 启动挂载数据卷的容器
          • ① 挂载普通目录作为数据卷
          • ②挂载主机目录作为数据卷
          • ③挂载本地主机文件作为数据卷
        • 数据卷容器
        • E n d i n g Ending Ending

前言:什么是数据卷

数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过UFS可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新不会影响镜像
  • 卷会一直存在直到没有容器使用

小试牛刀之创建数据卷

使用docker volume create [数据卷名称]命令来创建一个数据卷

[root@VM-4-14-centos /]# docker volume create my-vol
my-vol

在这里插入图片描述

查看数据卷

创建完成之后就需要查看创建的数据卷是否存在

[root@VM-4-14-centos /]# docker volume ls
DRIVER    VOLUME NAME
local     my-vol

在这里插入图片描述

除此之外也可以通过命令来查看数据卷的详细信息

 docker volume inspect [数据卷名称]

【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘_第2张图片

启动挂载数据卷的容器

① 挂载普通目录作为数据卷

首先在使用docker run启动挂载数据卷的容器之前,需要了解一些命令基础:

  • -v:标记来创建一个数据卷并挂载到容器里
  • --mount :标记来将 数据卷 挂载到容器里

由上述两条命令的作用是一样的,都是将数据卷挂载到容器里,但是在书写时的格式却差别略大,而且在使用docker run启动中一次可以挂载多个数据卷

-v

docker run -d -P --name web -v /webapp training/webapp python app.py

【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘_第3张图片

--mount

$ docker run -d -P \
    --name web \
    --mount source=my-vol,target=/usr/share/nginx/html \
    nginx:alpine

使用--mount需要指定source也就是数据卷的名称和挂载到的目标位置

②挂载主机目录作为数据卷

依然是使用-v指定一个本地主机目录到容器中

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

在这里插入图片描述
上述的命令加载主机的/src/webapp目录到容器的/opt/webapp目录下,这个功能在进行测试的时候十分方便,比如用户放置一些程序到本地目录,来查看容器是否正常工作。

注: 本地目录的路径必须是绝对路径,如果目录不存在Docker会自动为你创建,并且Docker挂载数据卷的默认权限是读写,用户也可以通过:ro指定为只读

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

在这里插入图片描述

③挂载本地主机文件作为数据卷

同样使用-v命令从主机挂载单个文件到容器中

docker run --rm -it -v ~/.bash_history:/bash_history ubuntu /bin/bash

【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘_第4张图片

数据卷容器

如果有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器

数据卷容器其实就是一个正常的容器,专门用来提供数据卷供其他容器挂载

首先创建一个命名的数据卷容器 pdx

docker run -d -v /pdx --name pdx training/postgres echo Data-only container for postgres

【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘_第5张图片

还可以在其他容器中使用--volumes-from参数来从多个容器挂载多个数据卷,也可以从其他已经挂载的数据卷的容器来挂数据卷

docker run -d volumes-from pdx --name p1 training/postgres
docker run -d volumes-from pdx --name p2 training/postgres

注意: 使用--volumes-from参数所挂载数据卷的容器自己并不需要保持在运行状态

如果删除了挂载的容器(包括pdx、p1和p2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定同时删除关联的容器。

E n d i n g Ending Ending

你可能感兴趣的:(云原生,docker,云原生,容器)