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 \ ...
随机推荐
- [Sklearn] Linear regression models to fit noisy data
Ref: [Link] sklearn各种回归和预测[各线性模型对噪声的反应] Ref: Linear Regression 实战[循序渐进思考过程] Ref: simple linear regre ...
- 戒邪淫利器:《楞严经 四种清净明诲》实例及原经文 (转自学佛网:http://www.xuefo.net/nr/article55/545256.html)
今日得持首楞严,不读天下糟粕书! 当你读完楞严经后就会很真实的升起这个感觉!根本觉得其他书都是多余的!所以<楞严经>还是要多读,多看!并且<楞严经>戒淫的效果特别好!好好的珍惜 ...
- Java使用Jsoup获得新闻联播所有文字稿
Jsoup的maven坐标: <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> ...
- jquery 单击选中 再次选中取消选中
html: <div id="full" class='weui-popup__container' style="background: #fff"&g ...
- node不要使用最新版本,使用LTS版本
错误现象 const { Math, Object, Reflect } = primordials; 原因 使用了最新的node版本 解决 使用稳定版本,参考官网说明,目前10.x的版本是稳定版本( ...
- WIN10桌面无创建文件夹选项,无法创建文件
在桌面或其他磁盘,右键没有新建选项,无法新建文件夹或文档. 右键桌面左下角开始按钮,点击:命令提示符(管理员) 弹出,Windows命令处理程序对话框,点击是 粘贴内容: cmd /k r ...
- 使用wkwebview时,push后,再pop返回,报错
使用wkwebview时,push后,再pop返回,报错 Cannot form weak reference to instance (xxxx) of class xxxx. It is poss ...
- mysql explain中key_len的作用
mysql explain中key_len的作用key_len越小 索引效果越好 name的字段类型是varchar(20),字符编码是utf8,一个字符占用3个字节,那么key_len应该是 20* ...
- Generative Adversarial Network (GAN) - Pytorch版
import os import torch import torchvision import torch.nn as nn from torchvision import transforms f ...
- 013 Android 实现流水灯功能+自定义控件的样式(可以复用)
1.介绍 (1)获取屏幕的焦点 android:focusable与android:focusableInTouchMode(获取屏幕焦点) 前者针对在键盘下操作的情况,如果设置为true,则键盘上下 ...