专栏首页角落的白板报[YoYoMooc]Docker 中的数据卷(Volume)和网络(NetWork)介绍

[YoYoMooc]Docker 中的数据卷(Volume)和网络(NetWork)介绍

  1. 发布 Docker 镜像到 Azure 容器仓库[1]|Youtube(需科学上网)[2]|图文[3]
  2. 创建一个 Windows 容器[4]|Youtube(需科学上网)[5]|图文[6]

在后面的几篇文章中,我会介绍 Docker 的两个功能,它们是为了处理更复杂的应用而设计的,特别是由多个容器组成的应用程序。

第一个功能是,它将应用程序与应用程序产生的数据文件分离出来,也可以说是将容器的运行环境和产生的数据库分离了到了其他存储中,这使得更换或升级容器更加方便。

第二个功能是网络,允许容器之间进行通信,这使得应用程序得以扩展,可以很容易的处理更大的工作负载。

准备工作

在我们开始正式的网络和卷的学习之前,保证我们的环境一致性是很重要的事情。首先,切换我们的容器环境为 Linux 平台。然后删除当前所有的容器,后面我们会重新创建它们。

docker rm -f $(docker ps -aq)

Docker 数据卷的重要性

在 Docker 中,容器中的应用程序与两种文件相关联,一种是本身所需的运行文件。另外一种是用户操作生成的如日志、数据库。而在 Docker 的世界中,这两种文件的处理方式不同。

与应用程序相关联的文件有两种:运行应用程序所需的文件和应用程序运行时生成的数据文件,这些文件通常是由于用户操作而生成的。

在 Docker 世界中,这两种文件的处理方式不同。

我们当前的 ASP.NET Core 示例应用程序创建的容器,里面包含了.NET Core 运行时及编译后的 ASP.NET Core 文件和其他配置信息和静态文件。

如果没有这些文件,容器化的 MVC 应用程序将无法运行。

使用容器的主要好处之一是它们很容易创造和摧毁,而数据的存储文件不包含在容器中。

毕竟销毁容器时,其文件系统中的文件也会被删除,如果把数据文件一并删除了,那将是灾难级的,因为它们将永远丢失。

所以 Docker 提供了的功能来管理应用程序数据,在接下来的文章中,我将解释卷是如何工作的,以及如何使用卷来存放数据库这种常见类型的应用文件。

最后

为了让我们保存好之前用过的 Dockerfile 文件,我们在YoYoMooc.ExampleApp根目录中创建一个名为Dockerfile.volumes的文件。

验证 Docker 卷的存在

通过实践来验证卷的存在是最好的方式, 我们在YoYoMooc.ExampleApp根目录中创建一个名为Dockerfile.volumes的文件。添加以下代码:

FROM alpine:3.11
WORKDIR /data
ENTRYPOINT (test -e message.txt && echo "文件已存在" \
    || (echo "创建文件中..." \
    && echo 你好, Docker 时间: $(date '+%X') > message.txt)) && cat message.txt

Docker 文件中的 alpine 是一个最小可执行的 Linux 发行版版本。我们采用它作为基础镜像,来模拟一个小的虚拟系统。

当我们的运行镜像的时候,ENTRYPOINT命令会创建一个名为/data/message.txt的文件,该文件内容包括,里面包含一个消息和时间戳。

这个文件我们可以称为数据文件,数据文件在容器启动前不会创建,它也不会生成的镜像的一部分。

YoYoMooc.ExampleApp根目录下,运行如下命令:

docker build . -t yoyomooc/vtest -f Dockerfile.volumes
docker run --name vtest yoyomooc/vtest

执行后,可以会看到如下结果,当然时间戳的值是不一样的:

创建文件中...
你好, Docker 时间: 05:38:35

以上信息是容器创建后,继续创建 message.txt 文件,然后读取/data/message.txt 的中的数据,然后显示出来,可以看到它的时间戳的值:05:38:35

因为我没有为这个数据文件指定卷,所以它成为了容器内系统文件的一部分。而容器的文件系统是持久化的,我们可以通过命令来进行验证:

docker start -a vtest

将会输入以下消息:

文件已存在
你好, Docker 时间: 05:38:35

可以看到输出的消息提示为/data/message.txt已经存在,并且时间戳都是相同的。

如果我们把容器删除后,这个数据文件便会出现问题,我们会在后面的章节中详细解释它。Docker 容器经常被创建和销毁,大多数时候是为了自动响应请求的负载均衡,当然也有可能是为了部署一个新版本的应用程序。

现在删除容器,命令如下:

docker rm -f vtest


Docker 会删除容器,同时 /data/message.txt 文件也会被删除。现在验证下,请输入以下命令:

docker run --name vtest apress/vtest

得到的输出内容为:

创建文件中...
你好, Docker 时间: 05:58:00

因为我们把数据文件保存在了容器中,所以容器会删除后,数据文件也就丢失了。而在实际生产环境中,删除数据文件会造成严重的后果,所以需要避免。

那么如何避免呢?我们在下节课中给大家讲解。。

参考资料

[1]

发布Docker镜像到Azure容器仓库: https://www.bilibili.com/video/BV1zt4y117tg/

[2]

Youtube(需科学上网): https://youtu.be/y_LUq2SKJMY

[3]

图文: 12-Publish-the-image-to--Azure-Docker.md

[4]

创建一个Windows容器: https://www.bilibili.com/video/BV1yp4y1Q7iM/

[5]

Youtube(需科学上网): https://youtu.be/eIpfEnzQWmM

[6]

图文: 13.create-windows-Containers.md

本文分享自微信公众号 - 角落的白板报(jiaoluodebaibanbao),作者:梁桐铭

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 了解容器和Docker的发展背景

    在正式开始前,我们首先需要了解容器是什么,以及它为什么会变得如此流行;然后介绍Docker的发展历程,以及为什么需要使用这么一项容器化技术。

    角落的白板报
  • 在Ubuntu 16.04环境下安装Docker-CE(附视频教程)

    大纲 Docker的介绍 Ubuntu下安装Docker 快速体验Docker 利用Docker搭建个人博客 利用Docker搭建开源版本控制利器-GitLa...

    角落的白板报
  • 2. ASP.NET Core 应用的响应伸缩扩展问题

    传统的 ASP.NET Core MVC 应用程序的部署方法使其很难满足响应式伸缩扩展变化。

    角落的白板报
  • 云计算的乐高积木Docker如何重构应用程序开发

    Docker的发展势态如同森林大火,势不可挡。这项新型的Linux容器技术引燃了一路上的一切东西,面对其迅猛发展的势头,我们许多人还没有回过神来。Docker不...

    静一
  • Docker 业务流程的概述以及用处

    [本文由Yaron Parasol编写]

    Techeek
  • 如何在企业中部署Docker

    微服务组成的原生云应用程序,Docker通常是核心,因为它提供了构建,运输和运行Linux容器的绝佳方式。

    Techeek
  • Docker---(2)为什么要用Docker

    作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。 首先,Docker 容器的启动可以在秒级实...

    IT云清
  • Docker容器实战(四) - 纷纷扰扰,终归尘土

    Docker公司的容器技术生态在云计算市场中稳步前进,围绕着Docker项目进行的各个层次的集成与创新产品,也如雨后春笋般出现在这个新兴市场当中。

    JavaEdge
  • 5 个好用的 Docker 图形化管理工具

    github 上项目地址:https://github.com/portainer/portainer

    dys
  • 为什么Docker会受欢迎?看完这些才恍然大悟

    Docker不是唯一的容器平台,也不是第一个推出的。其他框架,如OpenVZ和LXC,从20世纪20年代中期诞生。而其他类似容器的技术,如FreeBSD更进一步...

    静一

扫码关注云+社区

领取腾讯云代金券