容器
简单来说,容器主要做了两件事情:
- 容纳了微服务或软件
- 提供了微服务或软件所需的依赖(dependencies)和配置(config)
容器(Container)是镜像(Image)的实例。为方便理解,可以用以下的三对概念做类比:
Docker
⚠️容器(Container)是概念,而Docker是实现该概念的工具。如果这是你第一次听说Docker,那么我们用灵魂三连问来学习下:
DevOps灵魂三连问:
- 所属概念?容器(Container)
- 概念的目的?封装应用程序,以及程序所需的完整的运行环境(依赖和设置等)
- 工具是如何实现所属概念的?Docker公司的Docker是一组平台即服务 (PaaS) 产品,使用容器进行应用程序交付。这是实现容器化的其中一种工具而已!!
如何用Docker创建容器
Docker提供了一个包含了超多镜像的数据库DockerHub。大多数容器所需的镜像都能在DockerHub找到。
- 下载镜像:以
mysql
镜像为例,细节页中可以看到从DockerHub下载该镜像的使用方法:
docker pull mysql
- 从镜像创建容器:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
容器管理系统
Kubernetes(k8s)和OpenShift(OC)都是用于自动部署、扩展和管理“容器化应用程序”的系统。比如下面的示意图中,Cluster上(k8s或者oc的)
k8s vs OC
Redhat公司发布的OpenShift是基于Kubernetes的付费产品,所以OC更稳定,安全,并提供一些额外功能。
性质 | k8s | oc |
---|---|---|
性质 | 开源产品 | Redhat公司提供的付费产品 |
安全性 | - 基于角色的访问控制 (RBAC) | - 基于角色的访问控制 (RBAC) - 安全上下文约束 (SCC) |
网络用户界面 | 需要自己安装一个k8s Dashboard | 自带网页用户界面 |
部署方法 | 使用Deployment对象 | 使用DeploymentConfig对象 |
CI/CD | 没有提供官方的创建CI/CD管道的办法 | 提供官方的Jenkins CI/CD管道 |
集成镜像数据库 | 无 | 有 |
容器&容器管理系统
示例图中,一个k8s/oc的cluster上有几个node,每个node中可以容纳一个或多个Pod,每个Pod中可以容纳一个或多国容器,每个容器可以使用不同的镜像。
比如最最右边的node中,包含三个Pod,每个Pod中都包含一个容器,这些容器分别使用了nginx,mysql和node的镜像。我们可以用node的容器跑一个reactJS的电商网站,nginx跑一个strapi的写Dashboard给商家管理商品和库存,从而向mysql的容器中包含的数据库进行写入。