1、在docker上拉取centos
docker pull centos
2、在docker上运行centos(使用交互式)
docker run -it centos /bin/bash
3、进入容器内后可使用:ls或者ls -l查看容器目录(ll不知到为啥会用不了),如图:
4、exit 退出容器,执行docker run -it -v /myDataVolume:/dataVolumeContainer centos 执行完后,如图:
发现在centos容器内存在了一个文件夹就是刚刚命令中执行的,退出容器后,在宿主机的更目录下也会发现存在一个相对应的文件夹,如图:
这样宿主机的目录和容器内的目录就形成了一个映射,达到数据共享的目的。
5、执行docker inspect 【容器id】查看 容器相关信息json串的形式返回,数据卷的绑定形式,如图:
6、宿主机与容器之间形成了数据共享,如图:
7、执行命令 docker run -it -v /myDataVolume:/dataVolumeContainer: ro centos 该命令表示使用只读的方式进行操作,意思就是,在容器数据目录下只能读取宿主机的文件,而不能创建或者修改文件等等,如图:
在宿主机中的操作:
在容器内的操作:
在上述的操作中就会出现文件系统只允许读的提示。
同样的对于在宿主机中的写操作也同样不能支持,vi host.txt 编辑文件,保存退出时,就会报错,如图:
8、使用docker inspect 【容器id】查看运行的相关json数据,发现,它的模式为只读,如图:
9、使用Dockerfile创建容器:
在跟目录下创建文件夹:mkdir Dockerfile
vi Dockerfile
复制以下代码:
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------- success1"
CMD /bin/bash
建立Dockerfile文件以后,使用:docker build -f /mydocker/Dockerfile -t haijin/centos . 构建新的镜像(注意后面有一个点)
如图:
查询镜像,docker images ,如图:
10、运行刚刚新创建的镜像,docker run -it haijin/centos ,即可发现在Dockerfile中创建的数据卷,如图:
11、此时我们虽然在容器内创建了数据卷,但并没有指定宿主机映射的文件夹,我们在容器的数据卷中创建一个文件,如图:
我们在宿主机中使用docker inspect fe65673c181d 查看容器的相关信息,如图:
发现,宿主机已经默认给我们分配了一个映射的文件夹。/var/lib/docker/volumes/1ef15474c6c00b8cb1acbda2063cab701f9f55fe6dbd7e0aaae9b6802566d7aa/_data
11、进入到对应的目录下时,发现就有我们的创建的文件,如图:
注意:
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
如:docker run -it -v /myDataVolume:/dataVolumeContainer --privileged=true 镜像名