美文网首页linux运维工程师必会
理解Docker镜像、容器和网络

理解Docker镜像、容器和网络

作者: 小尛酒窝 | 来源:发表于2019-01-25 09:58 被阅读37次

1、什么是Docker

Docker是基于Go语言实现的云开源项目,其目标是为了实现应用组件级别的“一次封装,到处运行的”。即通过对应用组件的封装、分发、部署和运行等生命周期的管理,实现虚拟化应用。

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

2、Docker镜像

操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构。 镜像实际是由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

3、Docker 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新run,数据却不会丢失。

如果没有使用数据卷,在对容器作了修改后,除非使用commit 提交了对容器的修改,否则删除容器后修改的数据便会丢失。

4、Docker 网络

Docker 网络有四种模式,分别为:host、container、none、bridge模式,其中bridge模式为Docker默认的网络模式,Docker server在启动时便会创建一个名为docker0的虚拟网桥以给后续的容器提供网络桥接。其工作方式与交换机类似,将所有的容器连接在同一个二层网络当中,相应的容器使用分配的Ip进行IP通信,并在宿主机上做相应的DNAT和SNAT来使得容器Ip能够与外部宿主机网络通信。具体原理如下图:


参考链接:
http://dockone.io/article/783
http://dockone.io/article/6051
https://www.cnblogs.com/gispathfinder/p/5871043.html

相关文章

  • 理解Docker镜像、容器和网络

    1、什么是Docker Docker是基于Go语言实现的云开源项目,其目标是为了实现应用组件级别的“一次封装,到处...

  • 08_Docker网络

    学习网络之前需要理解:Docker、镜像、容器之间的关系和区别。 可以粗暴的理解为:Docker = 虚拟机软件镜...

  • CI/CD之Docker容器DevOps知识汇总

    容器与虚拟主机的区别 Docker安装 Docker的镜像和容器 Docker的网络 Docker的持久化存储和数...

  • 学习资料

    10张图带你深入理解Docker容器和镜像

  • docker 基础(1)

    Docker 镜像和容器 要想更好使用和理解 docker 有两个概念是绕不开的,那就是镜像和容器的概念。Dock...

  • Docker学习重点(8)~Docker网络

    一、Docker网络--理解Docker0 准备工作:清空所有环境将docker 的所有镜像、容器先删除,干干净净...

  • docker 常用命令

    批量删除镜像和容器 删除无用中间镜像 以docker root 进入容器 查看docker 容器耗费资源

  • [docker]docker基本使用

    docker[Centos 7]: 个人理解的docker,核心为镜像和容器。docker可以运行在各大系统上,这...

  • Docker

    # Docker java进阶/docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器...

  • docker相关概念理解

    Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。 Docker 容器(...

网友评论

    本文标题:理解Docker镜像、容器和网络

    本文链接:https://www.haomeiwen.com/subject/teapjqtx.html