docker基础

在介绍DOCKER前,先介绍下容器。
       容器在早期的时候,就是用于容纳物品的一种器皿;到近现代,在IT的世界里,引入这一概念来实现环境的隔离,以便于快速部署、启动各种应用及管理。而一个完整的容器生态系统主要包括核心技术、平台技术和支持技术3部分。
       容器核心技术包括:
       1、容器规范----为了保证容器生态系统的健康发展及各容器这间的兼容;目前由OCI组织发布了runtime spec和image format spec两种规范
       2、容器runtime----是容器真正运行的地方;类似于JAVA运行在JVM;现在主流的3种容器runtime分别是lxc、runc、rkt
       3、容器管理工具----对内与runtime进行交互,对外为用户提供interface;主要的容器管理工具有lxd、docker engine(deamon、cli)、rkt cli
       4、容器定义工具----允许用户对容器内容、属性的定义,实现对容器内容修改、共享、重建。如图所示
            
            docker image是Docker容器的模版,runtime依据docker image创建容器
            docker file是若干命令的文本文件,可以通过这些命令创建出docker image
            ACI与docker image类似,它是由CoreOS开发的rkt容器的image格式 
      5、Registry----用来存放image的仓库,自己可以构建私有的
      6、容器OS----是专门为容器制定的OS,与常规的OS相比,它的体积更小,启动更快、效率较高
      平台技术----为了使容器作为集群在分布式环境中运行
容器平台技术包括容器编排引擎、容器管理平台和基于容器的PaaS

     1、容器编排引擎,主要是对容器管理、调度、集群定义和服务发现等操作在复杂的环境中更加高效,以满足业务的需求。
docker swarm是docker开发的容器编排引擎
kubernets是google领导开发的开源容器编排引擎,并同时支持Docker和CoreOS
mesos是一个通用的集群资源调度平台,与marathon一起提供容器编排引擎功能

     2、容器管理平台----是架构在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实细节,为用户提供了更方便的功能,如application catalog和一键应用部署
     Rancher和ContainerShip是比较典型的代表

    3、基于容器的PaaS----为开发人员和公司提供了开发、部署和管理应用的平台,不需要关心底层的基础设施
Deis、Flynn和Dokku是开源容器PaaS的代表

    容器支持技术----用于支持容器的基础设施

    1、容器网络----用于解决容器与容器、容器与实体之间的连通性与隔离性

    2、服务发现----保存容器集群中所有微服务最新的信息,比如IP和端口,并对外提供API,提供服务查询。常见的解决方案如下

    3、容器监控----获取容器实时动态信息的重要手段

    4、数据管理----提供容器在不同host之间迁移,保证数据持久化也能动态迁移

    5、日志管理----为问题排查和事件管理提供重要依据

    6、安全性----无论是系统,还是其它应用,安全性都重点。OpenSCAP是一种容器安全工具

现在开始讲解docker
一、docker概述

   docker是一个开源的应用容器引擎,基于C/S架构的部署方式,用来实现应用程序的快速部署,还可以通过配置文件,实现自动化安装、升级。
    一个完整的Docker由以下组成:1、DockerClient客户端。2、Docker Daemon守护进程。3、Docker Image镜像。4、DockerContainer容器。
二、docker原理
    1、Docker核心解决的问题是利用LXC来实现类似VM的功能,并通过一些其它手段(image),实现快速部署,启动。
    2、LXC(LinuX Containers)Linux容器,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。在Linux内核中,提供了cgroups功能,来达成资源的隔离。它同时也提供了名称空间隔离的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要启动任何虚拟机。
    3、LXC关键技术点:
      (1)chroot,根切换,从容器内的角度来看,仿佛真的有自己的根树
      (2)namespaces:名称空间,负责将资源隔离,比如pid,网络,mnt,user,uts等
      (3)CGroups:控制组,负责控制资源的分配
三、AUFS----是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统,用于解决LXC存在的难以移动 - 难以通过标准化的模板制作、重建、复制和移动 container问题。
       AUFS支持为每一个成员目录(AKA branch)设定'readonly', 'readwrite' 和 'whiteout-able' 权限, 同时AUFS里有一个类似分层的概念, 对 readonly 权限的branch可以逻辑上进行修改(增量地, 不影响readonly部分的)。通常 Union FS有两个用途, 一方面可以实现不借助 LVM, RAID 将多个disk和挂在到一个目录下, 另一个更常用的就是将一个readonly的branch和一个writeable的branch联合在一起,Live CD正是基于此可以允许在 OS image 不变的基础上允许用户在其上进行一些写操作。
       docker镜像含有启动容器所需要的文件系统及其内容;最底层bootfs----用于系统引导的文件系统,包括bootloader和kernel,启动完成后,会被内存释放;rootfs----位于bootfs之上,表现为docker容器的要文件系统 。以只读的方式挂载。
      
        在docker中,以只读方式挂载的称作'image Layer',所有需要更改的都在最顶层
      
但是,想要使用AUSF,要自己向linux内核打补丁,因为AUFS一直申请要打包到linux内核中并没成功。然则,它的竞争对手overlayfs自3.18版开始后,已经合并到linux内核中了。早期的版本用的是devicemapper;但ubuntu是支持AUFS
     总的来说,docker与vm相比,内存占用小,启动快,性能好;但是,没有vm的隔离性强,且网络管理简单。
     

四、Docker安装

docker-ce开源版,docker-ee企业版、收费
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost ~]# vim docker-ce.repo 
   %s@https://download.docker.com/@https://mirrors.tuna.tsinghua.edu.cn/docker-ce/@
[root@localhost ~]# yum repolist    #能列出docker-ce就可以了
[root@localhost ~]# yum install docker-ce
[root@localhost ~]# mkdir /etc/docker
[root@localhost ~]# vi /etc/docker/daemon.json   #添加如下内容
{
    "registry-mirrors":["https://registry.docker-cn.com"]
}

[root@localhost ~]# systemctl start docker.service  #启动docker

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值