云原生
云原生(Cloud Native)是一套技术体系和方法论。云(Cloud)表示应用程序位于云中,而不是传统的数据中心;原生(Native)表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳状态运行,充分利用和发挥云平台的弹性和分布式优势。
云原生的代表技术包括容器、服务网格(Service Mesh)、微服务(Microservice)、不可变基础设施和声明式API。
镜像
镜像就是打包的、分层的文件系统,image 是二进制文件
docker基础镜像:如nginx、tomcat可制作成基础镜像
docker系统镜像:如ubuntu、centos,跑起来就是一个精简版操作系统,俗称胖容器
开发:标准镜像—构建/打包—>业务镜像—PUSH—>镜像仓库
运维:镜像仓库—->自动部署—->编排服务
容器
镜像run起来就是一个容器,容器的实质是进程,运行在属于自己的“命名空间”,即独立的namespaces
一个镜像可以启动(run)N个容器
一台主机可以同时运行几千个Docker容器
通常一个业务系统应拆分成2~3个容器:数据存储容器+应用程序容器+(缓存容器)
1 | #从镜像仓库拉取镜像到本地 |
Kubernetes
K8s容器集群管理系统:启动容器,自动化部署、扩展和管理容器,回收容器。
K8S负责管理容器跑在哪个机器上,监控容器的存在,控制容器与外界通讯。
Docker:创建容器
K8S:编排容器
一般不会把整个应用及其依赖的服务打到一个镜像,用一个容器来跑。常见的做法是database和webserver用独立的镜像,独立的容器来跑,然后用docker-compose或者k8s之类的工具将一批容器组织成一个应用单元
Pod:容器集合,调度的基本单元
Node:物理节点
service:pod的访问代理抽象,一个service可映射N个pod
不要在单个容器里面运行多个进程
不要把认证口令存在镜像中,用环境变量比较好
不要将数据储存在容器中,容器销毁了里面的数据也没了,要将数据写入volumes
Q&A
Q:一个容器,一个镜像,谁的概念大?
A:镜像和容器的关系,类似“类”和“实例”,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等
Q:Dockerfile是干啥用的?
A:是个文本文件,用来清晰的记录镜像的构建过程,即在基础镜像之上,执行哪些命令才能制作成你的镜像
Q:制作自己的镜像,有哪些方法?
A:
1、通过创建Dockerfile,执行docker build命令自动编译生成镜像,✲推荐✲
2、通过run一个镜像,在这个容器内敲些命令、操作,最后执行docker commit命令提交,打包生成镜像(俗称黑箱镜像,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知)
Q:war、jar包会打包进基础镜像中吗?还是制作成一个单独的镜像?
A:编写Dockerfile,jar包直接部署在Docker中,而war包需要先部署在Tomcat基础镜像中再部署在Docker中
A:构建时打包进基础镜像中,生成自己系统的最终镜像