容器化运维操作(一)——容器化基本介绍 & Docker基本介绍 & Docker 和虚拟机区别 & Docker的工作原理

容器化运维操作(一)——容器化基本介绍 & Docker基本介绍 & Docker 和虚拟机区别 & Docker的工作原理

5-6 容器化运维操作

日趋复杂的运维开发环境,对虚拟服务器及应用服务的要求更加的多元化。我们需要更加容易扩展、性能优越、方便监控的管理服务,容器化应用、容器化运维应运而生。

【知己知彼】你将在学习本课程中学习到:

  1. 理解/安装docker容器技术
  2. 秒级快速部署mysql、nginx、tomcat等服务
  3. 使用容器技术发布nodejs应用

【工欲善其事,必先利其器】你需要准备的环境(三选一):

  • Linux环境(Centos 7以上/Debian 8以上/Ubuntu 16.04LTS以上版本)
  • Windows 64位专业版/企业版/教育版(Build 15063以上)
  • macOS Sierra 10.12以上的版本

如果,你有了上面的环境,就可以很快速的跟着我们的内容快速学习。

容器和Docker

什么是容器化?

容器化是将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像的一种软件开发方法。

容器化运维操作(一)——容器化基本介绍 & Docker基本介绍 & Docker 和虚拟机区别 & Docker的工作原理_第1张图片

软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。 按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。

容器化应用程序在容器主机上运行,而容器主机在 OS(Linux 或 Windows)上运行。因此,容器的占用比虚拟机 (VM) 映像小得多。

容器化的特点:

  • 一致的运行环境
  • 可伸缩性
  • 更方便的移植
  • 隔离性

什么是Docker?

Docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可适用于自动化测试、打包,持续集成和发布应用程序等场景,包括阿里云,亚马逊在内的云计算服务商都采用了docker来打造serverless服务平台。它不仅仅可以部署项目,还可以用于数据库搭建,nginx服务搭建,nodejs、php等编程语言环境搭建。

PS: docker现已改名为moby

Docker中的三个重要概念

  • 镜像(image):分片的(只读)文件系统,由Dockerfile创建

    独立、易扩展、更效率

  • 容器(container):由Docker进程创建和管理的:文件系统 + 系统资源 + 网络配置 + 日志管理

    docker是docker镜像的运行环境,所以容器的概念就比较好理解了

  • 仓库(registry):用来远端存储docker镜像

    版本控制、变更管理、为持续集成与快速部署提供便利

Docker vs 虚拟机

容器化运维操作(一)——容器化基本介绍 & Docker基本介绍 & Docker 和虚拟机区别 & Docker的工作原理_第2张图片

  1. 容器是应用层的抽象,它将代码和依赖关系打包在一起。 多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。 容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。
  2. 虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。 管理程序允许多台VM在单台机器上运行。 每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库 - 占用数十GB。 虚拟机也可能很慢启动。

总结一下:

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个
开发/环境定制 方便(命令行、面向对象式) 进入虚拟机

相同点:

  1. 文件隔离/文件共享(沙箱)
  2. 资源隔离
  3. 网络隔离
  4. 支持多种宿主环境(扩展)
  5. 快照/镜像(版本控制/变更管理)

不同点:

  1. 不同的资源管理/依赖//释放(虚拟机占用更多的系统资源)
  2. 不同的应用运行环境
  3. Docker是写时复制
  4. 不同的日志方式(Docker收集日志,而虚拟机需要在虚拟系统里面看日志)
  5. 不同的交互方式(Docker偏shell,虚拟机偏GUI)

Docker的工作原理(重点)

容器化运维操作(一)——容器化基本介绍 & Docker基本介绍 & Docker 和虚拟机区别 & Docker的工作原理_第3张图片

Docker是容器化部署技术,它主要作用在于通过运行容器来实现应用部署,而容器基于镜像运行。

简单地说,就是将你的项目和依赖包(基础镜像)打成一个带有启动指令的项目镜像,然后在服务器创建一个容器,让镜像在容器内运行,从而实现项目的部署。

服务器就是容器的宿主机,docker容器与宿主机之间是相互隔离的。

Docker 的基础是Linux容器(LXC:Linux Containers)等技术。

一般情况下:

Linux(服务器) -> tomcat安装 -> Java依赖 -> maven依赖 ->放置在/usr/lib目录 -> 配置tomcat端口/目录 -> 运行tomcat中的startup.sh脚本 -> 配置网络、防火墙等(后续) -> 服务启动

Docker:

使用基于java的tomcat镜像 -> docker run -> 指定端口/挂载webapp目录 -> 服务启动

这其中,发生了什么?

  1. Docker会自己拉取镜像,若本地已经存在该镜像,则不用到网上去拉取

  2. 创建新的容器

  3. 分配文件系统并且挂着一个可读写的层,任何修改容器的操作都会被记录在这个读写层上,你可以保存这些修改成新的镜像,也可以选择不保存,那么下次运行改镜像的时候所有修改操作都会被消除

  4. 分配网络\桥接接口,创建一个允许容器与本地主机通信的网络接口

  5. 设置ip地址,从池中寻找一个可用的ip地址附加到容器上,换句话说,localhost并不能访问到容器

  6. 运行你指定的程序

  7. 捕获并且提供应用输出,包括输入、输出、报错信息

Docker的价值:

从应用架构角度:统一复杂的构建环境;

从应用部署角度:解决依赖不同、构建麻烦的问题,结合自动化工具(如jenkins)提高效率。

从集群管理角度:规范的服务调度服务发现负载均衡

你可能感兴趣的:(架构和运维,前端,docker)