Docker image
是一系列的read-only layer
。当启动container
以后,在read-only layer
之上会增加一个read-write layer
。当需要对文件进行修改时,就要把数据从read-only layer
拷贝到read-write layer
。因此,image
的数据不会被破坏,container
相当于操作的是image
数据的副本。这种read-only layer
和read-write layer
的结合称之为Union File System
。
因此,为使对数据的修改能够保存下来,docker
引入了volume
概念:volume
即是位于主机文件系统上,而不是Union File System
上的目录和文件。
(1)
$ docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash
root@CONTAINER:/# ls /data
root@CONTAINER:/#
container-test
中的/data
目录位于主机的位置:
$ docker inspect -f {{.Volumes}} container-test
map[/data:/var/lib/docker/vfs/dir/cde167197ccc3e138a14f1a4f7c0d65b32cecbada822b0db4cc92e79059437a9]
(2)
$ docker run -v /home/adrian/data:/data debian ls /data
这种方式直接把主机上的目录映射到container
中的一个目录。