资讯专栏INFORMATION COLUMN

为什么需要Docker?

RdouTyping / 2022人阅读

摘要:一为什么需要官方介绍中文版是世界领先的软件容器平台。其实这篇文章主要是讲为什么我们需要在学习一项技术之前,必须要知道这项技术是用来干嘛的,的一些概念和命令我还没介绍留到下一篇啦。

前言
只有光头才能变强。
文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

估计大家也可能听过Docker这项技术(在论坛上、招聘技能上、交流群上等等),要是不了解Docker,都不好意思在网上冲浪的时候吹牛逼了。

所以这几天学了一下Docker,总结了Docker入门的相关知识,分享给大家(好让我们一起吹牛逼)。

I need a doctor,call me a doctor. I need a doctor, doctor, to bring me back to life .
一、为什么需要Docker

官方介绍(中文版):http://www.docker-cn.com/what-docker#/developers

Docker 是世界领先的软件容器平台。
开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
1.1环境(切换/配置)麻烦

一般我们写程序的,能接触到好几个环境

自己写代码的环境叫做开发环境。

给测试去跑的环境叫做测试环境。

测试完可以对外使用的叫做生产环境。

其实我们在学习编程中,很多时间都浪费在“环境”上:

如果我现在重装了系统,我想要跑我的war/jar包,我得去安装一下JDK、Tomcat、MySQL等配置各种的环境变量才能跑起来。

开开心心地跟着博主给出的步骤去写Demo,但总是有Bug。(这里我将版本/依赖也归纳在环境的范畴里边)。

好不容易在测试环境下跑起来了,在生产环境就各种出错!

跟着教学视频做分布式/集群的项目,跑一堆的虚拟机,每个虚拟机都要安装对应的环境。

所以就有个笑话《千万不要跟程序员说,你的代码有bug》:

他的第一反应是你的环境有问题,第二就是你是傻逼不会用吧。

你要跟他这么说:“这个程序运行的怎么运行的跟预期不一样,是我操作有问题吗?”。

这货就会第一反应“我擦,这是不是出bug了?”

1.2应用之间需要隔离

比如我写了两个应用(网站),这两个应用部署在同一台服务器上,那可能会出现什么问题?

如果一个应用出现了问题,导致CPU占100%。那另一个应用也会受到关联,跟着一起凉凉了。

这两个应用是完全不同技术栈的应用,比如一个PHP,一个.NET。这两个应用各种的依赖软件都安装在同一个服务器上,可能就会造成各种冲突/无法兼容,这可能调试就非常麻烦了。

二、Docker是如何解决上述的问题的 2.1解决环境(切换/配置)

不知道大家有没有装过系统,比如说装Linux虚拟机,重装Windows系统,都是需要镜像的。

有了这个镜像,我们就可以运行这个镜像,来进行安装系统的操作(此处省略N个下一步),于是我们的系统就装好了。一般来说,我们去官方渠道下载的镜像,都是纯净的。比如去官方下载Windows镜像,装完后之后桌面只有一个回收站。

但有过了解装系统的同学可能就会知道,有的镜像装完可能还有360这些软件,但系统的的确确是变了。简单来说,就是这些镜像添加了其他的东西(比如360软件、腾讯、千千静听等等软件)。

Docker也是这种思路,可以将我们的想要的环境构建(打包)成一个镜像,然后我们可以推送(发布)到网上去。想要用这个环
境的时候,在网上拉取一份就好了。

有了Docker,我们在搭环境的时候,跟以前的方式就不一样了。

之前:在开发环境构建出了一个war包,想跑到Linux下运行。我们得先在Linux下载好Java、Tomcat、MySQL,配置好对应的环境变量,将war包丢到Tomcat的webapps文件夹下,才能跑起来。

现在:在Linux下直接拉取一份镜像(各种环境都配好了),将镜像运行起来,把war包丢进去就好了。

将Docker的镜像运行起来就是一两秒的事情而已,十分方便的。

2.2解决应用之间隔离

说到这里,就得提出一个大家可能不认识的概念:LXC(Linux Containers)--->Linux容器。

2.2.1Linux容器
在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间(namespace)区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。

简单来说就是:LXC是一个为Linux内核包含特征的用户接口。通过强大的API和简单的工具,它可以让Linux用户轻松的创建和托管系统或者应用程序容器。

2.2.2回到Docker

我们在翻看Docker的官方文档的时候,也很容易看见cgroup和namespace这两个名词:

来源维基百科:

Early versions of Docker used LXC as the container execution driver, though LXC was made optional in v0.9 and support was dropped in Docker v1.10.

lxc是早期版本docker的一个基础组件,docker 主要用到了它对 Cgroup 和 Namespace 两个内核特性的控制。新的Docker版本已经移除了对LXC的support。

2.2.3Docker在Windows和Mac

上面说了,Docker底层用的Linux的cgroup和namespace这两项技术来实现应用隔离,那Windows和Mac用户能用Docker吗?

之前,Windows和Mac使用Docker实际上就是跑了一层Linux虚拟机。

比如在Windows下安装的是Docker Toolbox,它需要Oracle Virtual Box来跑Docker

现在,Windows和Mac都已经原生支持Docker了。但需要一些安装的条件,详情可以查看官网

比如Windows:Docker for Windows requires 64bit Windows 10 Pro and Microsoft Hyper-V

参考资料:

Windows 原生 Docker 正式商用

http://blog.daocloud.io/windows-docker/

三、虚拟机和Docker
说到应用隔离和镜像,我就想起了虚拟机。今年下半年(此处省略.....),文体两开花(此处省略.....),要是我写文章写得不好,我是需要向XX谢罪的。

估计大家都用过虚拟机,虚拟机也能实现对应用的隔离,安装特定的镜像也能跑出我们想要的环境。虚拟机已经发展了很久了,为什么我们还需要Docker呢?

这部分内容在官网也有相关的介绍:

http://www.docker-cn.com/what-container#/virtual_machines

一句话总结:Docker容器比虚拟机轻量多了!

最后

Docker可以干嘛?

将一整套环境打包封装成镜像,无需重复配置环境,解决环境带来的种种问题。

Docker容器间是进程隔离的,谁也不会影响谁。

其实这篇文章主要是讲为什么我们需要Docker(在学习一项技术之前,必须要知道这项技术是用来干嘛的),Docker的一些概念和命令我还没介绍(留到下一篇啦)。如果还没看过【生活现场】从搬家到容器技术docker应用场景解析,可以先去看看~

我在学习Docker的时候也找到了不少的资源,想要获取Docker入门资源的同学可在公众号下回复“Docker”

乐于分享和输出干货的Java技术公众号:Java3y。关注即可领取海量的视频资源!

觉得我的文章写得不错,不妨点一下

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72902.html

相关文章

  • 什么要用docker

    摘要:那容器和镜像有什么关系网上说是类和对象的关系,没错,但是这样的比喻没什么实际卵用。针对这个问题,项目组决定把开发环境迁移到中,在测试环境中测试无误后,把镜像打包发布到正式环境中,解决了环境不同导致的问题。 本文旨在用最通俗的语言讲述最枯燥的基本知识 最近Docker突然火得不得了,到处都是谈论Docker的声音,相信大家和小编一样的心情,看这个东西有点高大上,但尝试去阅读Docker文...

    Bryan 评论0 收藏0
  • 什么需要Docker

    摘要:一为什么需要官方介绍中文版是世界领先的软件容器平台。其实这篇文章主要是讲为什么我们需要在学习一项技术之前,必须要知道这项技术是用来干嘛的,的一些概念和命令我还没介绍留到下一篇啦。 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 估计大家也可能听过Docker这项技术(在论坛上、招聘技能...

    Backache 评论0 收藏0
  • Docker简介、常用命令与实践(一)

    摘要:获取阿里云加速器地址进入登录阿里云进入后台配置加速器点击后就会重启并应用配置的镜像地址了检查加速器是否生效配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行,如果从结果中看到了如下内容,说明配置成功。 一、为什么要使用Docker以及与虚拟机的区别? 1.1 为什么要使用Docker Docker的思想来自于集装箱。集装箱解决了什么问题?在一艘大船上,...

    Ocean 评论0 收藏0
  • 写给docker新手的文章

    摘要:为什么要用对开发者来说启动速度快传统虚拟机需要数分钟的启动时间秒秒钟启动。开发者只需要代码到版本管理即可,接下来的自动测试,自动构建,自动部署都交给吧更轻松的扩展。 1. 前言 相见恨晚用来形容我对docker的热爱再合适不过了,自从用了docker,开发环境也不安装了,系统想换就换了,部署更是一键部署,再也不用担心在这台机器上跑的好好的,其它机器有问题了... 写这篇文章,也是为do...

    svtter 评论0 收藏0
  • 【 全干货 】5 分钟带你看懂 Docker

    摘要:本文从定义,作用,技术架构,安装和使用等全方位带你看懂。最后,于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。显示上图内容就表明安装完成。 作者丨唐文广:腾讯工程师,负责无线研发部地图测试。 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署,并且实现开发环境、测试环...

    lavnFan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<