Docker-容器相关核心技术
容器技术除了的docker之外,还有coreOS的rkt,还有阿里的Pouch,为了保证容器生态的标准性和健康可持续发展,包括Linux 基金会、Docker、微软、红帽谷歌和、IBM、等公司在2015年6月共同成立了一个叫open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前OCI一共发布了两个规范,分别是runtime spec和 image format spec,有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。
容器runtimeruntime是真正运行容器的地方,因此为了运行不同的容器runtime需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境
目前主流的三种runtime:
Lxc:linux上早期的runtime,Docker早期就是采用lxc作为runtime
runc:目前Docker默认的runtime,runc遵守OCI规范,因此可以兼容lxc
rkt:是CoreOS开发的容器runtime,也符合OCI规范,所以使用rktruntime也可以运行Docker容器
范例:
[root@ubuntu1804 ~]#docker info Client: Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 1 Server Version: 19.03.5 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc #runtime Init Binary: docker-init containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 init version: fec3683 Security Options: apparmor seccomp Profile: default Kernel Version: 4.15.0-29-generic Operating System: Ubuntu 18.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 962MiB Name: ubuntu1804.magedu.org ID: G2JQ:M4DG:CW74:EETR:GU5U:OROC:ZN2F:RKSA:YQY2:XJYX:OHG7:SSVE Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: No swap limit support容器管理工具
管理工具连接runtime与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给runtime执行。
.lxc是lxd的管理工具
.Runc的管理工具是docker engine,docker engine包含后台deamon和cli两部分,大家经常提到的Docker就是指的docker engine
.Rkt的管理工具是rkt cli
范例:查看docker engine
[root@ubuntu1804 ~]#docker version Client: Docker Engine - Community Version: 19.03.5 API version: 1.40 Go version: go1.12.12 Git commit: 633a0ea838 Built: Wed Nov 13 07:29:52 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.5 API version: 1.40 (minimum version 1.12) Go version: go1.12.12 Git commit: 633a0ea838 Built: Wed Nov 13 07:28:22 2019 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683 [root@ubuntu1804 ~]#容器定义工具
容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
Docker image:是docker 容器的模板,runtime依据docker image创建容器
Dockerfile:包含N个命令的文本文件,通过dockerfile创建出docker image
ACI(App container image):与docker image类似,是CoreOS开发的rkt容器的镜像格式
镜像仓库 Registry统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库
.Docker hub:docker官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用
.阿里云,网易等第三方镜像仓库
.Image registry:docker 官方提供的私有仓库部署工具,无web管理界面,目前使用较少
.Harbor:vmware 提供的自带web界面自带认证功能的镜像仓库,目前有很多公司使用
范例:镜像地址格式
172.18.200.101/project/centos:7.2.1511 172.18.200.101/project/centos: latest 172.18.200.101/project/java-7.0.59:v1 172.18.200.101/project/java-7.0.59:v2
当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎
容器编排通常包括容器管理、调度、集群定义和服务发现等功能
.Docker swarm:docker 开发的容器编排引擎
.Kubernetes:google领导开发的容器编排引擎,内部项目为Borg,且其同时支持docker和CoreOS
.Mesos+Marathon:Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。通用的集群组员调度平台,mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引擎功能
docker(容器)的依赖技术容器网络:
docker自带的网络docker network仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如calico、flannel等
服务发现:
容器的动态扩容特性决定了容器IP也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes自带服务发现功能,需要结合kube-dns服务解析内部域名
容器监控:
可以通过原生命令docker ps/top/stats 查看容器运行状态,另外也可以使Prometheus 、heapster等第三方监控工具监控容器的运行状态
数据管理:
容器的动态迁移会导致其在不同的Host之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决
日志收集:
docker 原生的日志查看工具docker logs,但是容器内部的日志需要通过ELK等专门的日志收集分析和展示工具进行处理
本文链接:http://www.yunweipai.com/34755.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52641.html
apachecentosDockergooglejavaKuberneteslinuxUbuntu开源微软相关文章
- 关于docker容器启动后修改或添加端口
- 【重识云原生】第六章容器6.1.6节—— Docker核心技术Chroot
- 卸载docker命令_删除docker0虚拟网卡
- docker卸载命令_docker删除文件
- 【elasticsearch】docker下elasticsearch集群和分片
- Docker安装MongoDB并使用Navicat连接
- Docker查看容器命令(docker ps)
- Docker关闭容器命令(docker stop)
- 【Docker 系列】docker 学习 四,镜像相关原理
- 【Docker 系列】docker 学习 五,容器数据卷
- 【Docker 系列】docker 学习六,探究一下数据卷容器
- docker 从容器创建新镜像,及镜像的备份和恢复
- 为Docker容器中的服务配置固定容器IP教程
- Docker(二)——镜像与容器的理解
- 部署基于Docker容器实现Redis服务部署(dockerredis)
- Docker 1.11 采纳了开源容器项目(OCP)组件
- docker managed volume – 每天5分钟玩转 Docker 容器技术(40)
- 容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
- Red Hat 的去 Docker 化容器实践
- 的docker容器创建并使用Docker容器启动Redis数据库(创建并启动名为redis)