docker学习之数据卷

我爱海鲸 2021-08-28 21:18:50 暂无标签

简介docker数据卷一系列应用,数据卷用于容器与容器之间的数据共享或者是容器宿主机之间的数据共享

1、在docker上拉取centos

docker pull centos

2、在docker上运行centos(使用交互式)

docker run -it centos /bin/bash

3、进入容器内后可使用:ls或者ls -l查看容器目录(ll不知到为啥会用不了),如图:

undefined

4、exit 退出容器,执行docker run -it -v /myDataVolume:/dataVolumeContainer centos 执行完后,如图:

undefined

发现在centos容器内存在了一个文件夹就是刚刚命令中执行的,退出容器后,在宿主机的更目录下也会发现存在一个相对应的文件夹,如图:

undefined

这样宿主机的目录和容器内的目录就形成了一个映射,达到数据共享的目的。

5、执行docker inspect 【容器id】查看 容器相关信息json串的形式返回,数据卷的绑定形式,如图:

undefined

6、宿主机与容器之间形成了数据共享,如图:

undefined

7、执行命令 docker run -it -v /myDataVolume:/dataVolumeContainer: ro centos  该命令表示使用只读的方式进行操作,意思就是,在容器数据目录下只能读取宿主机的文件,而不能创建或者修改文件等等,如图:

在宿主机中的操作:

undefined


在容器内的操作:

undefined

在上述的操作中就会出现文件系统只允许读的提示。

同样的对于在宿主机中的写操作也同样不能支持,vi host.txt 编辑文件,保存退出时,就会报错,如图:

undefined

8、使用docker inspect 【容器id】查看运行的相关json数据,发现,它的模式为只读,如图:

undefined

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 .  构建新的镜像(注意后面有一个点)

如图:

undefined

查询镜像,docker images ,如图:

undefined

10、运行刚刚新创建的镜像,docker run -it haijin/centos ,即可发现在Dockerfile中创建的数据卷,如图:

undefined

11、此时我们虽然在容器内创建了数据卷,但并没有指定宿主机映射的文件夹,我们在容器的数据卷中创建一个文件,如图:

undefined

我们在宿主机中使用docker inspect fe65673c181d 查看容器的相关信息,如图:

undefined

发现,宿主机已经默认给我们分配了一个映射的文件夹。/var/lib/docker/volumes/1ef15474c6c00b8cb1acbda2063cab701f9f55fe6dbd7e0aaae9b6802566d7aa/_data

11、进入到对应的目录下时,发现就有我们的创建的文件,如图:

undefined

注意:

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个--privileged=true参数即可

如:docker run -it -v /myDataVolume:/dataVolumeContainer  --privileged=true 镜像名




你好:我的2025