ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker

2022-01-03 16:33:10  阅读:195  来源: 互联网

标签:容器 镜像 docker runtime Docker 运行


docker-容器技术的介绍

docker官方文档

一)、 Docker官方说明:

  • Build(构建):
    • 通过利用 Docker 映像在 Windows 和 Mac 上高效开发您自己独特的应用程序,在编码方面取得领先。使用 Docker Compose 创建多容器应用程序。
    • 在整个开发流程中与您最喜欢的工具集成 - Docker 可与您使用的所有开发工具配合使用,包括 VS Code、CircleCI 和 GitHub。
    • 将应用程序打包为可移植容器映像,以便在从本地 Kubernetes 到 AWS ECS、Azure ACI、Google GKE 等的任何环境中一致地运行。
  • Share(分享):
    • 利用 Docker 可信内容,包括 Docker 官方镜像和来自 Docker Hub 存储库的 Docker 验证发布者的镜像。
    • 通过与团队成员和其他开发人员协作以及轻松地将图像发布到 Docker Hub 来进行创新。
    • 使用基于角色的访问控制个性化开发人员对图像的访问,并使用 Docker Hub 审计日志深入了解活动历史。
  • Run(运行)
    • 轻松交付多个应用程序,并让它们在您的所有环境中以相同的方式运行,包括设计、测试、登台和生产 - 桌面或云原生。
    • 在不同的容器中以不同的语言独立部署您的应用程序。降低语言、库或框架之间发生冲突的风险。
    • 借助 Docker Compose CLI 的简单性和一个​​命令,使用 AWS ECS 和 Azure ACI 在本地和云上启动您的应用程序,从而加快开发速度。

1.1 docker的组成与对比:

  • Docker 主机(host):一个物理机或虚拟机,用于运行Docker服务进程和容器。
  • Docker 服务端(Server):Docker守护进程,运行docker容器。
  • Docker 客户端(Client):客户端使用Docker命令或其他工具调用Docker Api。
  • Docker 仓库(Registry):保存镜像的仓库,类似于git或svn这样的版本工具。
  • Docker 镜像(Images):镜像是从镜像生成对外提供服务的一个或一组服务。

1.2 官方仓库:https://hub.docker.com/

1.3 容器优缺点:

  • 优点:
    • 1.快速部署:短时间内可以部署成百上千个应用,更快速交付到线上
    • 2.高效虚拟机:不需要额外的hypervisor支持,直接基于linux实现应用虚拟化,相比虚拟机大幅提高性能和效率
    • 3.节省开支:提高服务器利用率,降低IT支出。
    • 4.简化配置:将运行环境打包保存至容器,使用时直接启动即可。
    • 5.快速迁移和扩展:可扩平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移到B宿主机,甚至是A平台迁移到B平台。
  • 缺点:
    • 隔离性
    • 安全性

Docker(容器)的核心技术:

  • 容器技术除了docker之外,还有其他不同的容器技术,为了保证容器生态的标准型和健康可持续发展,包括linux基金会、docker、微软、红帽谷歌和、IBM等公司在2015年6月共同成立了一个opencontainer(OCI)的组织,其目的就是制定开放的标准的容器规范,目前OCI发布了runtime spce和image format spec等规范,这样不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。

容器runtime(runtime spec):

  • 目前主流的三种runtime:
    • 1.Lxc:linux上早期的runtime,docker早期就是采用lxc作为runtime。
    • 2.runc:目前docker默认的runtime,runc遵守OCI规范,因为可以兼容lxc。
    • 3.rkt:是core os开发的容器runtime,也符合oci规范,所以使用rktruntime也可以运行docker容器。
  • runtime是真正运行容器的地方,因此为了运行不通的容器runtime需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
  • runtime主要定义了以下规范,并以json格式保存在/run/docker/runtime-runc/moby/容器ID/state.json文件,此文件会根据容器的状态实施更新内容:
    • 版本信息:存放OCI标准的具体版本号。
    • 容器ID:通常是一个哈希值,可以在所有state.json文件中提取出容器ID对容器进行批量操作(关闭、删除等),此文件在容器关闭后会被删除,容器启动后会自动生成。
    • PID:在容器中运行的首个进程在宿主机上的进程号,即将宿主机的那个进程设置为容器的守护进程。
    • 容器文件目录:存放容器rootfs及相应配置的目录,外部程序只需读取state.json就可以定位到宿主机上的容器文件目录。
    • 容器创建:创建包括文件系统、namespaces、cgroup、用户权限在内的各项内容。
    • 容器进程的启动:运行容器启动进程,该文件在/run/containerd/io.containerd.runtime.vl.linx/moby/容器ID/config.json。
    • 容器生命周期:容器进程可以被外部程序关停,runtime规范定义了对容器操作信号的捕获,并做相应资源回收处理,避免僵尸进程的出现。
  • 容器镜像(image format spec):
  • 容器镜像主要包括一下内容:
    • 文件系统:定义以layer保存的文件系统,在镜像里面是layer.tar,每个layer保存了和上层之间变化的部分,image format spec定义了layer应该保存哪些文件,怎么表示增加、修改和删除的文件等操作。
    • manifest文件:描述有哪些layer,tag标签及config文件名称。
    • conifg文件:是一个以hash命名的json文件,保存了镜像平台,容器运行时容器运行时需要的一些信息,比如环境变量、工作目录、命令参数等。
    • index 文件:可选的文件,指定不同平台的manifest文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的manifest文件使用index作为索引。
    • 父镜像:大多数层的云信息结构都包含一个parent字段,指向该镜像的fujingxiang。
  • 参数:
    • ID:镜像ID,每一层都有ID
    • tag标签:标签用于将用户指定的、具有描述性的名称对应到镜像ID
    • 仓库:repository镜像仓库
    • os:定义类型
    • architecture:定义cpu架构
    • author:作者信息
    • create:镜像创建日期
  • 容器管理工具:
  • 管理工具连接runtime与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给runtime执行。
    • lxc是lxd的管理工具
    • runc的管理工具是docker engine,docker engine包含后台deamon和cli令部分,大家经常提到的docker就是指的docker engine
    • rkt的管理工具是rkt cli
  • docker(容器)的依赖技术:
    • 容器网络:docker自带的网络docker network仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如calico、flannel等。
    • 服务发现:容器的动态扩容特性决定了容器ip也会随之变化,因此需要有一种机制可以自动识别并将用户请求动态转发到新创建的容器上,kunernetes自带服务发现功能,需要结合dns服务解析内部域名
    • 容器监控:可以通过源生命令docker ps/top/stats 查看容器运行状态,另外也可以是heapster/ Prometheus等等第三方监控工具监控容器的运行状态
    • 数据管理:容器的动态迁移会导致其在不同的host之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决
    • 日志收集:docker源生的日志查看工具docker logs,但是容器内部的日志需要通过elk等专门的日志收集分析和展示工具进行处理
    • CI/CD:基于jenkins和gitlab的代码实现代码部署和回滚

标签:容器,镜像,docker,runtime,Docker,运行
来源: https://www.cnblogs.com/yaoxinlei/p/15738370.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有