摘要:

将容器中产生的数据持久化保存下来,不然当容器删除以后,数据也没有了。

先来看看Docker的理念:│
将运用与运行的环境打包形成容器运行,运行可以伴随若容器,但是我们对数据的要求希望是持久化的容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。

特点:
1:数据卷可在容器、主机之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

用 -v 命令创建容器数据卷

1.运行容器并创建容器卷

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

计算机中的解释: volume(文件集)是一个可辨认的数据存储(storage)单元
volume 【读音】英[ˈvɒlju:m] 卷
n. 体积; 量; 容积; 音量; 容量; 额; 响度;

2.查看容器卷绑定成功

有bind内容就是绑定数据卷成功了。

  1. docker inspect c9161aa08770
  2. "HostConfig": {
  3. "Binds": [
  4. "/root/container:/oldcontainer"

3.主机和容器之间的数据共享

在主机中新建文件,在容器中修改内容 ,在主机中可以查看到在容器中修改的内容。
image.png

4.容器退出不运行后,主机修改绑定的卷的内容,当容器再次启动时,容器会同步主机修改的文件

image.png

5.主机和容器的容器卷绑定,但在容器侧设置只读

docker run -it -v /cando:/datareadonly:ro centos

  1. //主机内可写可读,容器内只读
  2. [root@test /]# cd cando
  3. [root@test cando]# ls
  4. [root@test cando]# touch can.txt
  5. [root@test cando]#
  6. //容器内不可写
  7. [root@095457b63174 datareadonly]# vi can.txt
  8. [root@095457b63174 datareadonly]#
  9. 111
  10. -- INSERT -- W10: Warning: Changing a readonly file
  11. docker inpsect 容器号中可以看到绑定关系也有 ro readonly
  12. "HostConfig": {
  13. "Binds": [
  14. "/cando:/datareadonly:ro"
  15. ],

试了一下 将命令改成,想设置成在主机只读,容器可修改,但这样做没什么意义。容器是产生和使用数据的,修改数据没有任何异议,可能这是设计docker的思路吧。
docker run -it -v /cando:ro:/datareadonly centos
docker run -it -v /cando:ro :/datareadonly centos
都会报错

用Dockerfile创建容器数据卷