Docker 产生的背景 | 学习笔记

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

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

课程地址:https://developer.aliyun.com/learning/course/616/detail/9385


Docker 产生的背景

内容简介:

一.Docker 是什么

二.Docker 能干嘛

三.Docker 在哪下载

 

一、Docker 是什么

1、问题:为什么有 Docker 出现?

Docker 是什么?我们首先要抛出问题,一门技术为什么会出现?为什么会有Docker 出现,一种技术诞生的前因后果和前期背景是什么?为什么会慢慢的成为主流?成为现在的热门甚至成为后续软件开发的一种标准,接下来看看为什么会有Docker 的出现,我们为什么要学习 Docker?它用在哪里,解决了什么样的问题?

image.png

此图左边为开发,右边为运维;传统上,按照在没有 Docker 之前,开发工程师负责给运维提交产物,例如代码和 war 包。

举例说明:我们的项目完成以后,打包成 N 个,就会有 N 个架包。比如 Cloud 项目完成以后发布到集群环境里面,部署到多个门派;我们交给运维的是代码和 war包,既然提交给运维,前提一定是开发本机安好,那么右边运维工程师的角色是开始部署。

但是经常会出现开发和运维之间推诿,例如运维跟开发说跑不对,此时开发说这个数据没问题,在他本机是好的,然后运维认为开发写的代码有问题。所以为什么会出现在开发时完好,运维部署时就不对的情况呢?

运维工程师不会私自去改动代码,也许有些运维工程师熟悉数据库和 Linux,但他不懂 Java 等等,也就是架包。最终有一种情况直接导致两位产生差异,就是环境和配置。例如开发工程师是在 Windows 下面开发,但是他要部署到阿里云等系统上面,此时环境改变,就完全不一样了,所以衍生出一种情况:一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。

Docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。

就是开发把完好的环境,代码、配置、系统、甚至是数据等等,总的来说就是整体打包给运维。此情况下,如果代码在这样的配置、系统、数据、环境下面能运行,把它整体放到运维,也能运行。

image.png

环境配置如此麻烦,换一台机器,就要重来一次,费时费力。很多人想到,能不能从根本上解决问题,软件可以带环境安装?

也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker可以消除协作编码时“在我的机器上可正常工作”的问题

image.png

观看此图,以前我们只交代码,现在要交整个环境。Docker 里面有一个重要的概念,也是 Docker 的三要素之一—镜像,那么这一整套就叫镜像,以前代码只是应用,我们只需把代码编译成一些文件、产权代码等等交给运维,由运维去部署。

但是现在不再是只提交代码,还要交除了代码以外运行的文档、配置的环境、运行环境等。那么把这些当前该功能稳定运行的整套环境安装到 Docker 上面,然后让运维工程师发布,此时就可以把原始环境一模一样的复制过来,消除了在开发能运行,在运维工程师不能运行的问题。而运维还有一个概念,运维工程师部署的时候,最终体现的价值是编码出现的项目系统,作品要上线最后一步就是部署。现在由于互联网高并发的环境和大流量的访问导致出现集群环境(多台代码),例如你交过来的代码是 10 台,每一台都需要去安装数据库等,运维需要承受的压力太大,此情况下,我们把软件复制下来,在一台机器上装过的代码,同样还要装很多台,我们要把相同出现的代码抽取出来形成一个公用的方法,就是把这个软件运行环境打个包封装成一个东西叫镜像,然后需要安装的每个人都有这个一份镜像就可以了,那此时这种理念就是Docker理念的雏形。

所以说,以前交代码,现在交镜像。就是含除了代码以外还有原始的环境,保证大家能够正常运行。

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

传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等( Java 为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。

不过,即便如此,仍然常常发生部署失败的情况。Docker 镜像的设计,使得 Docker 得以打破过去「程序即应用」的观念。透过镜像( images )将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。Docker 接近于 Java 虚拟机的理念,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学习笔记(六)容器数据卷——补充实验