zoukankan      html  css  js  c++  java
  • Docker笔记1:Docker 的介绍

     目  录

    1、Docker 简介

        Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。
        Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux 自己的内核。和传统的虚拟机不同的是,一个 Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。
     
        Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:
    1. 虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。
    2. 虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。
    3. 传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。
    4. 传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。
    5. Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。
     
        Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。
        Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。
     
        Docker 由下面这些组成:
    1. Docker 服务器守护程序(server daemon),用于管理所有的容器。
    2. Docker 命令行客户端,用于控制服务器守护程序。
    3. Docker 镜像:查找和浏览 docker 容器镜像。
     

        Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘IO等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提供资源利用率。

        Docker 是dotCloud也就说现在的Docker公司在2013年3月发布的,一开始是基于LXC项目来创建单个应用程序容器。Docker现在已经开发了他们着急的直接使用核心namesapces和cgroup的工具:libcontainer。

        Docker 的主要目标是“Build,Ship and Run any App,Anywhere”,构建、运输、处处运行。

        一次构建,处处运行。

        Docker 是一种软件的打包技术。

        构建:做一个 docker 镜像

        运输:docker pull

        运行:启动一个容器

        每一个容器, 它都有自己的文件系统 rootfs。

        kvm 解决了硬盘和操作系统之间的依赖

        kvm 独立的虚拟磁盘,xml配置文件

        Docker 解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不通的环境中,得到相同的运行结果。

        Docker 镜像有自己的文件系统。

        Docker 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在句子笔记本上创建并测试号的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。


    2、Docker 特性

        文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
        资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
        网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
        写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
        日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
        变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
        交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
     
     

    3、Docker 的应用场景

    • Web 应用的自动化打包和发布。
    • 自动化测试和持续集成、发布。
    • 在服务型环境中部署和调整数据库或其他的后台应用。
    • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
     

    4、Docker 优点

        1. 简化程序
            Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的    任务,在Docker容器的处理下,只需要数秒就能完成。
     
        2. 避免选择恐惧症
            如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
     
        3. 节省开支
            一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
     
     
  • 相关阅读:
    自己总结的Java归并排序代码
    SpringDataJpa
    多态
    向上转型向下转型
    python面向对象装饰器
    Apache
    git
    μWSGI
    虚拟环境
    软件仓库(持续更新中)
  • 原文地址:https://www.cnblogs.com/morgan363/p/11661846.html
Copyright © 2011-2022 走看看