Docker容器卷

数据卷可以将主机上的目录/文件映射到容器内,并具有以下一些特性:

  • 数据卷可以在容器之间共享,方便容器之间共享数据
  • 主机/容器内的操作文件,可以立即在容器/主机上看到相应的变化
  • 数据卷与容器相互独立,解耦

创建数据卷

$ docker volume create -d local test

# 查看数据卷详细信息
$ docker volume inspect test
[
    {
        "CreatedAt": "2021-10-27T22:23:43+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": {},
        "Scope": "local"
    }
]

可以看到,test创建在主机的 /var/lib/docker/volumes/test/_data 目录

使用数据卷

# 创建容器时,docker create 和 docker run 都可以使用 -v 参数

# 使用具有名字的容器卷挂载到容器中
$ docker run -it --name ubuntu-1 -v test:/test ubuntu:18.04

# 使用指定目录挂载到容器中
$ docker run -it --name ubuntu-1 -v /test:/test ubuntu:18.04

挂载的的数据卷,在容器中的默认权限是读写,可以通过 ro 指定为只读:

$ docker docker run -it --name ubuntu-1 -v test:/test:ro ubuntu:18.04

加了 ro 之后,容器内就无法修改容器卷的文件了

数据卷容器

如果需要在多个容器挂载共享多个数据卷,可以使用数据卷容器,数据卷容器的原理是这样的:

  1. 创建一个容器,用作数据卷容器,名为 data-container
  2. 将多个数据卷挂载到 data-container 上
  3. 创建业务容器 container-1,使用作数据卷容器 data-container 挂载的数据卷
  4. 创建业务容器 container-2,使用作数据卷容器 data-container 挂载的数据卷
  5. ...

这样,相当于多个业务容器的数据卷配置,都来自于数据卷容器 data-container,仅需要配置一处

# 创建数据卷容器
$ docker create -v folder1:/folder1 -v folder2:/folder2 --name data-container ubuntu:18.04

# 创建业务容器1,使用数据卷容器
$ docker run -it --name container-1 --volumes-from data-container ubuntu:18.04

# 创建业务容器2,使用数据卷容器
$ docker run -it --name container-2 --volumes-from data-container ubuntu:18.04

使用数据卷容器,不需要数据卷容器在启动状态

上一篇:多态在实际开发中的作用


下一篇:Docker学习06 - 搭建私有仓库