1. Docker 的简介概述

@


为什么会有 Docker 出现:

假定你在开发一个项目,你使用的是一台笔记本电脑而且你的开发环境具有特定的配置,其他开发人员身处的配置也各不相同。这个开发的应用依赖于你当前的配置还要依赖于某些配置文件。

我们直到Java程序项目的开发,设计到各种环境 Redis,Java,Spring,MySQL等等配置环境,一旦某个配置的环境稍有一些不一致,可能都会带来一些,错误,导致程序无法运行。当你将这个程序开发完后,交给测试人员去测试的时候,需要让测试人员的环境和你的运行开发的环境一致。如果配置不相同,测试人员那边无法通过运行,而你本机的电脑配置环境可以运行。测试人员就会说你的程序有问题。实际上是你们之间运行环境的不同,导致运行的结果不同。

然后,测试人员将配置和你的开发的配置环境安装配置了一个版本的,程序可以运行了。但是,你这样每个不同的项目,测试人员都要重新安装不同的运行环境,才能运行,我们知道配置环境是一件很麻烦的事情,特别是涉及到分布式微服务就更加复杂了,这样不断的重新安装配置环境,测试人员,的时间都花在了安装运行环境了。

有没有一种方法可以一劳永逸的方式:就是可以将开发人员的配置环境一并(打包)安装过来,这样就可以不用在重新安装配置环境了。有——> Docker容器就可以做到这一点

Docker 容器给出的解决方案是:“系统平滑移植,容器虚拟化技术”

环境配置,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来,开发人员利用 Docker 可以消除协作编码时,在我的机器上可正常工作的问题

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

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

2. Docker 的理念:

Docker 是基于 Go 语言实现的云原生项目:

Dockers 的主要目标是“Builld”,“Ship and Run Any App, AngWhere" ,也就是通过对应用的组件的封装,分发,部署,运行等生命周期的管理,使用户的APP(也可以是一个Web应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

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

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

3. 容器与虚拟机比较

传统虚拟机:

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

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

容器虚拟化技术: 部署在任何环境中的软件都能始终如一地运行。

容器虚拟化技术 VS 虚拟机:

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

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

4. Docker应用场景

docker官网:http://www.docker.com

Docker Hub官网: https://hub.docker.com/

5. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

1. Docker 的简介概述的更多相关文章

  1. Docker 容器简介与部署

    关于Docker容器技术 参考文献:<docker 从入门到精通> Docker容器简介 Docker的构想是要实现 "Build,Ship and Run Any App,An ...

  2. Docker的简介以及Dockerfile编写与使用

    Docker的简介 Docker是在容器的基础上,进行了进一步的封装,极大的简化了容器的创建和维护.使得Docker技术比虚拟机技术更为轻便.快捷. 下面是两张对比图. 可以看到传统虚拟机技术是虚拟出 ...

  3. Phoenix简介概述,Phoenix的Java API 相关操作优秀案例

    Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...

  4. 001.Docker简介概述

    一 简介 Docker最初是dotCloud公司的一个内部项目,诞生于 2013 年初,由google公司开源的Go语言开发. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移 ...

  5. docker安装及概述

    相关快捷键 退出:Ctrl-D or exit detach:Ctrl-P + Ctrl-Q Docker 核心技术 1.Namespace — 实现Container的进程.网络.消息.文件系统和主 ...

  6. docker (1) ---简介,使用

    一.docker简介: 容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机 制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机), 甚至有人把他称为新一 ...

  7. docker 概念简介、简单入门

    1.docker 简介 Docker 是一个开源项目,这个项目旨在通过把应用程序打包为可移植的.自给自足的容器(引用语) DocKer一次构建可放在任何地方就可以运行,不需要进行任何改变DocKer  ...

  8. Docker(一) 简介

    简介 Docker是一款针对程序开发人员和系统管理员来开发.部署.运行应用的一款虚拟化平台.Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的 ...

  9. Docker - Docker 镜像 简介

    概述 简单介绍一下 docker 镜像的概念 1. 背景 复习 docker 镜像是 docker 最基础, 最重要的概念之一 所以正式使用之前, 最好有所理解和认识 2. 镜像 概述 简单描述 理解 ...

  10. Docker入门简介

    Docker的概念 什么是Docker? Docker是一个开源平台,包含:容器引擎和Docker Hub注册服务器 Docker容器引擎:可以将开发者打包他们的应用和依赖包到一个可一直的容器中,然后 ...

随机推荐

  1. 解码OutOfMemoryError:PermGen Space

    本文由 ImportNew - Peter Pan 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加 ...

  2. 【返回值】定义泛型JSON

    /** * 定义统一的Json结构 * 由于封装的Json数据的类型不确定,所以在定义统一的json结构时,我们需要用到泛型. * 统一的json结构中属性包括:数据.状态码.提示信息即可. * 构造 ...

  3. CSS3 过渡和动画

    1.CSS过渡 含义:在没有过渡属性的时候,当一个元素的属性值发生变化时,浏览器就会将这个元素瞬间渲染成新属性值的样式.例如一个定位元素top:0,动态修改成top:100px,这个元素就瞬间跑到10 ...

  4. node 使用 pm2-logrotate 分割pm2日志 && 停止 pm2-logroatate

    使用pm2-logrotate 解决pm2日志体积过大,进行分割 什么是pm2-logrotate? pm2-logrotate 是一个pm2的插件,可以对pm2日志进行管理,所以它的运行需要依靠pm ...

  5. 【Mybatis】学习笔记01:连接数据库,实现增删改

    需要数据库SQL的请跳转到文末 哔哩哔哩 萌狼蓝天 [转载资料][尚硅谷][MyBatis]2022版Mybatis配套MD文档 [Mybatis]学习笔记01:连接数据库,实现增删改 [Mybati ...

  6. gitlab runner install

    gitlab-runner install -d /home/gitlab-runner/ --syslog --user gitlab-runner

  7. MySQL 8.0 相对于 MySQL 5.7

    MySQL 8.0 相对于 MySQL 5.7,有很多新特性,比如:快速加列.原子 DDL.不可见索引.额外端口.角色管理等.这一节内容,就不讲这些新特性了,只来聊聊最近在工作学习过程中遇到的几处细节 ...

  8. 测试覆盖率 Java 覆盖率 Jacoco 插桩的不同形式总结和踩坑记录

    https://testerhome.com/topics/20632 关于Jacoco的小结和踩坑记录 一.概述 测试覆盖率,老生常谈的话题.因为我测试理论基础不是很好,就不提什么需求覆盖率啦这样那 ...

  9. git Already up-to-date解决办法,强制覆盖本地代码

    1.拉取最新云端代码强制覆盖本地代码 git fetch --all git reset --hard origin/master git pull 2.git将分支合并到主master,出现这个结果 ...

  10. UML之模型、包及包的版型(构造型)

    包是UML模型的组织结构,也是UML项目的配置管理结构.包存在多个层级,除了顶层包,所有包隶属于一个且仅隶属于一个上层包.在项目不同阶段实际推进与配置过程中,通常以不同层级的包为单位进行check-i ...