第一章 Docker介绍

23 阅读5分钟

第一章 Docker介绍

1. 什么是Docker

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

2. 为什么要使用Docker

在传统应用程序中部署,我们会根据应用程序的类型.会选择特定的操作系统,并安装应用程序所需要的依赖,然后通过手动或者一些部署工具将程序部署到操作系统上,这个方式本没有什么问题,但是随着互联网时代的快速发展,我们的应用程序必须很快的上线,试错,抢占市场,这时候,就需要对我们的应用程序有更高的要求 有时还会因为一些环境依赖出现问题..在容器化时代,我们将不用在考虑这些繁琐的事情,真正实现 "一次打包,到处运行"容器化实际上一种开发方法, 简单的说就是,我们将应用程序打包成一个镜像,然后在 Linux/Windows 系统上,通过容器引擎,根据这个镜像迅速创建一个容器(类似虚拟机)并在容器里部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便.

Docker就是虚拟化的一种轻量级替代技术。Docker的容器技术不依赖任何语言、框架或系统,可以将应用程序变成一种 标准化的、可移植的、自管理的组件,并脱离服务器硬件在任何主流系统中开发、调试和运行.另外基于Docker,我们可以将原本一台机器只能部署一个实例的应用程序,部署多个实例,并且没有系统限制.

Docker包含了两个版本

Docker CE: 社区版本,由社区维护和提供技术支持,为免费版本,适用于个人开发人员与小型团队.

Docker EE:企业版,为收费版本,由售后团队与技术团队提供技术支持,转为企业开发. 相对于CE版本 提供了一些额外的功能,最重要的是技术支持与安全保障.

通常情况,Docker CE版本已经足够满足我们的要求

3. Docker与虚拟机的区别

下图展示了Docker与虚拟机的比较

image-20211230190226668.png

虚拟机包括应用程序,必要的库或二进制文件以及完成的一套操作系统,虚拟机与宿主机进行物理隔离,并且无法通过内部应用程序操作宿主机。与容器相比需要更多的资源。容器包括应用程序以及所有依赖项,但是他们与宿主机共享资源,在宿主机上以一个独立的进程运行,并且容器内部程序可以操作宿主机,与虚拟机相比,只需要少量资源即可。

4. Docker的结构与特性

Docker程序使用Golang语言进行编写,采用C/S架构,包括了Docker ServerDocker Client.Docker本身是一个单机程序,通过一些接口和内核进行交互.由于Docker使用到了Linuxcgroups,namespaces等操作,所以只能安装到linux系统上,当然通过虚拟机技术,在Window和Mac系统上,我们也可以安装Docker.

Docker是一个C/S架构,它的Server端是Docker Daemon,在宿主机上以守护集成的方式运行.Docker Daemon需要随机启动.通常我们操作Docker就是通过Docker Client发送指令到Server端,Docker Daemon守护进程执行指令完毕,返回结果.

下面我们以部署Nginx为例,工作流程大致如下

  1. Docker Client 发送指令到Docker Daemon
  2. Docker Daemon收到指令后,去镜像仓库搜索镜像
  3. Docker Daemon找到指定镜像后,进行下载.
  4. 下载完成后,进行部署镜像

image-20220110210318062.png