Docker概述

Docker为什么出现

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

之前在服务器配置一个应用的运行环境,要安装各种软件,就拿一个基本的工程项目的环境来说吧,.net/Entity Framework/sql 等等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。

传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码文件。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程序,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。

Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。

Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。通过Docker镜像 ( images ) 将应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。

Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并 且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水 果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他 们都运走。

Docker就是类似的理念。

Docker 理念

Docker是基于Go语言实现的云开源项目。

Docker的主要目标是“Build,Ship and Run Any App , Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行

环境能够做到“一次封装,到处运行”。

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

Docker能干嘛

之前的虚拟机技术

虚拟机(virtual machine)就是带环境安装的一种解决方案。

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

虚拟机缺点:

1 、资源占用多

2 、冗余步骤多

3 、启动慢

容器虚拟化技术

由于前面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

比较了 Docker 和传统虚拟化方式的不同之处:

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用 进程;
  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。 因此容器要比传统虚拟机更为轻便。
  • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

开发/运维(DevOps)

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

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

更便捷的升级和扩缩容:

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

更简单的系统运维:

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

更高效的计算资源利用:

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

一、什么Docker? Docker有什么用?Docker能干嘛?相关推荐

  1. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

  2. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  3. Docker入门之 - 如何安装Docker CE

    本文将介绍如何在Ubantu.CentOS.Windows.Mac上安装Docker Docker 提供了两个版本:社区版 (CE) 和企业版 (EE). Docker 社区版 (CE) 是开发人员和 ...

  4. Docker | Docker技术基础梳理(五) - Docker网络管理

    Docker | Docker技术基础梳理(五) - Docker网络管理 链接: 原文链接 原文链接: https://gitbook.cn/books/5b8f3c471966b44b00d265 ...

  5. Docker初学1:初识Docker

    前言:本博客内容是对[狂神说Java]中的Docker教程学习过程中的记录与总结 Docker的历史 Docker公司 Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hyke ...

  6. docker使用mongo_如何使用Docker在AWS上部署Mongo:初学者的权威指南

    docker使用mongo 为什么需要这个? (Why you need this?) 因为JS + Python + Mongo =完整的数据开发 (Because JS + Python + Mo ...

  7. docker如何push镜像到docker hub个人的仓库

    docker如何push镜像到docker hub个人的仓库 step1--找到本地镜像的ID:docker imagesstep2--登陆Hub:docker login --username=us ...

  8. Docker系列教程09-使用Docker Hub管理镜像

    为什么80%的码农都做不了架构师?>>>    > 原文:<http://www.itmuch.com/docker/09-docker-docker-hub/> ...

  9. linux docker 跑代码_使用Docker 搭建自动化测试环境

    01 我经常是在 windows 上进行代码编写,但是无奈代码写完了总是要放到服务器上跑,自动化测试的代码也不例外. 但是当我把 windows 上写好的代码放到 linux 上的时候,总是会出现各种 ...

  10. linux离线安装docker教程,Linux 离线安装docker的过程

    前言 有时候会遇到服务器不能联网的情况,这样就没法用yum安装软件,docker也是如此,针对这种情况,总结了一下离线安装docker的步骤 1. 准备docker离线包 下载需要安装的docker版 ...

最新文章

  1. 使用Python,OpenCV,dlib进行睡意检测(疲劳驾驶检测)
  2. 【每日一算法】二叉树的最小深度
  3. 项目需求|3D结构光扫面(项目经费50万)
  4. 微软Skype Translator将支持阿拉伯语即时语音翻译
  5. 分数化简_分数应用题七讲 (一) 图示法解分数应用题
  6. springboot整合redis修改分区
  7. 如何利用计算机英文缩写,【英文缩写】有关计算机的英文都在这儿
  8. BZOJ2342 Shoi2011 双倍回文 【Manacher】
  9. win10计算机怎么计算根号,详细介绍win10系统自带的计算器的功能,经验告诉你该这样...
  10. 数据改版 | CnOpenData中国行政区划数据
  11. Linux文件夹的介绍
  12. ros执行catkin_make显示 /opt/ros/noetic/share/catkin/cmake/safe_execute_process.cmake:11 (message):`错误
  13. 基于ssl协议和基于openssl工具创建私有CA
  14. 一度智信:2021电商运营教程
  15. web实现html页面思维导图效果
  16. 初始化Weex项目遇到的问题记录
  17. Android 轻量级数据库 Hawk
  18. Android培训班(62)dex文件格式3
  19. JESD204B接口调试记录3 - 总结
  20. WinExec打开exe文件

热门文章

  1. 王珊,萨师煊.数据库系统概论(第5版) 第三章.关系数据库标准语言SQL课后习题及总结
  2. python pprint用法_pprint用法
  3. wireshark捕获IP分片数据包实践
  4. Java异常处理(Java必备知识)
  5. 你想要的视频号运营攻略都在这,以及不可触碰的8大雷区丨国仁网络资讯
  6. ActiveMQ学习笔记01Q
  7. PYTHON CIS线阵相机(PYTHON CISC)
  8. 谈一谈本作使用过的下载软件(哪个最好用?)
  9. 追求极致完美的算法思路(¯﹃¯)————扔玻璃杯问题
  10. c++ 按键暂停继续 程序_C++ 实现按任意键继续~~~