Docker笔记(二):Docker管理的对象
原文地址: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,不会随容器的销毁而消亡。这好比我们在阿里云上建虚机,再加载一个数据盘一样,一般产生的数据都要保存在数据盘,而不是虚机的系统盘。
数据卷具备如下特性:
- 可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 数据卷的更新,不会影响到镜像
- 数据卷默认会一直存在,不会随容器的删除而消亡
4. 网络
Docker容器是如何与外部进行网络通信的?一般来说,我们在运行容器时,只需要指定容器服务端口与宿主机端口的映射,就可以通过宿主机IP与映射的端口访问容器服务了,因为Docker默认使用了Bridge的模式来实现容器与外部的通信。
Docker的网络子系统通过使用一些驱动程序,是可插拔式的,默认提供了如下几种驱动:
- bridge:默认的网络驱动。运行在容器中的应用程序一般是通过网桥与外部进行通信。
- host:容器直接使用宿主机的网络通信。host只在基于Docker 17.06或以上版本的Swarm服务中可用
- overlay:overlay可将多个Docker daemon进程连接起来使得Swarm服务之间能相互通信,也可以将overlay用于Swarm服务与容器之间,或运行在不同Docker daemon上的容器之间的通信,不需要操作系统层面的路由配置。
- macvlan:macvlan允许你分配一个mac地址给容器,让它像一台物理设备一样加入你的网络中。Docker daemon通过mac地址将请求路由给容器,适用于那些希望直接连到物理网络的遗留应用。
- none:禁用所有网络。一般与一个自定义的网络驱动一起使用。none不能用于Swarm服务。
- 其它第三方网络插件:可从Docker Hub或其它第三方供应商获取安装。
总之,bridge适用于在同一台宿主机运行多个容器的场景;host适用于不应与宿主机进行网络隔离的场景;overlay适用于运行在不同宿主机上的容器间通信,或多个应用通过Swarm服务来共同协作的场景;macvlan适用于从虚拟机迁移配置或希望容器作为物理机一样使用网络的场景。
5. 总结
本文对Docker所管理的几个基本对象——镜像、容器、数据卷、网络做了简单介绍,这是认识或学习Docker的基础,在后续实践操作过程中,将会对各部分进行更详细的使用说明,欢迎持续关注。
我的个人博客地址:http://blog.jboost.cn
我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号,欢迎关注,及时获取更新内容)
———————————————————————————————————————————————————————————————
Docker笔记(二):Docker管理的对象的更多相关文章
- 二、【Docker笔记】Docker的核心概念及安装
Docker主要有三大核心的概念,分别为镜像(Image).容器(Container)及仓库(Repository). 一.核心概念 1.Docker镜像 Docker镜像其实与虚拟机镜像很类似, ...
- 基于【 Docker】二 || Docker的入门安装
一.前提条件 本文介绍 Docker CE 的安装使用. 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3. ...
- Docker系列二: docker常用命令总结
https://docs.docker.com/reference/ 官方命令总结地址 容器生命周期管理 1.docker run 创建一个新的容器并运行一个命令 docker run [optio ...
- Docker笔记二:Lumen & Redis
Lumen 基于 Laravel 打造,专为构建微服务和 APIs 而生:Redis 与 Memcached 均为常用的 key-value 内存对象缓存服务(系统),免费开源,Redis 支持持久化 ...
- Docker(十二)-Docker Registry镜像管理
Registry删除镜像.垃圾回收 Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据.在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令, ...
- Docker笔记(二) 安装常用软件
常用环境安装 这里收集一些常用环境的安装步骤,可直接复制进行使用,节省安装时间,后续会随时补充 安装MySQL5.7.32 下载mysql5.7.32的镜像 ( 记得下载镜像要先确保镜像仓库中存在这个 ...
- 六、【Docker笔记】Docker数据管理
前几节我们介绍了Docker的基本使用和三大核心概念,那么我们在使用Docker的过程中,Docker中必然产生了大量的数据,对于这些数据我们需要查看或者对这些数据进行一个备份,也有可能容器之间的数据 ...
- 三、【Docker笔记】Docker镜像
镜像是Docker的三大核心概念之一.Docker在运行容器之前,本地需要存有镜像,若不存在则Docker会首先尝试从默认的镜像仓库中去下载,当然我们也可以去配置自己的仓库,如此就会从我们配置的仓库中 ...
- 四、【Docker笔记】Docker容器
容器是Docker的另一个核心概念,容器就是镜像的一个运行实例,只是它具有一个可写的文件层,而镜像是一个只读的文件. 一.创建容器 1.新建容器 我们可以使用 docker create 命令来创建一 ...
- 七、【Docker笔记】Docker中网络基础配置
一个系统一般都包含多个服务组件,这些大量的服务组件不可能放在同一个容器中,这就需要多个容器之间可以互相通信.Docker提供了两种方式来实现网络服务:映射容器端口到宿主主机.容器互联机制. 一.端口映 ...
随机推荐
- WPF IDataErrorInfo使用-数据对象上验证
<Window x:Class="DataBindingExam.MainWindow" xmlns="http://schemas.microsof ...
- 一个字体,大小,颜色可定义的自绘静态框控件-XColorStatic 类(比较好看,一共19篇自绘文章)
翻译来源:https://www.codeproject.com/Articles/5242/XColorStatic-a-colorizing-static-control XColor Stati ...
- 在WPF中实现图片一边下载一边显示
原文 在WPF中实现图片一边下载一边显示 当我们上网查看一个较大的图片时,浏览器能一边下载一边显示,这样用户体验是比较好的,但在WPF程序中,当我们通过如下方式显示一幅图片时: img.Source ...
- Win8Metro(C#)数字图像处理--2.5图像亮度调整
原文:Win8Metro(C#)数字图像处理--2.5图像亮度调整 2.5图像亮度调整函数 [函数名称] 图像亮度调整函数BrightnessAdjustProcess(WriteableBit ...
- 微信小程序把玩(十八)picker组件
原文:微信小程序把玩(十八)picker组件 picker选择器分为三种,普通选择器,时间选择器, 日期选择器 用mode属性区分,默认是普通选择器.测试时时间和日期点击无反应不知道是BUG还是啥!没 ...
- oracle 使用db_link 导入导出小结
客户有一个需求,是将一个库中的某个用户迁移到一台新的oracle服务器上,因数据量较小,并且不涉及版本的升级,所以可以采用创建一个dblink,然后通过这个dblink直接从源库将用户数据导出并导入到 ...
- JS function document.onclick(){}报错Syntax error on token "function", delete this token - CSDN博客
原文:JS function document.onclick(){}报错Syntax error on token "function", delete this token - ...
- FastMM、FastCode、FastMove的使用(详细讲解了怎么安装与使用)good
http://blog.csdn.net/akof1314/article/details/6524767
- 解决win10开机出现recovery there was a problem with a device connected to your pc
问题描述: 开机无限重启并提示 recovery there was a problem with a device connected to your PC An unexpected I/O er ...
- QT5.1编译后的安装目录问题(硬路径问题)
这个是我的编译参数:configure -ltcg -confirm-license -opensource -platform win32-msvc2010 -debug-and-release - ...