Docker 产生的背景|学习笔记

简介: 快速学习 Docker 产生的背景

开发者学堂课程【Docker 快速入门Docker 产生的背景】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/850/detail/14025


Docker 产生的背景


内容介绍

一、Docker 产生的背景

一、Docker 产生的背景

先来思考问题:为什么会有 docker 出现

一种技术产生的前因后果、前提背景是什么,为什么会慢慢成为主流热门甚至是后续软件开发的一种标准。

接下来来解释为什么会有 docker 的出现,docker 用在什么地方,解决了什么痛点,解决了什么问题。

总结一句话:在日常工作开发中

image.png

如上图,左侧是开发,右侧是运维。

传统上在未学习 docker 前开发工程师提交给运维产物:代码,war 包。例如当项目完成后,通过 double 获取了多个包,这时使用包进行一个个架包,包括刚才上节完成的 cloud 项目,发布到集群环境中,部署到多个 component 下,那么交给运维的是代码和 war 包。交给运维的前提是开发本机上没有任何问题。运维的工作是进行部署,但此处有开发和运营交付软件时经常产生矛盾的问题。

思考:为什么代码在开发时运行正常而在运维时运行不出结果?

一款产品从开发到上线,从操作到系统,从运行到环境,再到应用配置,再加上代码,即使运维工程师不改变开发工程师的代码,操作系统、运行环境等也会发生变化,开发上可以运行是因为在一定的环境中,有一定的配置文件,若出现任何问题,开发都运行正常而运维就不能运行。所以作为开发和运维之间的协作需要关心很多东西,这也是很多互联网公司不得不面对的问题,特别是各个版本更迭之后,不同版本环境的兼容,越来越复杂,例如需要加支付接口、软件证书、

命令行、公钥密钥等对运维人员都是考验。

所以开发和运营交付软件和部署上经常会发生矛盾,导致产生差异的根本原因是双方的环境和配置不同。例如现在开发是在 windows 下开发,但是运维部署需要部署到阿里云上,此时环境发生变化就会有不同。

为了解决这个问题,Docker 应运而生。

开发工程师将自己运行 ok 的环境中的代码、配置、系统、数据等整体打包给运维工程师,那么运维工程师就可以在相同环境下进行运行。

环境配置很麻烦,换一次机器就要重来一次,费力费时。

很多人想到从根本上解决问题,软件可以带环境安装。即运维工程师不再是安装一个个软件,而是去复制和开发人员一模一样的整体的原始环境,比如环境配置。开发人员就可以利用 Docker 可以消除协作编码时“在我的机器可以正常工作”的问题。

                image.png

先简单浏览上图,以前只需要开发者提交代码,现在是提交整个环境:代码,配置,数据,系统等。Docker 有一个重要概念即三要素之一:镜像,上述一整套即为镜像,以前的代码只是应用,只需要写完代码编译成文件,形成源代码,由运维去部署。

而现在不再仅仅提交代码,还包括运行文档,配置环境,运行环境,运行依赖包,内核等可以正常运行的整个环境配置,带着环境安装到 docker 上,让运维工程师进行发布,运维就可以将原始环境一模一样的复制过来,消除了在开发工程师处能运行,在运维处不能运行的问题。

程序员最终的目的是编码的作品能够上线,最后就是部署。而现在由于互联网高并发的环境和大流量的访问,出现了集群环境:交回的代码有可能是十台。而每一台都需要安装数据库和 redis 等,运维工程师工作量太大。此时思考怎么将整个软件复制,在一台机器上装过了 redis、monggodb 等,下一台机器上也需要这么安装,就需要将相同的代码抽取出来形成公用的方法对外暴露,就不需要再进行各处编码,只需要调一次。同样 docker 的任务就是将现在良好的软件运行环境打包封装成镜像。需要安装的每台机器上都有镜像就完成了。

这个理念就是 Docker 的雏形。不再交代码,而是交镜像。

镜像是含有代码以外的包括运行文档、配置环境、运行环境、运行依赖包、操作系统发行版,内核等原始环境。保证可以正常运行。

之前服务器上配置一个应用的运行环境需要安装各种软件,例如尚硅谷电商项目的环境,安装和配置 Java/TomcatMySQLJDBC 驱动包等很麻烦,并且不能跨平台。例如是在 Windows 上安装的这些环境,那么在 Linux 上需要重新装。即使不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。

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

类似于 java 虚拟机概念,一次编写处处运行。Docker 的理念是“一次构建,处处运行”。

相关文章
|
3月前
|
Kubernetes Ubuntu Linux
docker学习笔记
docker学习笔记
52 0
|
24天前
|
安全 网络安全 开发者
Docker学习笔记(一):Docker命令总结
本文介绍了Docker的基本概念、优点以及常用命令。Docker是一个开源的应用容器引擎,它通过容器打包应用程序及其依赖项,实现快速部署和迁移。主要优点包括轻量级、可移植性、易于管理、安全性和开源性。文章还区分了镜像和容器的概念,并提供了构建镜像、查看容器、运行容器、停止和删除容器等常用Docker命令的示例。
114 0
|
2月前
|
Docker Windows Python
Windows-Docker学习笔记(一)
本文介绍了Windows环境下Docker的安装与使用方法。首先通过链接下载Windows版本的Docker,然后按步骤配置:启用Windows功能、设置默认WSL版本为2,并检查Docker及其组件是否正常工作。接着详细列出了Docker的基础命令及其用法,包括搜索、下载镜像、管理容器等。同时介绍了Dockerfile的编写方法及其构建过程,以及docker-compose.yml文件的用途。最后提供了运行和管理容器的具体示例。
Windows-Docker学习笔记(一)
|
3月前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
3月前
|
jenkins Java 持续交付
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
|
6月前
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作
|
6月前
|
Prometheus 监控 Cloud Native
Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus
Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus
|
6月前
|
存储 应用服务中间件 nginx
Ubantu docker学习笔记(八)私有仓库
Ubantu docker学习笔记(八)私有仓库
|
6月前
|
网络协议 Docker 容器
Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络
|
6月前
|
Docker 容器
Ubantu docker学习笔记(六)容器数据卷——补充实验
Ubantu docker学习笔记(六)容器数据卷——补充实验