Docker基础理论整理(精简)
一、什么是docker,docker的概念
Docker是一个用Go语言开发的一个开源容器引擎,开发时可以让开发者很方便将他们的应用以及依赖包和当前的容器中环境打包到一个轻量级、可以移植的容器中,然后发布到任何流行Linux系统上,只要该系统也安装了docker,那么就可以对该开发者环境进行还原;在容器和容器之间不会有任何的接口,更重要的是容器性能开销非常低,并且对分配到的资源可以最大限度的利用到。
二、docker中的镜像
docker中的镜像是只读的,它是创建容器的基础,类似于VMware虚拟机中的快照概念,镜像可以自己制作,也有官方提供的镜像仓库中的镜像
三、docker中的容器
这里的容器指的是从镜像创建的运行中的实例,可以启动、停止、删除。容器之间相互隔离、互不可见,保证安全性。可以把容器看做一个简易版的Linux环境。
- 不过我想的是,比如我们从仓库下载了一个centos7镜像,然后基于镜像运行容器,那么该容器对我们来说应该和真实centos7使用感受是差不多的。
- 如果我们下载了一个Nginx镜像,然后基于镜像创建容器,那么该容器的一切都是围绕着被Nginx需要,以便达到体积小、速度快等特性。
- 同理,其它针对于某个服务的镜像也是如此。只是在运维层面的角度,并没有去深究,究竟有什么不同而已。
四、docker中的仓库
docker中的仓库一般所指的都是我们所用到的镜像仓库,有在互联网上各大站点的发布的公有仓库,也可以搭建自己公司内部的私有仓库。
搭建自己公司私有仓库,使用时和公有仓库没什么差别,只是指定不同的仓库就好了
互联网上最大的公共镜像仓库就是 Docker HUB ,这是官方镜像仓库
五、docker的网络通信
果然,任何一个技术,都有其津津乐道之处,也有其薄弱之处,那么对于docker来说,网络通信绝对算是其弱点之一。
- docker内置默认存在的网络模式
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
114a818f4abf bridge bridge local
8e522feee15d host host local
58751ced4364 none null local
如上,这是docker中默认存在的集中网络模式,但是我们在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:
bridge模式:使用 --net=bridge 指定,默认设置。
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
container模式:使用 --net=container:NAME_or_ID 指定。
下面对这些网络模式原理,以及工作方式逐个梳理
bridge模式
- 相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)。通过docker0网桥以及Iptables nat表配置与宿主机通信;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
- 在创建容器时没有使用
docker run --network=<NETWORK>
指定的话,模式是连接到此网络 - 当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
- 接下来就要为容器分配IP了,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用。如一般Docker会使用172.17.0.0/16这个网段,并将172.17.0.1/16分配给docker0网桥(在主机上使用ifconfig命令是可以看到docker0的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)。单机环境下的网络拓扑如下,主机地址为192.168.111.3/24。RFC1918解释
如上图,启动docker服务之后,就会在宿主机创建一个名为docker0的虚拟网桥,然后我们创建容器时,如果没有指定网络,那么模式出于此网络模式;docker和宿主机通信通过虚拟网桥进行通信。
host模式
- 该模式的简单理解:相当于VMware产品的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
- 个人对于命名空间(name space)的一点理解:我们把Linux操作系统比喻成一个大房子,那么命名空间指的就是这个房子中的一个个房间;而我们现在所提到的network namespace(网络命名空间),这时我们将整个linux网络比喻为一个大房子,Network Namespace指的就是一个个房间。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。但是,在host模式下工作的容器,不会获得一个独立的网络命名空间,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
- 当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用宿主机地址:端口即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
- 关于命名空间详细介绍看这里
container模式
- 此网络模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是合宿主机共享同一个。新创建的容器,不会创建自己的网卡,配置自己的ip,而是和一个指定的容器公有ip、端口范围等。
- 同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
None模式
- 如果将容器设置为此网络模式,那就相当于关闭了容器的网络功能,该模式将容器放置在它自己的网络栈中,但是并不进行任何配置。
- 此模式在以下两种情况下是有用的:
- 容器并不需要网络(例如只需要写磁盘卷的批处理任务)。
- overlay网络功能,1.8新增加的功能,现在先不总结,后面会独立出来写。
六、总结
- 要想玩转docker,首先要深入理解docker的网络通信
- 加油,依然不要忘记或抛弃,对生命的真实和对自己的真实
Docker基础理论整理(精简)的更多相关文章
- Docker指令整理
date: 2018-11-18 11:09:28 updated: 2018-11-18 11:09:28 Docker指令整理 管理员权限!!! 查看docker版本 docker -v 启动 s ...
- Docker知识点整理
目录 1. Docker简介 1.1 Docker是什么 1.2 在隔离的容器中运行软件 1.3 分发容器 2. Docker镜像 2.1 Docker镜像简介 2.2 Docker镜像常见操作 2. ...
- docker容器 如何精简镜像减小体积
写在前面 我们在上篇<Docker容器 关于镜像构建的安全问题>一起学习了如何构建一个基于安全的镜像,这篇小作文我们会学习镜像构建的另一个关键性问题,为何别人打造的镜像只有10MB而我的有 ...
- docker学习整理
1.安装 Docker 支持 CentOS6 及以后的版本 对于 CentOS6,可以使用 EPEL 库安装 Docker CentOS7 系统 CentOS-Extras 库中已带 Docker,可 ...
- docker面试整理
为什么要使用docker https://www.cnblogs.com/AshOfTime/p/10755479.html docker的使用场景 docker和虚拟机比较的优势 https: ...
- Docker配置整理
目录: 以非root用户身份管理Docker 配置Docker以在启动时启动 配置Docker守护程序监听连接的位置 以非root用户身份管理Docker 默认情况下,Docker运行权限由用户roo ...
- Docker network整理
一.简介 默认情况下容器与容器.容器与宿主机的网络是隔离开来的, 当你安装docker的时候,docker会创建一个桥接器docker0,通过它才让容器与容器.容器与宿主机之间通信. Docker安装 ...
- Docker使用整理
Docker技术的基础: namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pid cgroups,容器资源统计和隔离.主要用 ...
- docker入门整理(1)--安装
1.安装批量命令: CentOS7操作系统下. 包含卸载旧版本.安装依赖包.添加最新Yum源.安装docker-ce最新稳定版本.启动docker等: sudo yum remove docker \ ...
随机推荐
- linux记录-安装elk记录(参考博文)
什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana .filebeat三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又 ...
- Internet Download Manager 快速下载插件,破解版
下载下来直接双击绿化按钮即可. 软件链接 : https://pan.baidu.com/s/1agK3cLtjJzXcGEgsuv5mVQ 提取码: ckm7
- Egg.js中使用sequelize事务
对数据库的操作很多时候需要同时进行几个操作,比如需要同时改动几张表的数据,或者对同一张表中不同行(row)或列(column)做不同操作,比较典型的例子就是用户转账问题(A账户向B账号汇钱): 1 从 ...
- Keil MDK仿真调试STM32的时候直接进入SystemInit函数
1. 仿真的时候,进入之后 2. 说是main()未定义,可是明明定义了,什么原因?喔,看错了,是--main.对比了一下和正常工厂的配置,都一样,换个jlink V9测试一下吧.换了个ST LINK ...
- bootstrap-table:操作栏点击编辑按钮弹出模态框修改数据
核心代码: columns: [ { checkbox:true //第一列显示复选框 }, ... { field: 'fail_num', title: '失败数' }, { field: 'op ...
- AWS 监控服务(六)
AWS CloudWatch 概念 基于确定的内容监控基础设施组件 基于指定的指标发送通知并触发各种操作 分布式统计数据和收集系统,用于收集并跟踪指标 默认情况下,在管理程序级别无缝收集指标,如CPU ...
- Vue + ElementUI的电商管理系统实例02 主页
1.打开Element网站,找到主页需要的布局格式 修改Home.vue: <template> <el-container class="home-container&q ...
- burpsuite破解网页密码
1.暴力破解网页登录 http://jingyan.baidu.com/article/200957619c8739cb0721b4ff.html https://zhuanlan.zhihu.com ...
- urls 视图层
urls.py 路由层 路由与视图函数对应关系 >>> 路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射 ...
- Servlet 表单及上传文件
// 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestServletForm.java package com.test; impo ...