Docker 2.数据卷与网络

74 阅读3分钟

数据卷

容器中的管理数据主要有两种方式:数据卷(容器内数据直接映射到本地主机环境)、数据卷容器(使用特定容器维护数据卷)。

创建和管理数据卷

数据卷是一个可供容器使用的特殊目录,他讲主机目录直接映射进容器。可以提供很多有用的特性:

  1. 数据卷可以在容器之间共享和重用,容器间传递数据将变得高校和方便。
  2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作。
  3. 对数据卷的更新不会影响镜像,解耦应用和数据。
  4. 卷会一直存在,直到没有容器使用,可以安全的卸载它。

创建的卷存在:/lib/docker/volumes/

默认情况下,docker创建新卷时采用内置的local驱动,本地卷只能被所在节点容器使用。使用 -d 可以指定不同的驱动。

第三方驱动插件:块存储、文件存储(NFS)、对象存储(Minio、Ceph)。

docker volume create VOLUME_NAME # 等同于 docker volume create -d local VOLUME_NAME

卷已经创建成功,可以通过下面的命令查看

docker volume ls
docker volume inspect VOLUME_NAME

有两种方式删除volume,两种删除命令都不能删除正在被容器或者服务使用的卷。

docker volume prune # 删除未装入到某个容器或者服务的所有卷
docker volume rm VOLUME_NAME # 删除指定名称的卷

绑定数据卷,--mount支持三种类型的数据卷:

  • volume:普通数据卷,映射到主机/var/lib/docker/volume
  • bind:绑定数据卷,映射到指定路径下
  • tmpfs:临时数据卷,只存在于内存中
docker run --mount type=volume,source=VOLUME_NAME,target=/path/in/container NAME:TAG
docker run --mount type=bind,source=/host/path,target=/container/path NAME:TAG
docker run --mount type=tmpfs,target=/container/path NAME:TAG

# 也可以使用 -v 代替 bind
docker run -v /host/path:/container/path NAME:TAG
# 在容器目录后加 :ro ,容器挂在的数据为只读
docker run -v /host/path:/container/path:ro NAME:TAG

数据卷容器

用户在多个容器之间共享一些持续更新的数据,最简单的方式使用数据卷容器,它的目的是专门提供数据卷给其他容器使用。

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

  1. 创建一个数据卷容器,并创建一个数据卷挂在到容器内的**/data**目录

    docker run --name data -v /data -it ubuntu
    
  2. 在创建其他容器使用**--volumes-from挂载data容器**中的数据卷

    docker run -it --volumes-from data --name db1 ubuntu
    docker run -it --volumes-from data --name db2 ubuntu
    
  3. data容器的data目录下创建一个文件

    cd /data
    touch a.txt
    
  4. 另外两个容器查看

    ls /data
    

**使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。**如果删除了挂载容器(db1,db2),数据卷不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。

利用数据卷容器迁移数据

  1. 备份

    docker run --volumes-from data -v /host/path:/backup --name worker ubuntu tar cvf /backup/backup.tar.gz /data
    
    # --volumes-from data: worker容器挂载data的容器卷
    
    # -v /host/path:/backup: 主机的/host/path目录挂载到容器内的/backup目录
    
    # tar cvf /backup/backup.tar /data: 将data容器的/data目录压缩到容器worker容器的/backup目录,名为backup.tar.gz,在主机/host/path也可以看到
    
  2. 恢复

    docker run -v /data --name data2 ubuntu /bin/bash # 先创建一个带有数据卷的容器
    docker run --volumes-from data2 -v /host/path:/backup busybox tar xvf /backup/backup.tar.gz # 创建容器时挂载data2
    

网络

只列举出了一些简单的命令。

查看网络

docker network ls

查看网络详细信息

docker network inspect NETWoRK_NAME

创建网络

docker network create -d bridge NETWORK_NAME

查看创建的网桥

yum install bridge-utils -y
brctl show