Docker是什么?它的优点与作用是什么?我们为什么使用docker?_叫我三胖哥哥的博客-程序员ITS301_docker

技术标签: docker的优点  虚拟化技术  docker的概念  docker  

关于Docker的应用我其他两篇文章中有,链接如下:

安装: Centos7安装docker并更改阿里云下载镜像地址
使用: Docker拉取Mysql镜像并启动访问及docker常用命令介绍

1. 我们为什么使用Docker?

当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。

就好比我之前开发的一个电商项目,其中包括 Java 环境/Tomcat/ MySQL / JDBC 驱动包/相应 jar 包,还有SSM框架及搜索引擎Solr等技术,仅仅是在windows系统上协调这些项目的版本,保证环境不冲突及项目正常运行,就需要大量时间来调试,而我们技术人员往往在windows系统上开发及调试,那么上线的时候需要部署到linux系统中,这就会导致由于环境不同的产品部署问题。

往往就算不跨系统,而是换一台同样操作系统的服务器,要移植部署依然很麻烦,那么为了解决这个问题,Docker就体现出了他的用处!

2. Docker是什么?

Docker 是一个开源的应用容器引擎

Docker 其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。

再通俗点说,我们使用Docker,只需要配置一次Docker容器上面的应用,就可以跨平台,跨服务器,实现应用程序跨平台间的无缝衔接

Docker实际上就相当于一个封闭的沙盒或者是集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上,实现容器虚拟化技术,随用随搬

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

2.1 镜像-(概念:复制的程序)

  1. 定义:Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
  2. 作用 : Docker镜像是用来启动容器的,也用来创建新的容器,类似于虚拟机的快照。
  3. 特点 : 镜像不包含任何动态数据,其内容在构建之后也不会被改变,在Docker里可以创建镜像,也可以从第三方的网站上下载别人已经做好的镜像来使用

2.2 容器-(概念:集装箱)

  1. 定义 : 一个Docker镜像可以实例化出来多个容器,而每一个容器之间是独立运行的,没有任何依赖
  2. 作用 : 运行程序员开发的应用程序的
  3. 特点 : Docker镜像是不能运行的,是静态的,而Docker容器是运行的,是动态的,可以将Docker容器想像成一个简化版的操作系统和一些核心基础的应用。每个容器运行一个独立的应用程序。

2.3 仓库-(概念:存放镜像的地方)

  1. 定义 : Docker仓库提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像位置的
  2. 作用: 我们自已创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用

总结: 说白了镜像就等于一个centos系统的安装程序,一个镜像只是一个只读环境而已,这个镜像提供的是基础的运行环境,而你在Centos7系统中安装的应用,比如Redis,Mysql这些应用就相当于一个容器,这些容器都是单独可运行的,仓库的概念就更好理解了,在Centos7系统中下载的所有应用都被收集到同一个仓库里了,比如Maven仓库

3. Docker的作用?

3.1 结论

绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突,而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是所说的标准化、集装箱的原因所在。

  1. 解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况
  2. 限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
  3. docker的标准化让快速扩展,弹性伸缩变得简单

在这里插入图片描述

3.2 总结

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

3.3 举例

举例: 我把货物一辆兰博基尼跑车(好比开发好的应用APP),打包放到一容器集装箱里,它通过货轮可以轻而易举的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。而且运输期间,我的兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另外一个码头卸货后,依然可以完美风骚的赛跑(启动正常)

4. 传统虚拟机与Docker虚拟化技术的对比

领域 传统虚拟机 Docker虚拟化
应用交付与部署 每发布一个应用程序,都需要走一遍流程在这里插入图片描述 集装箱式交付,整体交付在这里插入图片描述
资源消耗 传统虚拟机要具备独立的虚拟CPU、内存、操作系统,如果我们有10个虚拟机,则需要安装10个操作系统,虚拟出来10个CPU、内存等,因此造成大量的资源浪费 容器可以运行相同的一个操作系统内核,让一个容器的消耗与一个进程一样
启动 虚拟机硬件需要初始化,需要启动时间 没有虚拟机硬件初始化过程,开箱即用
应用安装 需要大量的安装包及安装过程,如下载完整镜像也非常耗费时间 统一仓库拉取,结构简单,拉取速度快
故障 虚拟机内应用崩溃,理论上不会影响其它虚拟机以及上面运行的应用的,除非是硬件或者Hypervisor有Bug 因为共用内核,只靠cgroup隔离,应用之间的隔离是不如虚拟机彻底的,如果某个应用运行时导致内核崩溃,所有的容器都会崩溃

5. Docker和虚拟机形象比喻

什么是物理机

在这里插入图片描述
什么是虚拟机

在这里插入图片描述
什么是Docker

在这里插入图片描述

参考资料:
https://www.zhihu.com/question/28300645/answer/585166942
https://baijiahao.baidu.com/s?id=1665273511649700130&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1668622380573288716&wfr=spider&for=pc
https://blog.csdn.net/qsbbl/article/details/86715741
https://baijiahao.baidu.com/s?id=1666555716941349742&wfr=spider&for=pc

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44232093/article/details/124297427

智能推荐

axios官方文档——中文版_凯皇的博客-程序员ITS301_axios官网文档

原文地址:https://github.com/axios/axios/blob/master/README.mdhttp://www.cnblogs.com/libin-1/p/6607945.htmlaxios axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP client。特征从浏览器创建 XMLHttpRequests从node.js...

文本相似度算法_追梦船的博客-程序员ITS301

文本相似度算法1.信息检索中的重要发明TF-IDF1.1TFTerm frequency即关键词词频,是指一篇文章中关键词出现的频率,比如在一篇M个词的文章中有N个该关键词,则(公式1.1-1)为该关键词在这篇文章中的词频。1.2IDFInverse document frequency指逆向文本频率,是用于衡量关键词权重的指数,由公式(公式1.2-1)计算而得

网页上传文件的两种实现:1 ,easyui;2,传统file标签_Man_Humble的博客-程序员ITS301

一、easyui的filebox实现上传: 页面标签:<form id='ff' class=easyui-form><input id="txt_head" name="name" class="easyui-filebox" data-options="buttonText:'选择头像',accept: 'image/*',buttonAlign:left,editable:false"

Flask - 介绍_学习中的小菜鸟.的博客-程序员ITS301

目录一级目录二级目录三级目录一级目录二级目录三级目录

linux脚本一般放在哪个目录下,Linux Deepin 将脚本放在个人目录下直接执行_黄心检的博客-程序员ITS301

在 Linux Deepin 下,如何将 Bash 脚本放在个人目录下并能够不指定路径而直接执行脚本?今天我们就以这个问题作为切入点,继续讲一下 Bash 的一些基础知识。现在,我们打开文本编辑器,编写一个名称为 noisyscript 的 Bash 脚本,其内容为:Default#! /usr/bin/env bashwhile truedo echo "I am a noisy script,...

以太坊分片Sharding FAQ_cookie0002的博客-程序员ITS301

简介 目前,在所有的区块链协议中每个节点存储所有的状态(账户余额,合约代码和存储等等)并且处理所有的交易。这提供了大量的安全性,但极大的限制了可扩展性:区块链不能处理比一个单节点更多的交易。很大程度上因...

随便推点

ResNet网络解析及实战案例_resnet实例_无码不欢的我的博客-程序员ITS301

网络越深,获取的信息就越多,特征也越丰富。但是在实践中,随着网络的加深,优化效果反而越差,测试数据和训练数据的准确率反而降低了。如下图所示,56层和20层的神经网络对训练误差和测试误差的对比针对这种深层网络退化的问题,何恺明等人提出了残差网络(ResNet)在2015年的ImageNet图像识别挑战赛夺魁,并深刻影响了后来的深度神经网络的设计。1 残差块假设 F(x) 代表某个只包含有两层的映射函数, x 是输入, F(x)是输出。假设他们具有相同的维度。在训练的过程中我们希望能够通过修改网络中的 _1671465600

全国专业计算机应用能力,全国专业技术人员计算机应用能力考试「介绍」_王邺华的博客-程序员ITS301

《全国专业技术人员计算机应用能力考试「介绍」》由会员分享,可在线阅读,更多相关《全国专业技术人员计算机应用能力考试「介绍」(3页珍藏版)》请在装配图网上搜索。1、全国专业技术人员计算机应用能力考试介绍全国专业技术人员计算机应用能力考试介绍为了在全社会广泛应用信息技术,提高计算机和网络的普及应用程度,加强信息资源的开发和利用,落实国家加快信息化建设的要求,引导专业技术人员学习掌握计算机知识,提高计算...

Nginx访问间歇性卡顿的解决办法_lpping90的博客-程序员ITS301_nginx加载mp4很慢

转载:https://www.javatang.com/archives/2020/08/11/22403140.html降低Nginx的error级别并排除错误然后打开nginx的error.log文件,发现没有特别的错误信息,打开nginx.conf文件,将error_log的级别设置为notice(默认是error),运行了一会儿发现出现下面的warn错误:an upstream response is buffered to a temporary file /tmp/xxx whi.

android 遇到的异常_SaiKeis的博客-程序员ITS301_c/c++: ld: error: found local symbol '__bss_start'

Android 遇到的异常持续更新。。。。。需求全靠嘴Gradle sync failed: com.android.tools.idea.gradle.project.sync.idea.issues.SdkPlatformNotFoundException: Module: ‘bledatacontrol’ platform ‘android-24’ not found. (12 s 199 ms)sdk版本不对应 下载对应的sdkjava.lang.ClassNotFoundExce

substr与substring的区别_飞翔的企鹅12138的博客-程序员ITS301_substr substring

一、substr() 方法语法:substr(start,length)在字符串中抽取从 start 下标开始的指定数目的字符。(1)start,提取字符的位置。如果为负值,则被看作 str.Length + start,其中 str.Length 为字符串的长度(例如,如果 start 为 -3,则被看作 strLength + (-3))。(2)length,可选可不选。选择则输入要提取的字符数,不选就是全部。示例:var str="Hello world!"document.write(

WWDC15 Session笔记 - Xcode 7 UI 测试初窥_weixin_33940102的博客-程序员ITS301

Unit Test 在 iOS 开发中已经有足够多的讨论了。Objective-C 时代除了 Xcode 集成的 XCTest 以外,还有很多的测试相关的工具链可以使用,比如专注于提供 Mock 和 Stub 的OCMock,使用行为驱动测试的Kiwi或者Specta等等。在 Swift 中,我们可以继续使用 XCTest 来进行测试,而 S...