docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

1 docker是什么

是一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
        Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
        环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。

之前在服务器配置一个应用的运行环境,要安装各种软件,就拿尚硅谷电商项目的环境来说吧,Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。

传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

2 docker理念

Docker是基于Go语言实现的云开源项目。
        Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作

3 容器虚拟化与虚拟机比较

3.1 虚拟机

虚拟机(virtual machine)就是带环境安装的一种解决方案。
        它可以在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。

逻辑结构图如下:

虚拟机有很多缺点:

1)资源占用多

2)冗余步骤多

3)启动缓慢

3.2 容器虚拟化技术

由于前面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
        Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

逻辑结构如图:

综上:容器虚拟化技术与传统虚拟化方式的不同之处:

1)传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

2)容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

3) 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源

4 docker带来的便捷

总的来说就是一次构建处处运行。

4.1 更快速的应用交付和部署

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

4.2 更便捷的升级和扩容

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

4.3 更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复

4.4 更高效的计算资源利用

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

5 docker的优势

5.1 更轻量

基于容器的虚拟化技术,仅包含业务运行所需的runtime环境,CentOS/Ubuntu基础镜像仅有170M,宿主机可部署100-1000个容器。

5.2 更高效:无操作系统虚拟化开销

1)计算:轻量,无额外开销,尤其是内存和IO的开销

2)存储:系统盘aufs/dm/overlayts,数据盘volume

3)网络:宿主机网络,NS隔离

5.3 更敏捷更灵活

1)分层的存储和包管理,devops理念

2)支持多种网络配置。

5.4 易于构建部署

易于构建,良好的REST API,也很适合自动化测试和持续集成,标准统一的打包/部署/运行方案,镜像支持增量分发,易于部署。

企业级实战:

1)新浪的微博DCP系统基于Docker容器混合云架构应用

2)美团云的Docker框架

6. Docker的基本组成

Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

6.1 镜像——image

image 文件生成的容器实例,本身也是一个文件,称为镜像文件。Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

6.2 容器

一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。

Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

6.3 仓库

仓库(Repository)是集中存放镜像文件的场所,是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等

2. docker.——简介相关推荐

  1. Docker 简介与安装

    Github: github.com/yingzk/MyDo- 1. Docker 简介 Docker是一个开源(Github地址: https://github.com/docker)的容器引擎,它 ...

  2. Docker 简介以及构架剖析

    Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...

  3. Docker简介以及mysql和redis的部署

    一.Docker简介 1.环境配置的难题 软件开发最大的麻烦事之一,就是环境配置.用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来? 用户必须保证两件事:操作系统的设置,各种库和组件 ...

  4. 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品

    Docker简介 Docker是DotCloud开源的.可以将任何应用包装在Linux container中运行的工具. Docker基于Go语言开发,代码托管在Github上,目前超过10000次c ...

  5. Docker学习一:Docker简介与安装

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  6. docker简介以及优缺点

    1.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制, ...

  7. Docker(一) docker简介安装以及下载运行第一个镜像

    一.什么是Docker docker简介: docker是一个开源的应用容器引擎,基于go语言,遵从apache2.0协议开源.通过docker让开发者可以打包他们的应用以及依赖到一个可移植的镜像中, ...

  8. Docker简介以及Docker历史

    本文来说下Docker简介以及Docker历史 文章目录 概述 Docker公司 Docker运行时与编排引擎 Docker开源项目(Moby) 容器生态 本文小结 概述 Docker 是一种运行于 ...

  9. 【Docker 入门】Docker简介与安装

    Docker Desktop for Windows 目录: Docker Desktop for Windows 1. Docker简介: 2. Docker应用场景: 3. Docker对比虚拟机 ...

  10. Docker入门到实践 (一) docker简介与安装、常用命令讲解

    Docker入门到实践 (一) docker简介与安装 一.docker 介绍   Docker 是一个开源的应用容器引擎 打包应用以及依赖包到一个可移植的镜像中,发布到任何机器上,实现虚拟化.容器是 ...

最新文章

  1. 第五周项目一-三角形类雏形(5)
  2. Angular2.x-主/细节组件
  3. ./include/caffe/util/cudnn.hpp: error: too few arguments to function ‘SetPooling2dDescriptor
  4. html 完全复制div中的内容_LOL手游现在远非完全体,未来还有哪些端游内容会加入手游中?...
  5. PHP foreach 小结
  6. Sublime Text 插件之常用20个插件
  7. php可以用scanf,C/C++中 使用scanf和printf如何读入输出double型数据。
  8. python中函数 reshape(-1,1)
  9. 解方程的计算机软件,解方程计算器app
  10. aac,ogg等音频测试文件下载地址
  11. EMD 加 时频分析
  12. 百度初级认证有用吗_赤峰BIM工程师认证
  13. 上海财经应用统计考python_2021年上海财经大学应用统计硕士考研经验分享
  14. 计算机快捷键英语,输入法电脑中英文切换快捷键
  15. android MVX杂谈
  16. java 美发管理系统_美容美发管理系统毕业论文.doc
  17. iOS从相册选择图片并裁剪,可用于上传头像
  18. 软考高级信息系统项目管理师如何备考?
  19. Math.log()是以常数e为底数的对数
  20. 复现Oriented R-CNN RTX 2080Ti

热门文章

  1. 欧拉角、旋转矩阵及四元数
  2. pxe装机原理_PXE 装机详解
  3. sklearn.metrics.pairwise_distances
  4. 简述动力环境监控系统!
  5. 怎么利用服务器端口爆破网站,渗透测试:域名爆破及端口扫描
  6. 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/面试题解析
  7. java kml_当Java遇上KML - sheva.wen的个人空间 - OSCHINA - 中文开源技术交流社区
  8. Web APi之HttpClient注意事项以及建议
  9. ccfcsp-201712-2-游戏-python
  10. [计算机网络笔记01] Packet Tracer的简单使用