学习Docker的教程总结

学习Docker的教程总结

参考文献

下面这个网站纯粹是敲代码,我最喜欢这一种学习模式了。学习一样东西最快的方式就是get your hands dirty.
https://training.play-with-docker.com/beginner-linux/
多敲代码,多总结!

我这两周的学习让我感受到docker数据卷特别难理解。看了这个网站并跟着教程练习了命令之后,我对docker数据卷有了深入的理解。

另外,B站视频 https://www.bilibili.com/video/av17854410/?p=27 对Docker的数据卷讲解的也特别好:
下面是我在听课过程中的笔记:

Docker容器的数据卷

我们知道,Docker的理念之一就是将应用与其运行的环境打包,因此,通常docker容器的生存周期都是与在容器中运行的应用程序相一致。而我们对数据的要求通常是持久的。另一方面,Docker容器之间也需要有一个共享数据的渠道。而这些需求就催生了Docker数据卷的产生。

Docker数据卷是经过特殊设计的目录,Docker数据卷可以绕过联合文件系统,为一个或者多个容器提供访问。数据卷设计的目的之一就在于数据的永久化,它完全独立于容器的生存周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。

下面我们来看数据卷的架构。我们可以通过这幅图来更好地理解Docker数据卷的结构。
在这里插入图片描述
这幅图传递了几个重要的信息。
第一:Docker的数据卷是独立于Docker的存在。它存在于Docker Host(即宿主机中)。因此,它与Docker容器的生存周期是分离的。第二:Docker数据卷本质上是存在于宿主机的文件系统中。
第三:Docker数据卷可以是目录也可以是文件。
第四:Docker容器可以使用数据卷的技术与宿主机进行文件共享。
第五:同一个容器或者文件可以支持多个容器的访问。这样,其实是实现了容器间数据的共享和交换。

下面,我们来看一下数据卷都有哪些特点?

  • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
  • 数据卷可以在容器之间共享和重用
    每个特定都必须要用代码来证明,否则根本无法理解。
  • 容器对数据卷的修改是即时进行的,所有的修改都会直接体现咋数据卷中。
  • 数据卷的变化不会影响镜像的更新。因为数据卷是独立于联合文件系统的。而镜像本身基于联合的文件系统。所以镜像与数据卷之间不会有相互影响的情况。
  • 数据卷会一直存在,即使挂载数据卷的容器已经被删除。因为本质上,数据卷是宿主机中的一个目录。同时,为了提供数据的永久化,数据卷的生存周期和容器是完全隔离的。

下面,我们就来学习如何为容器添加数据卷。

docker run -v ~/container_data:/data -it ubuntu /bin/bash

我们可以使用docker run命令的-v选项来指定数据卷在本机文件系统中的目录和在容器中映射的目录名。

下面我们来为大家演示

在这里插入图片描述
我们指定的本机目录为~/datavolume,/data为容器中访问的名字。
需要注意,如果本机中不存在datavolume这个文件夹,docker run命令执行后,会自动在本地创建一个datavolume文件夹。

运行之后,我们使用ls命令
在这里插入图片描述
可以看到容器中存在一个/data文件夹。
在这里插入图片描述
在这里插入图片描述
结果发现存在datavolume文件夹。打开
在这里插入图片描述
我们看到我们刚才在容器中创建的c1文件已经存在了。
查看c1文件的内容。
在这里插入图片描述
我们查看一下刚才我们建立的容器
在这里插入图片描述

我使用inspect命令来查看这个容器
在这里插入图片描述
我们可以看到在输出这个地方包含了数据卷这个信息。
在这里插入图片描述
也就是说,我们可以通过docker inspect命令来查看一个容器是否挂载了数据卷。

接下来,我们来学习如何为数据卷添加访问权限。
即在指定目录映射之后再指定访问权限。
在这里插入图片描述

下面,我们退出容器。
在这里插入图片描述

我们使用docker inspect命令查看刚刚建立的容器dvt1
在这里插入图片描述
在这里插入图片描述

我们可以看到数据卷的写权限为false。我们之前创建的容器的写权限为true.

除了使用run命令在容器创建时创建数据卷,我们还可以使用Dockerfile构建一个包含数据卷的镜像。
Dockerfile指令:
VOLUME["/data"]
并通过使用这个镜像来创建包含数据卷的容器。


但是如果想进一步加强数据卷理论知识的话,还可以看下面这些博客。
https://docs.docker.com/storage/ 帮你理解docker的数据管理

然后看下面这篇文章
http://dockone.io/article/128 讲解的非常好

最后有关Docker之Mac OS下host与container之间的volume映射问题请见下面这个链接 https://blog.csdn.net/m0_37904728/article/details/82786771

下面这篇文章对Docker的理论上讲解的也非常好,以后有空翻译。但是我看到后面docker-compose的部分的时候,感觉有些吃力。
[1] https://docker-curriculum.com/#introduction

总结

docker就像git一样需要不断地学习,cmu的sa-babi项目使用了docker, 现在终于看懂了。?

应用类的工具就应该多敲代码。敲了代码你才知道是怎么回事!就像学习C++一样,最终都是要来写代码的。你只有多敲,你才能看到结果,看到结果你才能感受和理解背后的原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chenglin_Yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值