本文章是在网易云课堂的课程学习中编写,部分图片从网易云课堂ppt引用
容器化专题
导学:
偏重于理解和使用,以核心概念为主,跟着操作为辅,学会查阅官方文档,理解容器化技术在项目中的应用
重点:
1、要理解docker和k8s的使用,知道有哪些功能,知道如何使用
2、了解容器化带来的好处,知道容器化技术具备的功能
难点:
1、要了解docker和k8s的架构,理解容器编排的概念
2、了解操作系统、网络的概念
首先学习Docker
分为六大模块进行学习,列表如下:
1、Docker基础概念
2、Docker安装、卸载和加速
3、Docker镜像、容器的常用命令
4、利用 Docker file 构建私有镜像
5、运行Java程序
6、搭建Docker私有仓库
为避免篇幅过长,分成六篇文章来记录。本文章介绍的是基础概念模块
一、Docker基础概念
【Docker介绍】
1、Docker是用Go语言进行开发实现,基于Linux内核的cgroup、namespace以及 AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
2、Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便、快捷。
【Docker和传统虚拟机的对比】
传统虚拟机技术:虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
Docker:容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
【为什么要使用Docker】
Docker优势:更高效地利用系统资源、更快速的启动时间、一致的运行环境、持续交付和部署部署、更轻松的迁移、更轻松的维护和扩展。
【Docker架构】
1、Docker主要分为三大块:客户端、主机、仓库
2、Docker工作模式:使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
相关概念介绍:
1)Docker镜像:是用于创建Docker容器的模板
2)Docker容器:是独立运行的一个或一组应用
3)Docker客户端:通过命令行或其他工具,使用Docker的API与Docker的守护进程进行通信
4)Docker主机:可以是物理机或虚拟机,用于执行守护进程的仓库
5)Docker仓库:用于保存镜像,可以理解为代码控制中的代码仓库,比如GitHub
6)Docker machine:是一个简化的docker安装的命令行工具,通过简单的命令行即可在相应平台上安装Docker
【Docker基本概念】
理解了Docker的下面三个基本概念,就理解了Docke的整个生命周期
1、镜像(Image)
Docker镜像相当于一个特殊的文件系统
以操作系统为例,操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image) , 就相当于是一个root文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Docker镜像分层存储
Docker是分层存储的架构,使得镜像的复用、定制变得更为容易。镜像是一个虚拟的概念,由一组多层的文件系统组成。镜像构建时,是一层层地构建,每一层构建完不会再改变,所以在构建每一层时尽量只包含该层需要添加的东西。还可以用之前构建好的镜像作为基础层,进一步添加新的层,定制自己所需的内容,构建新的镜像。
2、容器(Container)
容器和镜像的关系
类似于Java中的类和实例,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器存储层
是为容器运行时读写而准备的存储层。容器也是分层存储的,每一个容器运行时,是以镜像为基础层,在其上面创建一个当前容器的存储层,它的生命周期和容器一样,所以任何保存在容器存储层的信息都会随容器删除而丢失。
**注意:容器不应该向存储层内写入任何数据,容器存储层要保持无状态化。所有文件写入操作,都应使用Volume数据卷,或绑定宿主目录,这样读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,性能和稳定性更高。
数据卷
生命周期独立于容器,容器消亡,数据卷不会消亡。使用数据卷后,容器删除或重新运行后,数据不会丢失。
3、仓库(Repository)
Docker Registry
Docker Registry是集中存储、分发镜像的服务,使得镜像能够在其他服务器上使用。
一个Docker Registry可以包含多个仓库(Repository),每个仓库可以包含多个标签,每个标签对应一个镜像。
通常一个仓库会包含同一个软件不同版本的镜像,标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是该软件哪个版本的镜像。如果不给出标签,将以最新的(latest)作为默认标签。
举个栗子:以centos镜像为例,centos 是仓库的名字,其内包含有不同的版本标签,如,6.9、7.5。我们可以通过centos:6.9,或者centos:7.5来具体指定所需哪个版本的镜像。如果忽略了标签,比如centos,那将视为centos:latest。
Docker仓库
1)Docker Registry公开仓库
常用的Registry是官方的Docker Hub,这也是默认的Registry。除此以外,还有CoreOS的Quay.io,CoreOS相关的镜像存储在这里。另外,还有Google 的Google Container Registry, Kubernetes 的镜像使用的就是这个服务。
加速器:国内的一些云服务商提供的针对Docker Hub的镜像服务。常见的有阿里云加速器、DaoCloud 加速器等。使用加速器会直接从国内的地址下载Docker Hub的镜像,比直接从Docker Hub下载速度会提高很多。
国内也有一些云服务商提供类似于Docker Hub的公开服务。比如网易云镜像服务、DaoCloud镜像市场、阿里云镜像库等。
2)Docker Registry私有仓库
用户可以在本地搭建私有Docker Registry。Docker 官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务。
开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持docker命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本Docker Trusted Registry中,提供了这些高级功能。
除了官方的Docker Registry外,还有第三方软件实现了Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare Harbor和Sonatype Nexus。