CloudMan每天5分钟玩转容器技术笔记。
0 序言
为什么要选择容器?
传统的应用部署方式:通过操作系统的包管理器来安装应用。这样做的劣势在于:应用的运行、配置、库、生存周期和机器的操作系统纠缠在一起。
新的方式:部署基于操作系统级别虚拟化的容器进行虚拟化而非通过硬件来虚拟化。容器之间相互隔离,有自己的文件系统,无法看到彼此间的进程。
容器:平台级别的技术。比如,Docker,CoreOS的rkt。
容器使软件具备了超强的可移植能力。“集装箱”。容器无需修改便可运行在几乎所有的平台上--虚拟机、物理机、公有云、私有云。
1 容器生态系统
1.1 容器核心技术
能够让容器(container)在host上运行起来的那些技术。
1. 容器规范:保证容器生态的健康发展,保证不同容器之间能够兼容。
Open Container Initiative(OCI)组织,目的是制定开放的容器规范,runtime spec和image format spec。
2. 容器runtime:容器只有在runtime中才能运行。runtime需要跟操作系统kernel紧密协作,为容器提供运行环境。lxc、runc和rkt是目前主流的三种容器runtime。
Docker现在默认的runtime是runc。
3. 容器管理工具:对内与runtime交互,对外为用户提供interface。
Docker engine包含后台daemon和cli两个部分。
4. 容器定义工具:允许用户定义容器的内容和属性,这样容器能够被保存,共享和重建。
Docker:docker image,dockerfile。
Docker image(镜像)是docker容器的模板,runtime 依据 docker image创建容器。
Dockerfile是包含若干命令的文本文件,可以通过这些命令创建出docker image。
5. Registry:容器通过image创建,需要有一个仓库来统一存放image。Docker Hub和Quay.io。
6. 容器OS:专门运行容器的操作系统。
1.2 容器平台技术
能够容器作为集群在分布式环境中运行。
1. 容器编排引擎: 基于容器的应用一般采用微服务架构。在这种架构下,应用被划为不同的组件,并以服务的形式运行在各自的容器中,通过API对外提供服务。为了保证应用的高可用,每个组件都可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。
编排(orchestration): 通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。
docker swarm: Docker开发的容器编排引擎。
kubernetes: Google开发的开元容器编排引擎,同时支持Docker和CoreOS容器。
mesos: 一个通用的集群资源调度平台,mesos和marathon一起提供容器编排引擎功能。
2. 容器管理平台: 架构在容器编排引擎之上的一个更为通用的平台。Rancher,ContainerShip。
3. 基于容器的PaaS: Deis,Flynn,Dokku。
1.3 容器支持技术
用于支持基于容器的基础设施。
1. 容器网络
2. 服务发现
3. 监控
4. 数据管理
5. 日志管理
6. 安全性
2 容器架构
3 镜像
下载镜像 docker pull xx
查看镜像信息 docker images
运行镜像 docker run
Dockerfile是镜像的描述文件,定义了如何构建Docker镜像。
base镜像:
1. 不依赖其他镜像从scratch构建;
2. 其他镜像可以之为基础进行扩展。
所以能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像比如 Ubuntu, Debian, CentOS 等。
Docker镜像采用分层结构,优势:共享资源。
常用操作
$ sudo service docker start
$ docker images //列出镜像
过滤器参数 --filter,简写 - f
当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
微服务架构:是否会成为开发应用系统的主流?容器是这种架构的基石。