Docker学习(1)Docker的基本概念详解

目录

1.容器是什么

1.1 容器的基本概念

1.2  容器的优势

2.Docker是什么

2.1 Docker是什么

2.2 Docker的发展历程

2.3 Docker的设计理念

2.4 虚拟机 VS 容器 

3.Docker能做什么

4.Docker的核心概念

4.1 镜像(Image)

4.2 容器(Container)

4.3 仓库(Registry)

4.4 Docker架构

5.其他容器化实现


1.容器是什么

Docker是一个容器引擎,是容器化的一种实现,学习Docker首先要学习一下容器是什么。

1.1 容器的基本概念

容器是一种虚拟化技术,通过在操作系统级别对应用及其依赖进行封装,使其能够在不同的环境中运行。每个容器都包含了应用运行所需的所有组件:代码、运行时、系统工具、系统库等。

简单来说:容器就是将应用程序及其需要的依赖项封装成一个独立,可移植环的标准单元。

根据上图可以看出来容器需要与主机共享操作系统的内核,并不是独立完整的操作系统,因此容器比虚拟化更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快,具体的差异我们会在2.3节中进行详细的对比。

1.2  容器的优势

容器化带来了诸多优势,包括:

  • 轻量级:容器共享主机内核,因此比传统虚拟机更轻量。
  • 快速部署:容器可以快速启动、停止和重启,提高了开发和部署的效率。
  • 隔离性:容器将应用程序隔离在独立的环境中,确保了应用程序之间的互不干扰和安全性。
  • 一致性:容器在不同环境中运行时,确保了应用及其依赖的一致性,消除了“在我的机器上可以工作”的问题。
  • 弹性:容器可以根据负载需求进行自动伸缩,提高了系统的弹性和稳定性。
  • 自动化:容器技术提供了自动化的部署、配置和管理工具,简化了应用程序的开发和运维过程。

2.Docker是什么

基于对容器的概念有了一定的了解后,接下来开始学习Docker到底是什么。

2.1 Docker是什么

Docker 是一个开源的容器化技术,使用 Go 语言编写,遵循 Apache 2.0 协议。它提供了一种简单的方式来打包、分发和运行应用程序,而无需关心底层的基础设施。Docker 的核心是一个名为“容器”的运行时环境,它将应用程序及其依赖项封装在一个隔离的环境中,使得应用程序可以在不同的环境中无缝迁移。

以下是 Docker 的几个主要特点:

  • 轻量级:Docker只包含应用程序及其依赖项,不包含操作系统,因此体积小、启动速度快
  • 标准化封装:Docker 使用了一个名为“镜像”的模板来创建容器,使得应用程序的部署和管理更加标准化。
  • 自动化部署:Docker 提供了一组简单的命令和工具,使得开发者可以轻松地将应用程序部署到生产环境。
  • 快速扩展:Docker 可以轻松地横向和纵向扩展应用程序的性能,以满足不同规模的需求。
  • 安全隔离:Docker 提供了隔离的容器环境,确保应用程序之间的互不干扰和安全性。

通过 Docker,开发者可以更加高效地部署和管理应用程序,让开发者将更多的精力放在应用程序本身上。

2.2 Docker的发展历程

  1. Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)
  2. Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目 已经超过 5 万 7 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。
  3. Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。

2.3 Docker的设计理念

        我们可以看到docker的logo 是一个蓝色的鲸鱼,上面托着很多集装箱在运输。其中鲸鱼可看做宿主机,集装箱可理解为相互隔离的容器,每个集装箱都包含了自己的应用程序。这个logo就体现了Docker的设计理念Build,Ship and Run any App,Angwhere

        即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

2.4 虚拟机 VS 容器 

(1)架构差异

虚拟机运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多;

容器内的应用进程直接运行于Linux本机,容器内没有自己的内核,与其他容器共享主机内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便;

(2) 其他特性对比

特性容器虚拟机
启动速度秒级(进程控制)分钟级(客户机操作系统管理)
性能损耗接近原生弱于
磁盘占用镜像为MB级别镜像为GB级别
系统支持量单机支持上千(进程)一般为几十台(操作系统级别)
隔离性进程隔离系统隔离
封装程度只打包应用程序和依赖,共享主机内核完整操作系统,与主机隔离

总结来说,

容器将一个应用程序和所依赖的资源打包在一起,多个容器在同一主机上运行,共享操作系统,但属于各个独立的进程,镜像一般只有几十兆,启动会非常迅速。

虚拟机是基于宿主机上再建立一台客户机,是拥有完整操作系统的,是将一台服务器扩展为多个服务器,镜像需要包含完整的操作系统,因此是GB级,启动也是系统级的启动,会相对比较缓慢。

3.Docker能做什么

Docker可以用于以下场景:

  • 自动化部署:Docker可以自动化应用程序的部署过程,使得应用程序可以在不同的环境之间快速、一致地部署。
  • 弹性伸缩:通过Docker,可以轻松地扩展应用程序的性能,根据需求进行横向扩展和纵向扩展。
  • 持续集成和持续部署:Docker可以简化持续集成和持续部署的过程,使得开发和运维团队可以更加高效地协作。
  • 微服务架构:Docker可以帮助实现微服务架构,将应用程序拆分成多个独立的服务,每个服务运行在独立的容器中。
  • 多租户隔离:通过Docker,可以实现多租户隔离,确保不同用户的应用程序在共享计算资源时互不干扰。
  • 云原生应用:Docker是云原生应用的重要组成部分,它使得应用程序更加适应云计算环境,提高了应用程序的可移植性和可靠性。

4.Docker的核心概念

4.1 镜像(Image)

用于创建Docker容器的模板,它包含了应用程序及其依赖项。Docker镜像可以通过Dockerfile进行构建,并可以共享和分发。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

4.2 容器(Container)

容器是Docker的基本运行单元,它基于Docker镜像创建。每个容器都是一个独立的运行环境,包含了应用程序的运行所需的一切。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。

4.3 仓库(Registry)

仓库用于存储和分发Docker镜像。

  • 公有仓库:Docker Hub是一个公共的Docker仓库,供开发者上传和下载镜像。在国内访问Docker Hub 可能会比较慢,国内也有一些服务商提供公开服务,比如阿里云等。
  • 私有仓库:除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。

4.4 Docker架构

        了解了Docker的三个基本概念,下面来看Docker的架构图,来看一下Docker利用这三个核心是怎么运作的。

Docker的运作的基本流程为:

  1. 用户使用Docker Client 与Docker Daemon建立通信,并发送请求给后者。
  2. Docker Daemon 作为Docker架构中的主体,首先提供Docker Server的功能使其可以接收Docker Client 的请求。
  3. Docker Engine 执行Docker 内部的一系列工作,每一项工作都是以一个Job的形式存在。
  4. Job的运行过程中,当需要容器镜像时,从Docker Registry中下载镜像,并通过镜像驱动管理将下载的镜像以Graph的形式存储。
  5. 当需要为 Docker 创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker 容器网络环境。
  6. 当需要限制 Docker容器运行资源或执行用户指令等操作时,则通过 Exec driver 来完成。
  7. Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

5.其他容器化实现

除了Docker外,还有其他容器化实现,例如:

  • Kubernetes:一个用于自动部署、扩展和管理容器化应用程序的开源系统。
  • Podman:一个基于libpod的容器引擎,兼容Docker CLI,并支持Rootless模式。
  • rkt(Rocket):由CoreOS开发的容器运行时,专注于安全和简洁性。
  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值