原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html

Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像、容器、网络、数据卷等,本文就来介绍下这些对象及用途。

1. 镜像

所谓镜像,是一个静态的概念。它对我们期望干的事情做了一些定义,比如要运行什么程序,需要哪些依赖,需要什么样的配置,需要开放哪个网络端口等等。
Docker的镜像是一个特殊的文件系统,提供了运行时需要的程序、库、资源、配置等文件,还包含一些为运行时准备的配置参数(如环境变量、匿名数据卷、用户等),镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像的文件系统有一个分层存储的概念,采用的是Union FS技术,因此,镜像并不是简单地由一组文件组成,而是由多层文件系统叠加联合组成。如下图所示

镜像构建时,会一层一层地构建,前一层是后一层的基础,每层构建完后就变成只读的,不会再发生改变。镜像分层存储的一大好处是复用,镜像的每一层可以在不同镜像间复用,这就好比我们开发项目时将一些公共功能封装成jar包,在各个项目可以直接依赖使用一样。关于镜像的更多内容,在后续使用时再详述。

2. 容器

相对镜像,容器是一个动态的运行时的概念,它与镜像的关系类似于面向对象中类与实例的关系。容器可以被创建、启动、停止、删除等。容器运行实质上就是运行一个进程,但与那些直接在宿主机上运行的进程不同,容器运行在自己的独立的隔离的命名空间中——拥有自己的root文件系统、网络配置、进程空间,甚至自己的用户ID空间,因此虽然是以进程的形式运行,但好像是运行在一个独立的系统中一样,这样相比直接运行于宿主机的进程,容器的运行显得更为安全。
前面说到镜像的分层存储概念,对于容器来说,实际上也是以镜像作为基础层,在其上创建了一个当前容器的存储层,如下图

以镜像ubuntu:15.04为基础层所创建的容器,都有一个自己的可读写的存储层(镜像的存储层是只读的)。容器存储层的生命周期与容器一样,容器销毁时,容器的存储层也会随之消亡,任何保存在容器存储层的数据也都会随容器的删除而丢失,因此一般我们要保持容器存储层的无状态化,所有文件的写操作,都应该使用数据卷或绑定宿主机目录。

3. 数据卷

数据卷是一个独立于容器,可供一个或多个容器使用的特殊目录,它绕过了Union FS,不会随容器的销毁而消亡。这好比我们在阿里云上建虚机,再加载一个数据盘一样,一般产生的数据都要保存在数据盘,而不是虚机的系统盘。
数据卷具备如下特性:

  1. 可以在容器之间共享和重用
  2. 对数据卷的修改会立马生效
  3. 数据卷的更新,不会影响到镜像
  4. 数据卷默认会一直存在,不会随容器的删除而消亡

4. 网络

Docker容器是如何与外部进行网络通信的?一般来说,我们在运行容器时,只需要指定容器服务端口与宿主机端口的映射,就可以通过宿主机IP与映射的端口访问容器服务了,因为Docker默认使用了Bridge的模式来实现容器与外部的通信。
Docker的网络子系统通过使用一些驱动程序,是可插拔式的,默认提供了如下几种驱动:

  1. bridge:默认的网络驱动。运行在容器中的应用程序一般是通过网桥与外部进行通信。
  2. host:容器直接使用宿主机的网络通信。host只在基于Docker 17.06或以上版本的Swarm服务中可用
  3. overlay:overlay可将多个Docker daemon进程连接起来使得Swarm服务之间能相互通信,也可以将overlay用于Swarm服务与容器之间,或运行在不同Docker daemon上的容器之间的通信,不需要操作系统层面的路由配置。
  4. macvlan:macvlan允许你分配一个mac地址给容器,让它像一台物理设备一样加入你的网络中。Docker daemon通过mac地址将请求路由给容器,适用于那些希望直接连到物理网络的遗留应用。
  5. none:禁用所有网络。一般与一个自定义的网络驱动一起使用。none不能用于Swarm服务。
  6. 其它第三方网络插件:可从Docker Hub或其它第三方供应商获取安装。

总之,bridge适用于在同一台宿主机运行多个容器的场景;host适用于不应与宿主机进行网络隔离的场景;overlay适用于运行在不同宿主机上的容器间通信,或多个应用通过Swarm服务来共同协作的场景;macvlan适用于从虚拟机迁移配置或希望容器作为物理机一样使用网络的场景。

5. 总结

本文对Docker所管理的几个基本对象——镜像、容器、数据卷、网络做了简单介绍,这是认识或学习Docker的基础,在后续实践操作过程中,将会对各部分进行更详细的使用说明,欢迎持续关注。

我的个人博客地址:http://blog.jboost.cn
我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号,欢迎关注,及时获取更新内容)
———————————————————————————————————————————————————————————————

Docker笔记(二):Docker管理的对象的更多相关文章

  1. 二、【Docker笔记】Docker的核心概念及安装

    Docker主要有三大核心的概念,分别为镜像(Image).容器(Container)及仓库(Repository). 一.核心概念 1.Docker镜像 ​ Docker镜像其实与虚拟机镜像很类似, ...

  2. 基于【 Docker】二 || Docker的入门安装

    一.前提条件 本文介绍 Docker CE 的安装使用. 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3. ...

  3. Docker系列二: docker常用命令总结

    https://docs.docker.com/reference/  官方命令总结地址 容器生命周期管理 1.docker run 创建一个新的容器并运行一个命令 docker run [optio ...

  4. Docker笔记二:Lumen & Redis

    Lumen 基于 Laravel 打造,专为构建微服务和 APIs 而生:Redis 与 Memcached 均为常用的 key-value 内存对象缓存服务(系统),免费开源,Redis 支持持久化 ...

  5. Docker(十二)-Docker Registry镜像管理

    Registry删除镜像.垃圾回收 Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据.在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令, ...

  6. Docker笔记(二) 安装常用软件

    常用环境安装 这里收集一些常用环境的安装步骤,可直接复制进行使用,节省安装时间,后续会随时补充 安装MySQL5.7.32 下载mysql5.7.32的镜像 ( 记得下载镜像要先确保镜像仓库中存在这个 ...

  7. 六、【Docker笔记】Docker数据管理

    前几节我们介绍了Docker的基本使用和三大核心概念,那么我们在使用Docker的过程中,Docker中必然产生了大量的数据,对于这些数据我们需要查看或者对这些数据进行一个备份,也有可能容器之间的数据 ...

  8. 三、【Docker笔记】Docker镜像

    镜像是Docker的三大核心概念之一.Docker在运行容器之前,本地需要存有镜像,若不存在则Docker会首先尝试从默认的镜像仓库中去下载,当然我们也可以去配置自己的仓库,如此就会从我们配置的仓库中 ...

  9. 四、【Docker笔记】Docker容器

    容器是Docker的另一个核心概念,容器就是镜像的一个运行实例,只是它具有一个可写的文件层,而镜像是一个只读的文件. 一.创建容器 1.新建容器 我们可以使用 docker create 命令来创建一 ...

  10. 七、【Docker笔记】Docker中网络基础配置

    一个系统一般都包含多个服务组件,这些大量的服务组件不可能放在同一个容器中,这就需要多个容器之间可以互相通信.Docker提供了两种方式来实现网络服务:映射容器端口到宿主主机.容器互联机制. 一.端口映 ...

随机推荐

  1. WPF 中style文件的引用

    原文:WPF 中style文件的引用 总结一下WPF中Style样式的引用方法: 一,内联样式: 直接设置控件的Height.Width.Foreground.HorizontalAlignment. ...

  2. 投资人的能量往往大多远远不仅于此,他能站在不同的角度和高度看问题(要早点拿投资,要舍得让出股份)——最好不要让 Leader 一边做技术、一边做管理,人的能力是有限的,精力也是有限的

      摘要:在创业三年时间里作为联合创始人,虽然拿着大家均等的股份,我始终是没有什么话语权的,但是,这也给了我从旁观者的角度看清整个局面的机会.创业公司的成败绝大程度取决于技术大牛和公司 Leader, ...

  3. 经典面试编程题--atoi()函数的实现(就是模拟手算,核心代码就一句total = 10 * total + (c - '0'); 但是要注意正负号、溢出等问题)

    一.功能简介 把一个字符串转换成整数 二.linux c库函数实现 /*** *long atol(char *nptr) - Convert string to long * *Purpose: * ...

  4. tensorflow 1.0 学习:模型的保存与恢复

    将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...

  5. 用python & bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本

    2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh"!inclu ...

  6. C#获取字符串宽度像素

    通过Graphics对象的MeasureString方法可以获取字符串的大小,如下: Graphics graphics = CreateGraphics(); SizeF sizeF = graph ...

  7. Qt通过HTTP POST上传文件(python做服务端,附下载)

    本文使用Qt Creator用HTTP POST的方法上传文件,并给出一个上传文件的例程. 本文主要客户端,所以对于服务器端程序编写的描述会比较简略 服务器使用Django编写,django服务器接收 ...

  8. orm单表操作

    二.orm简介 ORM:object relation mapping (ORM是“对象-关系-映射”的简称) MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦, ...

  9. 数据库读写分离Master-Slave

    数据库读写分离Master-Slave 一个平台或系统随着时间的推移和用户量的增多,数据库操作往往会变慢,这时我们需要一些有效的优化手段来提高数据库的执行速度:如SQL优化.表结构优化.索引优化.引擎 ...

  10. 短视频技术详解:Android端的短视频开发技术

    在 <如何快速实现移动端短视频功能?>中,我们主要介绍了当前短视频的大热趋势以及开发一个短视频应用所涉及到的功能和业务.在本篇文章中,我们主要谈一谈短视频在Android端上的具体实现技术 ...