【山外笔记-云原生】《Docker+Kubernetes应用开发与快速上云》读书笔记-2020.04.25(六)

书名:Docker+Kubernetes应用开发与快速上云

作者:李文强

出版社:机械工业出版社

出版时间:2020-01

ISBN:9787111643012


[山外笔记-云原生]《Docker_Kubernetes应用开发与快速上云》读书笔记01.pdf

一、山外笔记-前言

1、云原生下的DevOps的解决方案:以Docker为代表的容器技术作为基础保障、以Kubernetes(简称k8s)为代表的容器编排技术作为支撑的解决方案。

2、云原生的实现:以Docker为代表的容器技术+以K8s为代表的容器编排技术+微服务架构

3、本书内容介绍(共11章)

  • 第01章:主要介绍Docker以及容器技术的发展简史。

  • 第02章:主要介绍Docker的市场趋势和主要应用场景。

  • 第03章:主要讲解各个环境下的Docker安装过程。

  • 第04章:主要结合实践示例讲解Docker的一些镜像操作命令和容器操作命令。

  • 第05章:主要围绕Docker应用开发的持续工作流程进行讲解。

  • 第06章:主要讲解如何使用主流的编程语言进行Docker应用开发。

  • 第07章:主要讲述主流的数据库容器化并且侧重讲解容器化之后如何持久保存数据。

  • 第08章:主要讲述Kubernetes的主体架构、核心概念、集群搭建和故障处理。

  • 第09章:主要讲述k8s应用部署流程及相关功能。

  • 第10章:主要讲述Docker+k8s的组合上云的问题。

  • 第11章,主要讲述容器化之后的DevOps实践。


二、山外笔记-第1章:走进Docker

本章主要包含以下内容:

  • Docker技术概述;

  • 容器技术的发展历史;

  • Docker和虚拟机的区别;

  • Docker的三个基本概念(为后续进一步讲解Docker做铺垫);

  • Docker的两个版本。

2.1 什么是Docker

1、Docker是一个开源的应用容器引擎,可以轻松地为任何应用创建一个轻量级、可移植、自给自足的容器。

2、Docker平台就是一个软件集装箱化平台,可以构建应用程序,将其依赖关系一起打包到一个容器中,然后可以批量地部署到不同的环境,非常易于装载、复制、移除,适合弹性软件架构。

3、软件容器充当软件部署的标准单元,可以包含不同的代码和依赖项。

4、和虚拟机一样,容器技术也是一种资源隔离的虚拟化技术。

2.2 容器简史

1、UNIX chroot(1979):起始阶段

容器概念始于UNIX chroot,chroot将一个进程及其子进程的根目录改变到文件系统中的一个新位置,使该进程只能访问到新的位置,从而达到进程隔离的目的。

2、Cgroups(2007):Control Groups

谷歌实现了Control Groups(Cgroups),而后被加入到Linux内核中,能够限制和隔离一系列进程的资源使用(CPU、内存、磁盘I/O、网络等),为后期容器的资源配额提供了技术保障。

3、LXC(2008):Linux Containers

2008年基于Cgroups和Linux Namespaces推出了第一个最为完善的Linux容器LXC,其功能通过Cgroups和Linux Namespaces实现,是第一套完整的Linux容器管理实现方案。

4、Docker(2013)推出

(1)Docker的理念是“一次构建,随处运行”。

(2)Docker在起步阶段使用LXC,而后利用自己的libcontainer库将其替换下来。

(3)Docker引入了一整套与容器管理相关的生态系统,包括一套高效的分层式容器镜像模型、一套全局及本地容器注册表、一个精简化REST API以及一套命令行界面等。

5、Rocket(2014)推出

(1)2014年CoreOS推出了一个类似于Docker的容器Rocket。

(2)CoreOS是一个更加轻量级的Linux操作系统,Rocket在安全性上比Docker更严格。

6、Docker支持Windows系统

2016年微软在Windows上提供了对容器的支持,Docker可以以原生方式运行在Windows上,而不需要使用Linux虚拟机。

2.3 Docker和虚拟机

1、Docker容器

(1)容器是一个应用层抽象,用于将代码和依赖资源打包在一起。

(2)多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。

(3)与虚拟机相比,容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动。

2、虚拟机VM

(1)虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。

(2)管理程序允许多个VM在一台机器上运行。

(3)每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源。

(4)虚拟机占用大量空间,启动也十分缓慢。

3、容器和虚拟机的比较

(1)启动速度:容器的启动速度是秒级,即几秒内即可启动;虚拟机的启动速度需要几分钟到十几分钟。

(2)存储空间占用:容器基本镜像的大小在几百MB以内;虚拟机的镜像大小在几十GB到上百GB。

(3)性能:容器的性能接近原生,基本无额外消耗;虚拟机的性能弱于原生,且占用较多的资源。

(4)系统支持量:一台普通的服务器可以轻松支持上千个容器,但最多只能支持几十个虚拟机。

(5)安全隔离性:容器的安全隔离性明显弱于虚拟机。

4、镜像的主要目标是使环境(依赖项)在不同的部署中保持不变。即借助容器镜像,可打包应用或服务并采用可靠且可重现的方式对其进行部署。

2.4 Docker的三个基本概念

1、镜像(Image):一个特殊的文件系统

(1)操作系统分为内核和用户空间,Linux内核启动后,会挂载root文件系统为其提供用户空间支持。

Docker镜像是一个特殊的root文件系统,提供了容器运行时所需的程序、库、资源、配置等文件,和为运行时准备的配置参数(如匿名卷、环境变量、用户等)。

(2)镜像不包含任何动态数据,其内容在构建之后也不会被改变,可以使用docker image ls命令来列出本机的镜像。

(3)Docker利用Union FS的技术,设计为分层存储的架构。

  • 镜像实际是由多层文件系统联合组成的。

  • 镜像构建时会一层层构建,前一层是后一层的基础。

  • 每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

  • 每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

  • 分层存储使镜像的复用、定制更为容易,可用已构建好的镜像作为基础层,再添加新的层来定制自己所需的镜像。

2、容器(Container):镜像运行时的实体

(1)镜像和容器的关系就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。

(2)容器可以被创建、启动、停止、删除、暂停等,可以使用命令docker ps来查看正在运行的容器列表。

(3)容器的实质是进程,容器进程运行于属于自己的独立的命名空间中。

(4)容器和镜像一样,也是分层存储。

  • 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。

  • 任何保存于容器存储层的信息都会随容器删除而丢失。

  • 容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。

  • 容器所有文件的写入操作,直接跳过容器存储层,直接对数据卷(Volume)或者绑定宿主目录发生读写。

  • 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡,数据也不会丢失。

(5)容器的优点:隔离性、可移植性、灵活性、可伸缩性和可控性,最重要的优点是可在开发和运营之间提供隔离。

3、仓库(Repository):集中存放镜像文件的地方
(1)镜像仓库是Docker用来集中存放镜像文件的地方,提供集中的存储、分发镜像服务,类似于常用的代码仓库。

  • 一个Docker Registry中可以包含多个仓库,每个仓库可以包含多个标签(Tag),每个标签对应一个镜像。

  • 一个仓库通常会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。

  • 镜像仓库通过“<仓库名>:<标签>”的格式来指定镜像的版本,如果不给出标签,就以latest作为默认标签。

(2)Docker Registry

  • Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。

  • Docker Registry公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

  • 用户可在本地搭建私有Docker Registry,Docker官方提供了Docker Registry镜像,可以直接作为私有Registry服务。

(3)Docker Hub

  • Docker Hub是Docker官方维护的一个镜像仓库,也是最常使用的Registry公开服务、默认的Registry服务。

  • Docker Hub拥有大量的高质量的官方镜像,网址为https://hub.docker.com/

  • 可以在Docker Hub上面免费托管自己的私人镜像。

2.5 Docker的版本

1、社区版(Docker Community Edition, CE),适合个人开发者和小型团队,可以免费使用。

2、企业版(Docker Enterprise Edition, EE),专为企业开发和IT团队设计,需要购买,强调安全。

版权声明:本文是对《Docker_Kubernetes应用开发与快速上云》一书的个人学习笔记,只做学习和交流使用,不涉及商业用途,版权归原作者所有。如果本文发布的内容侵犯到相关的权益,请及时联系本人进行删除!


版权声明:本文为sdl0928原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。