数据卷
容器中的管理数据主要有两种方式:数据卷(容器内数据直接映射到本地主机环境)、数据卷容器(使用特定容器维护数据卷)。
创建和管理数据卷
数据卷是一个可供容器使用的特殊目录,他讲主机目录直接映射进容器。可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高校和方便。
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作。
- 对数据卷的更新不会影响镜像,解耦应用和数据。
- 卷会一直存在,直到没有容器使用,可以安全的卸载它。
创建的卷存在:/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参数来从多个容器挂载多个数据卷,还可以从其他已经挂载了容器卷的容器来挂载数据卷。
-
创建一个数据卷容器,并创建一个数据卷挂在到容器内的**/data**目录
docker run --name data -v /data -it ubuntu -
在创建其他容器使用**--volumes-from挂载data容器**中的数据卷
docker run -it --volumes-from data --name db1 ubuntu docker run -it --volumes-from data --name db2 ubuntu -
在data容器的data目录下创建一个文件
cd /data touch a.txt -
另外两个容器查看
ls /data
**使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。**如果删除了挂载容器(db1,db2),数据卷不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。
利用数据卷容器迁移数据
-
备份
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也可以看到 -
恢复
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