【云驻共创】华为云大咖带你玩转云原生基础设施之容器技术
一、容器是什么
- 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。
- 开发人员在自己开发环境创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
- 如下图所示,容器就像左图中的集装箱一样,我们不需要去关心容器里的内容,它就是一种标准的运输方式。
二、容器关键技术介绍
2.1容器与虚拟机
容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。
如左图所示,虚拟机主要是通过Hypervisor层来建立一个区别于主机操作系统之外的一个Guest OS,它可以根据需求装载一个完整的操作系统,而容器没有虚拟机的Hypervisor层,Hypervisor层的主要作用是用来隔离或管理物理机中的资源,比如CPU、GPU、内存、硬盘等,这些由Hypervisor层进行分配,同时Guest OS在容器中也消失了,应用运行时直接调用Operating System的共用内核来抵消容器没有Guest OS对应用运行的影响。容器和虚拟机相比,容器多了一个Docker,Docker是容器中的一个进程,它的作用就是辅助容器管理。
2.2容器规范
容器不光是Docker,还有其他容器,比如CoreOS的rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含Docker、CoreOS、Google在内的若干公司共同成立了一个叫Open Container Initiative ( OCI )的组织,其目是制定开放的容器规范。容器的规范主要分为两方面:一个是容器打包规范,一个是容器运行规范,这也是Open Container Initiative ( OCI )的主要内容。
OCI容器规范主要包括两部分内容:一个是runtime spec,它的作用是保证容器的可移植性,保证容器在任何地方都可以进行运行,另一个是image format spec,它的作用是保证容器的可操作性。OCI容器规范主要是以Docker的规范来制定的。
2.3容器runtime
- runtime与操作系统kernel紧密协作,为容器提供运行环境。
- 常见的容器runtime有很多种,但是我们平常使用较多的是Docker :
1)runC是Docker公司2015年发布的容器runtime工具,符合OCI规范。runC是由Libcontainer演变而来。
2)rkt ,是CoreOS公司开发的Docker / runc的一个流行替代方案,符合OCI规范。
3)Kata ,2017年整合Clear Container和runV项目,基于虚拟化技术的容器实现,符合OCI规范。
4)gVisor ,2018年Google公司发布gVisor的项目,基于虚拟化技术的容器实现,符合OCI规范。
2.4 Docker Engine
Docker Engine主要分为三层,分别是server、REST API、Client。server也叫docker daemon,它是长期运行的程序,大部分的容器开启或者存储都会用到server,它是容器中比较重要的部分,它的作用是创建和管理容器的对象,比如容器的镜像、容器本身、网络等;第二层REST API,它的作用是Client和server的交互;第三层Client(也叫docker CLI)它是用户进行直接交互的地方,用户会发起命令,然后Client通过REST API和server进行交互。
2.5 Docker架构
如上图所示,主要有Client、docker daemon、Registry三部分,docker daemon位于DOCKER_HOST主机上,Registry的意思是远程仓库。那么它们是如何工作的呢,例如Client里我们执行docker build生成一个镜像,我们通过docker daemon知道需要ubuntu的镜像来创建容器,我们首先会在自己的镜像仓库里寻找,如果仓库里有ubuntu的镜像,那么就可以直接以容器的方式开启,如果我们没有在自己的镜像仓库里找到这个镜像,我们就会通过网络在远程仓库里进行拉取,下载回主机当中,然后就可以开启容器。docker daemon在容器中是很重要的,它除了上面提及的下载镜像、开启容器功能之外还有存储和网络功能。
2.6 Docker 容器实现原理
Docker容器通过namespace技术实现进程隔离,通过cgroup技术实现容器进程可用资源的限制。Docker启动一个容器时,实际是创建了包含多个namespace参数的进程。
2.7容器镜像
- 容器镜像是容器的模板,容器是镜像的运行实例,runtime根据容器镜像创建容器。
- 容器镜像挂载在容器根目录下,为容器中的应用提供执行环境的文件系统。
容器镜像打包了整个操作系统的文件和目录(rootfs ),也包括应用本身。即应用及其运行所需的所有依赖都被封装在容器镜像中。
- 容器镜像采用分层结构:
所有容器共享宿主机Kernel,并且不能修改宿主机Kernel。即容器运行过程中使用容器镜像中的文件,使用宿主机OS上的Kernel。
2.8 Registry
- Registry是存放容器镜像的仓库,用户可进行镜像下载和访问,分为公有和私有两类Registry。
- 公有镜像仓库:
Docker Hub 是Docker公司为公众提供的托管Registry。
Quay . io现为Red Hat下的公共托管Registry。
- 私有镜像仓库:
企业可以用Docker Registry构建私有的Registry。
Registry本身是一个开源项目,可以用于搭建私有Registry。
三、使用Dockerfile构建镜像
3.1如何构建镜像
Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
下图是一个简单的Dockerfile
3.2搭建私有Registry示例(1)
- 使用“registry”镜像构建本地镜像仓库。registry是docker hub上维护的镜像,其服务端口是5000。- V参数将宿主机的/root / myregistry目录映射到容器的/var / lib / regisgtry目录,用于存放镜像数据。
- 使用dockertag命令修改镜像名称,使其符合registry上的格式要求。若要将镜像上传到registry ,镜像名称需要符合其命名格式要求:[ Registry - host ]:[ port ]/[ username ]/[ repository : tag]。
- 上传容器镜像到私有Registry。
3.3搭建私有 Registry 示例(2)
在Linux下,若使用如“192.168.137.99:1000”这样的内网地址作为私有仓库地址,则需要在/etc / docker / daemon . json 中写入如下内容(如果文件不存在需新建该文件),然后重启Docker服务。
四、容器生命周期管理
- Docker run
以镜像开启容器,运行容器
- Docker images
列出所有的镜像,提示镜像的名称、号码、版本等
- Docker ps (- a )
展现整个容器
- Docker stop Docker start
停止和开启容器
- Docker pause
暂停容器
- Docker unpause
重新开启容器
- Docker rm
删除容器
- Docker attach or Docker exec
进入容器
五、华为云云原生入门级开发者认证介绍
5.1华为云开发者认证
云是ICT产业的未来,也是企业数字化转型的底座,开发者是产业发展的灵魂,是业务创新的源头,是技术发展的引领者。为了更好地服务千万开发者,华为云推出开发者认证,真正让开发者在云上作业,懂开发会开发,与开发者共成长。
5.2华为云开发者认证框架
华为云开发者认证体系,贴合数字产业生态战略,在云原生、人工智能、大数据、物联网、区块链、移动开发、数据库等技术领域建立赋能体系及认证标准,与人社部、工信部颁布的新兴职业能力标准相匹配,提供清晰的开发者成长路径。
5.3华为云云原生入门级开发者认证内容
5.4华为云云原生入门级开发者认证知识图谱
本文整理自华为云社区【内容共创】活动第15期。
- 点赞
- 收藏
- 关注作者
评论(0)