什么是docker,docker办理了什么题目

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
什么是docker,docker办理了什么题目

用docker可以办理什么题目

在一样寻常开发中,我们大概常常面对如许的题目

  • 情况划一性题目,同一个步伐,大概在开发情况能运行,但是到测试、生产情况就会遇到各种各样的题目,这是由于步伐的正常运行必要精确的库和设置,不肯定每个服务器都能同一设置。
  • 可移植性差,好比我们在A服务器(Ubuntu体系)上摆设了一个应用步伐,假如要迁移到B服务器(Centos体系),由于利用体系的差别,则摆设步伐的脚本要重新适配。好比Ubuntu体系安装jdk的下令是sudo apt install openjdk-11-jdk,centos就是sudo yum install java-11-openjdk-devel。
  • 库和依赖的辩论,同一个服务器上,摆设多个步伐,大概步伐A依赖python2.x版本的库,而步伐B依赖python3.x的库,导致两个步伐依赖发生辩论,产生一些不可预估的错误。
  • 步伐之间相互影响,同一个服务器上,摆设多个步伐,假如步伐A发生故障,耗尽了服务器资源,则步伐B也会受到影响。
针对以上题目,我们的办理方案大概有:

  • 一个服务器摆设一个步伐,可以办理上述3、4的题目,但是缺点是本钱太。
  • 通过假造化技能在宿主机上假造多个vm,每个vm摆设一个步伐,也可以办理肯定的题目,但是缺点是假造机技能必要通过 假造化管理步伐(Hypervisor) 对盘算机底层硬件做假造化,而且每个vm都有单独的利用体系,内核,硬件驱动步伐,仅为了隔离单个应用步伐而启动 VM 会带来很大的开销。

针对以上的题目,docker应用而生,docker也是一种假造化技能,但是不对底层硬件做假造化,也不消假造化整个利用体系,而是只假造一个容器,这个容器只包罗应用步伐所必要库和设置。它运行在宿主机利用体系的用户空间中,作为一个独立的进程存在,然后通过定名空间(Namespace) 技能隔离各个容器的进程,确保它们互不干扰,同时使用控制组(cgroups) 来限定和监控监控容器的资源使用情况,包罗 CPU、内存、块 I/O 等,确保每个容器在资源使用上的隔离与管理。

我们在来总结一些docker的上风吧:

  • 轻量级:docker 容器与传统假造机相比,启动速率更快,资源占用更少,由于容器共享宿主利用体系的内核,而不必要运行完备的利用体系。
  • 快速摆设与弹性扩展:docker容器可移植性好,提供了快速构建、摆设和扩展应用的本领,使得在必要时可以快速启动新的容器实例。
  • 简化的一连集成和一连交付(CI/CD):docker 可以很容易地与 CI/CD 工具集成,简化应用的构建和摆设流程。好比我们有一个开发中的应用步伐,当我们在本地测试完毕后,可以推送代码到Git堆栈,然后触发CI工具(Jenkins等),CI工具就可pull到最新的代码,使用 Dockerfile 文件构建应用步伐的 docker 镜像,并触发单元测试和集成测试。假如测试通过,CI 工具就会将构建好的 docker 镜像推送到 docker 镜像堆栈,接下来,可以使用 CD 工具(如 Kubernetes、docker Swarm 或其他容器编排工具)主动摆设新镜像到生产情况。在生产情况中,CD 工具会拉取最新的 docker 镜像并更换掉现有的应用实例,确保新版本的应用顺遂上线。这是假造机做不到的。
明白docker的几个概念

容器(container)

什么是容器,就是用来存储物品的储存器,那么docker容器也是一样的,只不外docker容器存储的是应用步伐运行所必要的全部库、依赖、设置。体如今我们的利用体系里,是一个独立的的进程。容器有以下特点:

  • 自包罗,容器包罗运行必要的统统情况和设置,不依赖宿主机。
  • 隔离的,容器独立运行,多个容器是相互隔离的,对其他容器和宿主机没有影响,安全性有保障。
  • 独立,删除一个容器不影响其他容器。
  • 可移植,由于容器内包罗了运行应用所需的全部依赖,可以在任何支持 docker 的平台上运行同一个容器。
容器镜像(image)

我们说容器是一个隔离的进程,那么在这个进程内怎样获取文件和设置,我们又怎样将这个体现为进程的容器移植大概分享呢。镜像的概念就有了,我们可以将容器打包成一个镜像,这个镜像是一个静态的快照,此中包罗容器运行必要的全部文件、库、设置。然后将镜像分发给必要的开发职员,其他开发职员在得到镜像后,就可以通过docker run在他们得呆板上启动一个新的docker容器实例。镜像有以下特点:

  • docker 镜像由多个层构成,每一层都是只读的,这些层在镜像创建时就已经固定,无法在运行时举行修改。
  • 通过镜像启动一个容器时,docker 会在镜像的最上面创建一个新的可写层。全部对容器的修改(如创建文件、修改文件、安装软件等)都会在这个可写层中举行,而原始的镜像层保持稳固。

注册表(registry)

注册表类似于Github,Github用来存储代码,开发者A写完代码可以通过git push推动到代码堆栈,开发者B可以通过git pull来获取到A提交得最新代码。注册表也是一样的,它可以会合存储和管理容器镜像,开发职员可以通过docker pull <image_name>从注册表下载镜像,可以通过docker push image_name将本地的镜像上传到注册表。docker官方提供了一个公共的注册表,我们也可以搭建私有化的注册表。
docker compose

通过docker run可以运行单个容器,但是我们建立一个网站大概必要启动MySql、Redis、Nginx、App等多个服务,假如我们将这些全部的内容都放在一个容器内,耦合性太强,并不是一个最佳实践,最好的方案是每个服务都是一个单独的容器,那如今我们就有4个容器,而且这4个容器的启动必要按照肯定的次序(MySql->Rddis->Nginx->App)举行。固然我们可以使用docker run一次启动这多个容器,但是docker compose为我们提供了一种更优雅方便的方案,我们可以将全部的容器和设置界说在一个yaml文件中,然后通过docker compose up来一键启动全部的容器,而且其他开发者也可以根据这个yaml来启动和运行。这是一个docker官网给出的示例yaml:
  1. services:
  2.   app:
  3.     image: node:18-alpine
  4.     command: sh -c "yarn install && yarn run dev"
  5.     ports:
  6.       - 127.0.0.1:3000:3000
  7.     working_dir: /app
  8.     volumes:
  9.       - ./:/app
  10.     environment:
  11.       MYSQL_HOST: mysql
  12.       MYSQL_USER: root
  13.       MYSQL_PASSWORD: secret
  14.       MYSQL_DB: todos
  15.   mysql:
  16.     image: mysql:8.0
  17.     volumes:
  18.       - todo-mysql-data:/var/lib/mysql
  19.     environment:
  20.       MYSQL_ROOT_PASSWORD: secret
  21.       MYSQL_DATABASE: todos
  22. volumes:
  23.   todo-mysql-data:
复制代码
docker根本架构

docker 使用客户端-服务端架构。紧张有客户端(docker clinet)、保卫进程(docker daemon)、镜像、容器、注册表等组件。docker 客户端和保卫进程可以在同一体系上运行,毗连到长途 docker 保卫进程,docker 客户端和保卫步伐使用 REST API、UNIX 套接字或网络接口举行通讯。

  • 客户端(docker clinet):通过下令行接口(CLI)与 保卫进程通讯。用户在下令行输入的指令会被发送到保卫进程,保卫进程举行下令的剖析和处理惩罚
  • 保卫进程(docker daemon):监听客户端的哀求并处理惩罚,管理docker对象,比方容器的创建、删除、克制、启动,从注册表拉取镜像、将本地镜像推送到注册表,构建镜像,网络管理、存储管理、资源分配


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表