【Docker-1】docker简介
目录
- 容器背景介绍
- docker介绍
- docker技术
一、容器背景介绍
传统服务器的问题:
- A说:我本地运行没有问题。 B说:但是我的服务器也没有问题。
--依赖操作系统,运行环境(JDK版本,tomcat版本),代码与环境耦合程度,配置;
2. 系统好卡,哪个哥们写了死循环吗?
--同一个服务器之间互相影响,共享CPU和内存等。
3.双十一需要流量撑不住,但是过了双十一服务器又太富裕。
--伸展性以满足流量洪峰,缩容以降低成本需求。也即是scale up/scale down
以上的要求催生了容器的发展,后面说容器思想的时候会再说到这方面的契合。这里展示下容器的发展:
目前主流的容器有:Docker、Kubernetes和Microservice
二、docker介绍
2.1 Docker的定义:
解释一:Docker technology is one implementation of container based virtualization technology
解释二:Docker is a platform for developers and sysadmins to develop, deploy, and run applications with containers.
从英文不难看出:Docker是开发人员和系统管理员开发、部署和运行带有容器的应用程序的平台。是一种基于容器实现虚拟化技术的一种平台或技术。
创始人:Solomon Hykes ,2013年 Docker对外开源,2014年 全球开始流行。
docker发展:
2010 |
2013 |
2014.6 |
2014.7 |
2015.4 |
dotCloud PAAS |
Docker 开源 |
Docker 1.0 |
C轮$4000W |
D轮$9500W |
2.2 思想
主要三个方面:集装箱/标准化和隔离方面进行说明:
1)集装箱:有规则地打包物品,这种特性,使得程序放到哪都能运行。一图胜千言,优势如下图:
2)标准化:运输方式,存储方式和API接口
运输方式:犹如超级码头,其中运输;
存储方式:不用管你的文件存储在哪,只要专注命令
API接口:执行同样的命令,即可完成操作3
3) 隔离:轻量级,秒开(LXC的内核)
2.4 实体机,虚拟机和容器的区别:
|
实体机 |
虚拟机 |
容器 |
优点 |
|
部署简单,分钟计算 各个app间的隔离好 资源利用率有提升 |
启动秒开 占资源少,单机可开1000以上容器 系统性能损失少 App间资源隔离 |
缺点 |
|
启动慢,分钟级别 Image比较大,G级别 系统性能损失比较大 |
安全和隔离对比虚机要差 |
三、docker技术
3.1 cgroups、Namespace、Union Mount FS
Docker是新瓶装旧酒,是容器虚拟化的相关技术的组合:
-
cgroups,其名称源自控制组群(英语:control groups)(limits how much you can use)作用是限制一个进程组的资源(包括内存,CPU ,磁盘IO,网络等)。一组进程放在放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的
参考:https://en.wikipedia.org/wiki/Cgroups
-
Namespace (limits what you can see)又称为命名空间,它主要做访问隔离,即同一个命名空间的多个资源(memory, CPU, network, pid) 可以互相看到,但是之外的看不到。
Namespace是Linux Kernel提供的一种内核级别环境隔离的方法
作用:进程空间隔离/文件系统隔离/域名空间隔离等等
参考:https://coolshell.cn/articles/17010.html
- UnionFS(联合文件系统):用于制作image,下图展示了Docker用UnionFS搭建的分层镜像。
参考:https://en.wikipedia.org/wiki/Union_mount
3.2 Doctor组件
build镜像,ship容器,run仓库
- Doctor镜像:犹如一个集装箱,用于存放一系列文件。使用上图使用的UnionFS,同一个文件系统可以看多多个文件。分成进行存储:从下往上:最底层的引导层,第二层是Linux系统,第三四层为程序所需的镜像系统,这几层都是只读层。最上层的writable container是可读可写的,这个留到下一点描述。、
- Doctor容器:本质上是一个进程或者虚拟机,一般为我们编写的为最上层的writable container,这个以下的部分一般是不动的,若是要修改,需要进行依次拷贝,把下层的镜像拷贝到writable container,进行修改后再加上自己的部分即可。这样就保证了底层环境不变性。便于开发和运维的一致性。
- Doctor仓库:存储镜像的地方,有利于自己或他人使用。(当然一般大公司都有自己的仓库)
国外:
Docker hub:hub.docker.com
国内:
网易云平台: https://c.163yun.com/hub#/library
Daocloud:https://hub.daocloud.io/
其它镜像可以看看这篇:https://www.cnblogs.com/wushuaishuai/p/9984228.html
3.3 Docker的运行流程:
典型C/S架构分为三个Client,DOCKER_HOST,Registry。如下图所示。
- Client:表示本地执行的docker命令载体
- DOCKER_HOST:本机安装docker环境下的镜像和容器以及API-docker daemon
- Registry:远端的docker 仓库。
流程:
- 一般执行命令后,比如docker pull ,docker client 将连接了docker daemon;
- Docker daemon 从docker Hub(docker仓库)拉去hello-world 的镜像,注意这里优先从DOCKER_HOST的image调取,没有的时再连接远端的Registry。
- Docker daemon 从镜像创建了一个新的容器,这个容器运行了这个可执行的文件,产生输出;
- Docker daemon 把输出变成输出流给到docker client, docker client呈现给终端。
容器以后的发展:更轻量级和更安全性
docker学习链接: