为什么需要Docker?

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

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

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

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

Docker LoGo

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包丢进去就好了。

DockerHub提供了很多镜像

将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

参考资料:

三、虚拟机和Docker

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

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

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

容器和Docker的区别

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

最后

Docker可以干嘛?

  • 将一整套环境打包封装成镜像,无需重复配置环境,解决环境带来的种种问题。
  • Docker容器间是进程隔离的,谁也不会影响谁。

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

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

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

帅的人都关注了

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

Docker Compose 概述,到底什么是 Docker Compose,为什么要有Docker Compose 文章目录Docker Compose 概述,到底什么是 Docker Compose,为什么要有Docker Compose1、Docker Compose概述2、Docker Compose 的运转过程3、docker-compose.yml 的简单示例4、为什么要有Docker Compose Docker Compose 概述,到底什么是 Docker Compose,为什么要有Docker... 阅读详情

相关推荐

使用Termux在Android设备上编译运行SpecCPU2006

SPEC2006搭配Termux,竟然还能这么玩?!

菜菜的菜园子 2960

为什么需要使用Docker

1.介绍Docker是一个开源的应用容器引擎,基于Go语言开发的,并且遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖,打包到轻量级、可移植的容器中,然后发布到任何一个流行的Linux服务器上,也可以实现虚拟化。2.Docekr的主要目的是‘build , ship and run any app , anywhere’,也就是说打包了之后,可以做到将用户的app及其运行环境实现‘一次封装,到处运行’。3.作用4.优势。

qq_62881798的博客 2566

Python3.11安装fairseq避坑指南:解决dataclasses兼容性问题(附详细代码修改)

本文详细解析了在Python 3.11环境下安装Fairseq时因dataclasses模块规则变更导致的安装失败问题。通过定位核心配置文件,将`default=SomeConfig()`修改为`default_factory=SomeConfig`,并调整依赖版本,提供了从源码修改到环境验证的完整解决方案,确保Fairseq顺利运行。

weixin_29098367的博客 495

深圳Java培训:为什么要使用 Docker?

深圳Java培训:为什么要使用 Docker? 概述 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。 更高效的利用系统资源 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。 更...

bisu6012的博客 409

异步FIFO的隐形陷阱:复位信号同步化实战解析

本文深入解析异步FIFO设计中复位信号同步化的隐形陷阱,重点分析赛灵思xpm_fifo_async原语在FPGA应用中的常见问题。通过实战代码和系统集成方案,提供复位同步化的最佳实践,帮助工程师避免跨时钟域通信故障,提升系统可靠性。

keras9composer的博客 245

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 76

Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别?

前端开发者虽然主要专注于用户界面的设计与实现,但随着现代软件开发流程的发展和云原生时代的到来,学习Docker、Jenkins和Kubernetes(K8s)确实具有很多益处,尤其是对于那些希望扩展技能范围和参与到更多项目周期环节的前端工程师:。

前端开发工程师 2901

2025年11月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(二)

本文整理了2025年11月架构设计师考试的16-30题真题及解析,涵盖多个计算机系统知识领域。主要内容包括:Linux绝对路径以根目录开始(A);模块调用下层数量用扇出表示(B);游乐园问题通过集合运算得出10人未游玩(B);磁盘位示图计算为200字节(C);测试用例核心是输入与预期输出(D)。其他题目涉及软件可靠性测试概念(B错)、评价程序准确度排序(真实程序最高,A)、测试阶段顺序(单元→组装→系统,A)、Web服务器压力测试前置步骤(C)、分时系统响应时间影响因素(用户数量多,A)、逆向工程方法(基于

一几文的编程学习笔记。 225

为什么要使用docker?

一、为什么要使用docker? 1、快速交付应用程序 开发者使用一个标准的image来构建开发容器,开发完成之后,系统管理就可以使用这个容器来部署代码 docker可以快速创建容器,快速迭代应用程序,并让整个过程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 docker容器很轻!很快!容器的启动时间是次秒级的,节约开发、测试、部署的时间 2、更容易部

美味小鱼的杂货铺 2804

手把手教你学Simulink--基于新型通信技术集成的场景实例:无人机利用激光通信实现高速率数据传输

摘要: 本文基于Simulink搭建无人机激光通信仿真系统,解决传统射频通信带宽不足问题。系统通过五层架构(发射机、信道、PAT系统、接收机、性能分析)实现Gbps级高速传输,重点建模大气衰减(雾/雨)、光束发散、PAT精跟踪(Stateflow+PID控制)等核心模块。仿真结果显示:晴天链路可达2.5Gbps(BER 1e-8),浓雾下链路中断,验证了雾是主要性能限制因素。案例涵盖调制方式选择、动态环境仿真及3D可视化,为无人机高速数据传输提供可扩展的仿真框架,并指出混合FSO/RF、AI-PAT等优化方

MHD0815的博客 181

AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信

随着科学技术的不断更新和社会文明的不断进步,汽车已经走入寻常百姓家, 成为当代社会必不可少的交通工具。伴随着互联网技术的飞速发展,汽车也不再 是一个简单的交通工具,已经逐渐发展成为一个集出行、通信、娱乐等功能于一 身的综合智能体,进而推动了车联网产业的蓬勃发展。车联网是在传统汽车的框架上安装了传感器、执行器、控制器等分布式和集 中式控制器,使汽车具备环境感知、协同控制、优化执行等功能,并通过网络技 术实现与车外环境的信息共享,给驾驶带来方便的同时也终将成为可以替代人操 作的新一代汽车[1-3]。

getusushu的博客 2591

为什么要使用Docker?

Docker 可以为应用程序提供一个可复用的容器,从而可以在同一操作系统中和不同操作系统中部署应用,实现跨平台应用开发。它可以简化应用程序的部署,提高性能,确保应用程序的完整性和可靠性,以及降低运行和管理环境的成本。:docker容器可以在任何地方重复利用,从而大大减少了管理时间和成本:7、可移植性:Docker容器可以在开发环境和生产环境之间更加容易的移植。:Docker可以更加简单的增加节点,并能够实现服务的弹性扩容和缩容;:Docker支持跨平台的部署,可以更灵活的部署应用程序和微服务;

weixin_51291483的博客 739

点云结构面智能识别与裂隙网络分析系统

点云结构面智能识别系统摘要 本系统采用深度学习与传统几何算法融合的方法,实现岩石结构面的智能识别与分析。系统包含7个核心模块:点云预处理、结构面识别、分组分割、参数计算、粗糙度分析、裂隙网络生成和可视化。技术路线结合PointNet++深度学习架构与RANSAC、区域生长等传统算法,通过预处理→深度学习识别→几何精修→参数计算→网络构建的流程实现高精度分析。预处理模块实现点云降噪、下采样和法向量估计,深度学习模块基于改进的PointNet++架构进行特征提取和分类。系统支持多种点云格式输入,提供完整的结构面

huanghm88的专栏 345

Docker——Docker运行底层原理和为什么Docker比Vm快——小知识

文章目录1:HelloWorld镜像2:Docker底层原理3:为什么Docker比Vm快 1:HelloWorld镜像 在说底层原理之前,先说一下HelloWorld镜像 2:Docker底层原理 Docker是一个Client Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户 端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运...

qq_44891295的博客 1133

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

美团面试:MySQL为什么 不用 Docker部署?

MySQL 是一个有状态的服务,因为它需要持久化存储数据。在使用 Docker 部署 MySQL 时,如果不进行适当的配置,容器关闭后数据会丢失。因此,需要将数据文件挂载到宿主机上,以确保数据的持久化。Docker 容器化技术提供了许多显著的优势,包括自动伸缩、容灾、切换、开发与生产一致性、快速部署和隔离性等。这些优势使得 Docker 成为现代软件开发和部署中不可或缺的工具。通过合理使用 Docker 和 Kubernetes 等工具,可以大大提高系统的可扩展性、可靠性和维护性。

架构师尼恩 2351

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Docker是什么,为什么用Docker,用Docker的好处?

Docker是啥? Docker 是基于Go语言实现的一个开源项目,通过对应组建的封装,分发,部署,运行等生命周期的管理,使用户的应用及其运行环境“一次镜像,处处运行”,其实是一个应用容器,类似于一个虚拟机。 通过以容器的形式将应用程序及其所有依赖项打包成一个可运行环境就是image镜像文件就可发布到 Linux 机器,通过该image镜像文件生成Docker容器实例就可运行。 便于应用程序的交付部署,省去了以往应用在一个新环境中运行的前期工作准备各种基础的工具的安装及版本不一致导致的应用运行异常。 不用

weixin_39769179的博客 8921

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

为什么我们拒绝使用 Docker

作者 | meezeeworkouts译者 | 弯月出品 | 优快云(ID:优快云news)在以往的很多项目中,我们都采用了Docker,而且效果都很不错(大多数时候都不错,只不过有...

优快云资讯 1万+

什么是Docker?Docker的简介,我们为什么需要Docker

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。厂资料。[外链图片转存中…(img-P56TtWbP-1719185996444)][外链图片转存中…(img-f8XorOrw-1719185996445)][外链图片转存中…(img-DEGvH5tD-1719185996445)][外链图片转存中…(img-UjeZGjrI-1719185996446)]

2401_85112710的博客 725

Docker容器里的进程为什么要前台运行

《第一本Docker书》里面,讲到Docker容器启动web服务时,都指定了前台运行的参数,例如apache: [plain]view plaincopy ENTRYPOINT["/usr/sbin/apache2"] CMD["-D","FOREGROUND"] 又例如nginx: [plain...

weixin_30794491的博客 1358

什么是Docker,为什么要使用Docker?

什么是Docker,为什么要使用Docker? Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言...

学无止境,终身学习 1804

Docker为什么出现

Docker是什么?Docker为什么出现? 使得Docker得以打破过去[程序及应用]的观念。通过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由上而下打包,达到应用程式跨平台的无缝运作。

weixin_47472270的博客 689

为什么我们需要Docker?

中高级面试高频考点整理**[外链图片转存中…(img-NefUwJeY-1718873913222)][外链图片转存中…(img-y3w0wLEi-1718873913223)]

2401_85111824的博客 1059

为什么docker system df 和 docker images显示的总大小不一样

如图,我的myshop是使用Dockerfile继承tomcat的 docker system df命令显示的占用内存大小和docker images命令显示的不同 原因是因为,Docker被设计为分层存储的架构 简单来说,以我的myshop镜像为例,myshop是继承的tomcat,Docker会先构建tomcat,之后在tomcat基础上,将myshop和tomcat不一样的地方构建起来 所以...

小枫哥的博客 1831

docker启动nginx后挂了_docker运行nginx为什么要使用 daemon off

很开心啊,遇到这个问题,就要讲讲docker容器的进程原理了,基本上了解过docker的人都清楚docker的几个隔离方式,那么进程同样是进行隔离。问题1.docker容器跑着为啥会挂掉?docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker 容器pid挂了,那么docker容器便会直接退出。2.docker run的时候把co...

weixin_32342535的博客 312

为什么会有docker?Docker 是什么?

一、为什么会有docker? PaaS 项目被大家接纳的一个主要原因,就是它提供了一种名叫“应用托管”的能力。在当时,虚拟机和云计算已经是比较普遍的技术和服务了,那时主流用户的普遍用法,就是租一批 AWS 或者 OpenStack 的虚拟机,然后像以前管理物理服务器那样,用脚本或者手工的方式在这些机器上部署应用。 当然,这个部署过程难免会碰到云端虚拟机和本地环境不一致的问题,所以当时的云计算服务,比的就是谁能更好地模拟本地服务器环境,能带来更好的“上云”体验。而 PaaS 开源项目的出现,就是当时解决.

MyySophia的博客 998
上一篇: Docker入门资源【整理】
下一篇: 面试前必须要知道的Redis面试题
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值