Devops导论学习笔记(中)

容器技术基础

Devops导论学习笔记(中)_第1张图片

容器其实就是操作系统当中的一个进程。DockerEngine本质上也是个进程,它和虚拟化技术最大的不同在于它复用了host操作系统。

Docker主要包括两方面技术:

1、和运行态(容器)技术相关的:可以有效分配物理资源,通过cgroup来实现。可以实现资源的隔离,需要用到namespace(比如进程空间、网络空间)。

2、镜像:将软件制品及其对操作系统的依赖整个打包成镜像。从系统环境开始自下而上打包应用。同样的镜像在不同的环境,其表现是一致的,因为它打包了所有的依赖。

进程隔离:os中有一颗进程树,里面会包含根进程及其fork出来的子进程。当容器启动时,通过namespace进行隔离后,它看到自己就是个根进程,pid为1,但其实在os中,该进程pid不为1.

Devops导论学习笔记(中)_第2张图片

要运行docker应用时,都必须首先安装docker engine。它是一个典型的C/S模式的应用。服务端为docker daemon,客户端直接通过curl调用REST API,比如docker login,docker ps等等。同时对REST API做了一层封装,称为docker CLI,即command line man tool。docker daemon会对network、container、image、volumes进行管理。用户可以通过docker run来运行容器、可以通过docker ps 来查看。背后都是使用REST API和CLI和docker daemon进行交互,docker daemon相当于守护进程。

Devops导论学习笔记(中)_第3张图片

Devops导论学习笔记(中)_第4张图片 

 from:拉的基础镜像    copy:将文件拷贝到自己的进程  run:要执行的命令  cmd:镜像变成容器启动时执行的命令   label:指定工作目录

通过四条命令会生成四个layer,镜像变成容器启动时又会变出两个layer。所有在容器的写操作都是在读写层操作。同时容器也允许将主机上的文件系统mount到容器里。

Devops导论学习笔记(中)_第5张图片

docker网络模式之bridge模式,docker daemon会创建出一个网桥,容器内部有自己网络空间,通过网桥和主机网络空间进行交互,容器内部有自己的ip。 

Devops导论学习笔记(中)_第6张图片

docker网络模式之host模式。容器内的网络空间共享了host的网络空间,不通过bridge。容器的ip就是主机的ip,容器的端口就是主机的端口。

Devops导论学习笔记(中)_第7张图片 

 docker网络模式之container网络模式。A容器有自己的网络空间,B容器共享A的网络空间。B容器的所有流量都是通过A容器的网络和外部进行交互,不会有独立的网络空间。

Devops导论学习笔记(中)_第8张图片

none模式没有任何网络,无法进行配置,通常用于特殊场景。

容器会使用一些特殊的文件系统,除了主机的诸如ext文件格式外,需要另外的文件格式,如AUFS等。对不同的驱动,适用于不同的场景。图中给出了不同存储驱动的特点。

Devops导论学习笔记(中)_第9张图片 构建步骤:

1、写一个docker file

2、执行docker build 命令

3、通过docker run运行。

还可以通过运行一些其他命令。。。

容器编排与调度

在生产环境中,通常会遇到不同服务间的调用,以及数据库的调用。容器的应用又是分布式的架构,应用分成不同的组件,以服务的形式在容器中通过api对外提供服务。为了保证高可用,每个组件运行多个副本,每个服务会跑多个示例。容器会组成集群,集群中的容器会根据业务的需要动态创建和销毁。这样,系统成为了一种动态的可伸缩的系统,需要进行容器的编排。

容器的编排包括容器的管理、调度、集群的定义、服务的发现等等。根据编排引擎,容器会被组成不同的cluster,去实现业务的需求。

K8S的理论基础为谷歌的Borg,是一个容器调度编排系统。

Devops导论学习笔记(中)_第10张图片 K8S的几个核心概念:

POD:一组容器的集合,共享网络空间和存储,对外共享ip,每个容器可以有自己的端口。表示一组比较紧密的容器。在pod之上会有kubelet进行管理。

服务:对外,需要做一个内外映射。

node:节点,分为work node和master node。master node承载了api server等等,背后的状态数据会存在ETCD里面。

job:含有生命周期。

daemon:长时间运行的服务。类似于操作系统中deamon的进程。

还可以为主机或者pod打label用于做选择。

Docker和Devops

在交付的流程中,原来交付的是代码。通过容器,可以将应用交付的标准统一到容器之上,以标准交付件的形式,实现跨阶段的标准化发布流程。可以确保一致的交付物贯穿整个的开发测试运维的场景。

你可能感兴趣的:(备忘录,devops,运维,docker,容器)