1.初识Docker与容器

发布于:2024-04-16 ⋅ 阅读:(24) ⋅ 点赞:(0)

初识Docker与容器

1、什么是Docker

Docker是基于Go语言实现的开源容器项目。Docker是为解决了运行环境和配置问题的软件容器,方便做持续集成并有助与整体发布的容器虚拟化技术。通过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台。

官网:https://www.docker.com/

仓库:https://hub.docker.com/

Docker架构

Docker使用客户端-服务器架构。Docker客户端与Docker守护进程通信,后者完成构建、运行和分发Docker容器的繁重工作。Docker客户端和守护进程可以运行在同一个系统上,或者您可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API,通过UNIX套接字或网络接口进行通信。另一个Docker客户端是Docker Compose,它允许你处理由一组容器组成的应用程序。

Docker Architecture diagram

  • Docker守护进程

    Docker守护进程(dockerd)监听Docker API请求,管理Docker对象,如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理Docker服务。

  • Docker客户端

    Docker客户端(Docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如docker run之类的命令时,客户端将这些命令发送给dockerd,后者执行这些命令。docker命令使用docker API。Docker客户端可以与多个守护进程通信。

  • Docker registries

    Docker注册表存储Docker镜像。Docker Hub是一个任何人都可以使用的公共注册表,默认情况下Docker会在Docker Hub上查找图像。您甚至可以运行自己的私人注册表。

  • 镜像

    镜像是一个只读模板,带有创建Docker容器的说明。通常,一个映像基于另一个映像,并进行一些额外的定制。

  • 容器

    容器是镜像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,将存储附加到其上,甚至可以根据其当前状态创建新映像。默认情况下,容器相与其他容器及其主机隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。

  • 底层隔离原理

    Docker使用名为名称空间的技术来提供称为容器的隔离工作空间。当你运行一个容器时,Docker会为这个容器创建一组命名空间。

    这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,其访问仅限于该名称空间。

2、为什么使用Docker

Docker容器虚拟化的好处

  • 更快速的交付和部署

    开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后, 测试和运维人员可以直接使用完全相同的环境来部署代码。 只要是开发测试过的代码, 就可以确保在生产环境无缝运行。 Docker 可以快速创建和删除容器, 实现快速迭代, 节约开发、 测试、 部署的大量时间。

  • 更高效的资源利用

    运行Docker 容器不需要额外的虚拟化管理程序(Virtual MachineManager) 的支持,需要从硬件层面实现虚拟化。 Docker 是内核级的虚拟化, 可以直接复用本地主机的操作系统实现更高的性能, 同时对资源的额外需求很低。与传统虚拟机方式相比, Docker 的性能要提高1~2 个数量级。

  • 更轻松的迁移和扩展

    Docker 容器几乎可以在任意的平台上运行,支持主流的操作系统发行版本。

  • 更简单的更新管理

    使用Dockerfile, 只需要小小的配置修改, 就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新, 从而实现自动化并且高效的容器管理。

Docker与虚拟机比较

传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。

Docker容器是在操作系统层面上实现虚拟化直接复用本地主机的操作系统,因此更加轻量级。

每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

对比如下:

  • Docker 容器很快, 启动和停止可以在秒级实现, 这相比传统的虚拟机方式(数分钟)要快得多;
  • Docker 容器对系统资源需求很少, 一台主机上可以同时运行数于个Docker 容器;
  • Docker 通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像, 存储复用, 增量更新;
  • Docker 通过Dockerfile 支持灵活的自动化创建和部署机制, 以提高工作效率, 并标准化流程。
特性 docker 虚拟机
启动速度 秒级 分钟级
内存代价 很小 较多
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量/运行密度 单机支持上千个容器 一般几十个
隔离性 安全隔离 完全隔离
迁移性 优秀 一般

Docker为什么快

  1. docker有着比虚拟机更少的抽象层

    由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

  2. docker利用的是宿主机的内核,而不需要加载操作系统OS内核

    当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。

在这里插入图片描述