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提供了两种方式来实现网络服务:映射容器端口到宿主主机.容器互联机制. 一.端口映 ...
随机推荐
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WP ...
- windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集)
原文:windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集) Log Parser Studio是一个强大的IIS图形分析工具,值得推荐. 1. 安装L ...
- Win8 Metro(C#)数字图像处理--2.42图像光照效果算法
原文:Win8 Metro(C#)数字图像处理--2.42图像光照效果算法 [函数名称] 图像光照效果 SunlightProcess(WriteableBitmap src,int X,in ...
- /\B(?=(?:\d{3})+$)/g 一条令人费解的正则表达式
网上浏览博客看到要用JavaScript正则表达式解决一个功能, 要在数字中间插入逗号, 用来表示书面的金额写法. JS代码是这样子的 let test1 = '1234567890' let for ...
- Chinese Messy Code of String
It's very strange that I found the messy code.I 've never seen this before. this is the java code: / ...
- Linux中的进程
进程,线程,程序 通俗的说,进程是程序的一次执行过程,程序是一种静态概念,如果在系统中引入线程,则进程是资源分配单元,线程是系统执行单元.此处不懂应参阅<操作系统> 进程衍生 fork-e ...
- shell多线程之进程间通信
# 这是一个简单的并发程序,有如下要求: # .有两个程序a和b,希望他们能并发执行,以节约时间 # .a和b都是按照日期顺序执行,但b每日程序的前提条件是当日a的程序已经执行完毕 #解决方案: # ...
- webpack 编译ES6
虽然js的es6是大势之趋,但很多浏览器还没有完全支持ES6语法,webpack可以进行对es6打包编译 需要安装的包有 npm init // 初始化 npm install babel-loade ...
- nginx搭建静态网站
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务,常用于负载均衡构架,以提高网站的并发量,概念不过多介绍,更多细节请自行百度, 本文是纯操作案例,假设你已经知道什么是ngi ...
- DNS之缓存服务器部署流程
环境介绍 [root@dns ~]# cat /etc/centos-releaseCentOS release 6.6 (Final)[root@dns ~]# ifconfig eth0|sed ...