• Docker学习笔记(1)-简介


    1. 简介

    Docker使用Google公司推出的Go语言开发实现,基于Linux内核的cgroup, namespace以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离进程,因此也称其为容器。

    Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便

    Docker与传统虚拟化方式的不同之处:传统虚拟机技术虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。而容器内的应用进程直接运行于宿主的内核容器内没有自己的内核,而且没有进行硬件虚拟

    Docker相对传统虚拟化方式的优势:

    1) 更高效地利用系统资源:不需要硬件虚拟化、也不需要运行完整操作系统,因此Docker对系统资源利用率高。相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

    2) 更快速的启动时间:Docker容器应用,由于直接运行于宿主内核,无需启动完整操作系统,因此可以做到秒级、甚至毫秒级启动。

    3) 一致的运行环境:由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。Docker镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。

    4) 持续交付和部署:Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可通过Dockerfile进行镜像构建,并结合持续集成(CI)系统进行集成测试,运维人员可以直接在生产环境快速部署该镜像,甚至结合持续部署(CD)系统进行自动部署。

    5) 更轻松的迁移:由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。

    6) 更轻松地维护和扩展:Docker使用分层存储以及镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。Docker团队也维护了大批高质量的官方镜像,既可在生产环境使用,也可作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

    对比传统虚拟机技术总结: 

    特性 容器 虚拟机
    启动 秒级 分钟级
    硬盘使用 一般为MB 一般为GB
    性能 接近原生 弱于原生
    系统支持量     单机支持上千个容器     单机一般支持几十个  

    2. 基本概念

    Docker包括了三个基本概念:镜像(Image)容器(Container)仓库(Repository)

    2.1 Docker镜像

    对于Linux操作系统而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像,就相当于一个root文件系统。如官方镜像ubuntu:16.04,就包含了一套Ubuntu16.04最小系统的root文件系统。

    (1) 分层存储

    Docker设计时,充分利用UnionFS技术,将其设计为分层存储架构。严格意义上,镜像是由一组文件系统组成,或者说,由多层文件系统联合组成。

    镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改版,后一层上的任何改变只发生在自己这一层。在构建镜像时,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉

    分层存储的特征使得镜像的复用、定制变得更为容易。可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需内容,构建新镜像。

    2.2 Docker容器

    镜像和容器的关系,就像面向对象程序设计中的类和实例一样。镜像时静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行在属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、网络配置、进程空间、甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境中,运行时好像是在独立于宿主的操作系统一样。这种特性使得容器封装的应用比直接在宿主运行更加安全

    容器与镜像一样,也是分层存储。容器运行时,是以镜像为基础层在其上创建一个当前容器的存储层,该容器存储层可理解成为容器运行时读写而准备的存储层。

    容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此任何保存于容器存储层的信息都会随容器删除而丢失

    按照Docker最佳实践要求,容器不应该向其存储层写入任何数据,容器存储层要保持无状态化所有的文件写入操作都应该使用数据卷(Volume),或者绑定宿主目录在这些位置的读写会跳过容器存储层,直接对宿主发生读写,其性能和稳定性更高。

    数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此使用数据卷后,容器删除或者重新运行之后,数据不会丢失

    2.3 Docker Registry

    Docker Registry是一个集中存储、分发镜像的服务。一个Docker Registry可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag)每个标签对应一个镜像

    通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像如果忽略了标签,则默认标签为latest

    仓库名经常以两段式形式出现,比如jwilder/nging-proxy,前者往往意味着Docker Registry多用户环境下的用户名后者则往往对应软件名,但这并非绝对。

    (1) Docker Registry公开服务

    Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务,一般这类公开服务允许用户免费上传、下载公开的镜像。

    最常用的公开服务是官方的Docker Hub,这也是默认的Registry,并拥有大量高质量的官方镜像

    国内的一些云服务商提供了针对 Docker Hub的镜像服务,这些镜像服务也被称为加速器,如阿里云加速器、DaoCloud加速器等。

    如何配置国内加速器:

    a. 对于systemd系统,如Ubuntu16.04+、Debian8+、CentOs7,将/etc/docker/daemon.json中的改为{"registry-mirrors":["https://registry.docker-cn.com"]},然后执行sudo systemctl daemon-reload; sudo systemctl restart docker重启docker

    b. 对于upstart系统,如Ubuntu14.04、Debian 7 Wheezy,编辑/etc/default/docker文件,在其中的DOCKER_OPTS添加DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com",然后执行sudo service docker restart重启docker。

    (2) 私有Docker Registry

    除了使用公开服务外,用户也可在本地搭建私有的Docker Registry。

    开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持docker命令,但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。

    3. 安装

    docker的安装可以参考https://docs.docker.com/engine/installation,支持64位的Mac OS, Linux, Win10等操作系统。

     

  • 相关阅读:
    android打包so文件到apk
    source build/envsetup.sh 之后
    android 应用程序 集合
    dedecms模块支持系统标签
    php中的两个DI解决方案
    yii快速入门与参考
    [ZT] 使用PHPFPM (PHP FastCGI Process Manager)来对phpcgi进程进行管理
    [转]VLD扩展使用指南
    织梦CMS安装路径问题
    php+mysql中存储过程性能简单比较
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/8279491.html
Copyright © 2020-2023  润新知