docker入门(一)—— docker概述

news2024/11/20 15:51:43

docker 概述

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

官网文档: https://docs.docker.com/get-docker/

Docker Hub官网:https://hub.docker.com (仓库)

什么是 docker

docker 是一个开源的容器化平台,可以将应用程序及其所有依赖项打包在一个独立、可移植的容器中。它通过利用容器技术来实现应用程序的快速部署、可扩展性和跨平台性。

docker 的核心概念是容器,它是一个完全独立、可执行的软件包,包含了应用程序的代码、运行时环境、系统工具和系统库。与虚拟机相比,容器更加轻量级,因为它们共享主机操作系统的内核,并且没有额外的操作系统负担。

使用 docker,开发人员可以将应用程序及其所有依赖项打包在一个容器中,然后将该容器部署到任何支持 docker 的主机上,无论是开发环境、测试环境还是生产环境。容器提供了一致的运行环境,确保应用程序在不同环境中以相同的方式运行。

docker 还提供了一套强大的命令行工具和 API,使得容器的创建、部署、启动、停止和管理变得简单和可靠。它支持容器的版本控制和快速部署,方便应用程序的更新和回滚。

使用 docker,开发人员可以更快速地构建和交付应用程序,运维人员可以更轻松地管理和扩展应用程序的部署。docker 已经成为现代化软件开发和部署的重要工具,被广泛应用于云计算、微服务架构、持续集成和持续部署等领域。

docker 的发展历程

问题:

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员是极大的考验!

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

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

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

解决方案:

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

docker 镜像的设计,使得 docker 得以打破过去「程序即应用」的观念。通过 docker 镜像 ( images ) 将应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。

第一个概念:docker 里面所有的应用,打包为镜像。版本迭代管理…

在这里插入图片描述

docker 的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的(docker 镜像容器等都是标准化)货物被集装箱标准化了,集装箱和集装箱(docker 容器)之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker 就是类似的理念。

  • 镜像标准化
  • 容器化隔离

docker 历史

2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。

这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术

后来,dotCloud 公司将自己的容器技术进行了简化和标准化,并命名为—— docker

docker 技术诞生之后,并没有引起行业的关注。而 dotCloud 公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。

正当他们快要坚持不下去的时候,脑子里蹦出了“开源”的想法。

什么是“开源”?开源,就是开放源代码。也就是将原来内部保密的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。

有的软件是一开始就开源的。也有的软件,是混不下去,创造者又不想放弃,所以选择开源。自己养不活,就吃“百家饭”嘛。

2013年3月,dotCloud 公司的创始人之一,docker 之父,28岁的 Solomon Hykes 正式决定,将 docker 项目开源。

不开则已,一开惊人。

越来越多的 IT工程师发现了 docker 的优点,然后蜂拥而至,加入 docker 开源社区

docker 的人气迅速攀升,速度之快,令人瞠目结舌。

开源当月,docker 0.1 版本发布。此后的每一个月,docker 都会发布一个版本。到2014年6月9日,docker 1.0 版本正式发布。

此时的 docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像 Google、微软、Amazon、VMware 这样的巨头,都对它青睐有加,表示将全力支持。

软件技术革命从来都是懒人推动的。

docker 和容器技术为什么会这么火爆?说白了,就是因为它“”。

重量级的环境隔离:虚拟机

容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是 VMWareOpenStack

相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。

虚拟机属于虚拟化技术。而 docker 这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化

虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如 VMWare)。

而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。

它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个 docker 容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级

正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。

docker 理念

docker 是基于 Go 语言实现的云开源项目

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

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

之前的虚拟机技术

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

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

在这里插入图片描述

虚拟机的缺点:

  • 资源占用多

  • 冗余步骤多

  • 启动慢

容器虚拟化技术

由于前面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

在这里插入图片描述

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

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

虚拟机与容器的对比

docker是怎么工作的

docker 是一个 Client-Server 结构的系统,docker 守护进程运行在主机上, 然后通过 socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。

在这里插入图片描述

为什么Docker比较 VM 快

  • docker 有着比虚拟机更少的抽象层。由于 docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU、内存利用率上 docker 将会在效率上有明显优势。
  • docker 利用的是宿主机的内核,而不需要 Guest OS。因此,当新建一个容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS,返个新建过程是分钟级别的。而docker 由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个 docker 容器只需要几秒钟

在这里插入图片描述

在这里插入图片描述

docker 对于开发/运维(DevOps)的帮助

更快速的应用交付和部署:

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。docker 化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

更便捷的升级和扩缩容:

随着微服务架构和 docker 的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个 docker 容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

更简单的系统运维:

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的 BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

更高效的计算资源利用:

docker 是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的 Hypervisor [管理程序] 支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的 CPU 和内存的利用率。

docker 的优点

docker 具有以下几个主要的优点:

  • 轻量级和快速:相比传统虚拟化技术,docker 容器更为轻量级,因为它们共享主机操作系统的内核,避免了额外的操作系统负担。这使得容器的启动、停止和迁移更加快速,也节约了硬件资源和时间成本。
  • 可移植性和一致性:docker 容器提供了一种统一的部署环境,可以在不同的操作系统和硬件平台上运行。开发人员可以在其本地开发环境中构建容器,然后将其部署到测试环境、生产环境或云平台上,而无需担心环境差异导致的应用程序问题。这种可移植性确保了应用程序在不同环境中以相同的方式运行。
  • 高效的资源利用:docker 容器可以在同一主机上运行多个相互隔离的容器,共享主机的操作系统和硬件资源。这使得容器可以更好地利用主机资源,提高了资源利用率。
  • 简化部署和管理:docker 提供了一套强大的命令行工具和 API,使得容器的创建、部署、启动、停止和管理变得简单和可靠。容器可以通过复制和共享镜像来快速创建多个相同的实例,实现快速部署和扩展。docker 还支持容器的版本控制和快速部署,方便应用程序的更新和回滚。
  • 提高开发效率:docker 容器通过将应用程序及其所有依赖项打包在一个容器中,简化了开发环境的搭建和配置过程。开发人员可以在容器中构建、测试和调试应用程序,减少了开发环境之间的不一致性和冲突。

总的来说,docker 的优点包括轻量级、快速、可移植性、一致性、高效的资源利用和简化的部署和管理。它提供了一种现代化的应用程序开发、交付和运行方式,已经被广泛应用于云计算、微服务架构、持续集成和持续部署等领域。

docker 的应用场景

docker 在许多不同的应用场景中都有广泛的应用,下面列举了一些主要的应用场景:

  • 应用程序的快速交付和部署:docker 可以将应用程序及其所有依赖项打包在一个容器中,实现应用程序的快速交付和部署。开发人员可以在其本地开发环境中构建容器,然后将其部署到测试环境、生产环境或云平台上,无需担心环境差异导致的应用程序问题。
  • 微服务架构:docker 容器非常适合构建和管理微服务架构。每个微服务可以被打包在一个独立的容器中,并且可以独立部署、扩展和管理。这样可以实现服务之间的解耦和灵活的水平扩展,同时简化了部署和维护的复杂性。
  • 持续集成和持续部署:docker 可以与持续集成和持续部署工具集成,实现自动化的构建、测试和部署流程。开发人员可以使用 docker 容器来创建一致的开发和测试环境,并且可以在不同的环境中快速部署和测试应用程序。
  • 多租户环境:docker 的容器技术可以实现资源的隔离和安全性,使得在多租户环境下更容易管理和部署应用程序。每个租户可以被分配一个独立的容器,可以在同一主机上运行多个容器实例,提高了资源利用率。
  • 快速搭建开发环境:docker 可以帮助开发人员快速搭建开发环境,而无需手动配置和安装依赖项。开发人员可以使用预先配置的 docker 镜像,快速创建包含所需开发工具和库的开发环境。
  • 跨平台开发和测试:docker 容器可以在不同的操作系统和硬件平台上运行,提供了一种统一的部署环境。这使得开发人员可以在本地开发环境中构建和测试应用程序,并将其部署到不同的目标平台上,而无需进行额外的修改和配置。

总的来说,docker 的应用场景非常广泛,可以用于快速交付和部署应用程序、构建微服务架构、实现持续集成和持续部署、管理多租户环境,以及快速搭建开发环境和跨平台开发和测试等。它已经成为现代化软件开发和部署的重要工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盛最多水的容器——算法思路

题目链接:11. 盛最多水的容器 - 力扣(LeetCode) 题解: while中的主要步骤解释: 首先判断索引 i 处的高度是否小于索引 j 处的高度, 如果小于则计算 ( j - i ) * height [ i ];(先取…

有哪些强大好用的AI表格数据处理工具或者 AI Excel工具?

在繁忙的工作和生活中,处理大量的表格数据往往令人感到头疼。面对一列列数字、一行行文字,我们需要花费大量的时间和精力去整理、核对。然而,随着科技的飞速发展,人工智能(AI)技术正逐渐改变这一现状。 如…

C# 对App.config、Web.config的appSettings节点数据进行加密

appSettings加密原因,就是因为容易暴露服务器账号和密码,而且客户也不允许 使用ASP.NET提供的命令工具aspnet_regiis来创建加密命令;aspnet_regiis是提供了直接对配置文件加密的功能的;并且使用aspnet_regiis加密的配置节点在读取…

uniapp套壳打包成apk

不管是vue项目还是uniapp项目,只要能打包成 index.html都可以通过uniapp打包成apk 1.首先把这个项目发布到线上 拿百度举例: 发布到百度服务器用 www.baidu.com能访问到 2.然后到uniapp上发布项目用默认的 vue2,如果你的项目是vue3也用vue2 3.废话我觉得说太多了,直接…

被群辉升级折腾得够呛

群辉升级后,因为版权问题,VideoStation 不支持播放 EAC3 格式的视频了,导致我大量视频都没法用 AppleTV 播放。 网上早期流传了各种方案,比如回退 VideoStation 版本等,都试过了,没啥用。 2024 年 3 月&a…

基于springboot+vue的影院订票系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

不要再封装各种 Util 工具类了,神级框架值Hutool

Hutool 谐音 “糊涂”,寓意追求 “万事都作糊涂观,无所谓失,无所谓得” 的境界。 Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以 …

深入理解Python异常处理机制:助力你的自动化测试脚本

前言 前些天,公司准备使用开源BI工具superset,但部署成功后,连接阿里数仓获取表时,一直报错,苦于日志不详细,从日志中并没有看出哪里的问题,然后就拉源码进行调试,终于找到抛出异常的…

2024年计算机三级|数据库习题整理(自用③)

所有题目均来自【三级数据库技术基础题库】,此博客仅包含部分设计题与应用题,用于自主的回顾学习,仅供参考。 ER图绘制 代码补全 方案选择 (1)在不改变SQL语句和不对表做分区的情况下,可以为学生进出校的申…

自动驾驶感知新范式——BEV感知经典论文总结和对比(一)

自动驾驶感知新范式——BEV感知经典论文总结和对比(一) 博主之前的博客大多围绕自动驾驶视觉感知中的视觉深度估计(depth estimation)展开,包括单目针孔、单目鱼眼、环视针孔、环视鱼眼等,目标是只依赖于视…

【Python爬虫】将某网页中表格里的十六进制颜色值转换成十进制,再生成新表格

【需求】 在 https://www.cnblogs.com/heyang78/p/5712076.html 上有360种颜色及代码,但很遗憾没有十进制的RGB值,使用时需要自己转换一下,此过程依赖网络或计算器,颇为不便。因此,拟设计一爬虫将原有表格内容取出&am…

深度学习入门指南:从理论到实践

深度学习如何入门 深度学习是机器学习的一个分支,它通过模拟人脑神经网络的结构和功能来实现对数据的学习和理解。近年来,深度学习在图像识别、自然语言处理、语音识别等领域取得了显著的成果,越来越受到人们的关注。如果你想入门深度学习&a…

Ambari——编译——解决PowerShell中报错问题

您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 错误日志 因为在此系统上禁止运脚本。有关详细信息,请参阅 https:/go,microsoft,com/fwlink/?LinkID135170 中的 about_Execution…

Cesium安装部署运行

目录 1.简介 2.Cesium项目下载 3.Cesium项目运行 4.cesium运行 1.简介 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎。Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持,且支…

安卓手机系统跳过app启动广告软件

跳过广告关于此应用声明: 应用利用了安卓系统的辅助功能API,可以读取您手机屏幕上显示的所有内容,并且可以以您的名义进行屏幕点击等操作。* 轻量无广告,不联网,也不需要任何权限;* 请务必在系统设置中开启…

es bulk批量操作简单实例

(1)定义 bulk允许在单个步骤中进行多次create、index、update或delete请求。 bulk与其他的请求体格式稍有不同,如下所示: { action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body …

C++多态机制详解(多态实现原理,单继承和多继承时虚函数表,菱形继承时的虚函数表原理)

文章目录 多态的定义多态的实现1.多态实现的两个必要条件2.什么是虚函数3.重写的条件4.多态实现代码5.重写的两个例外 C11引入的final和override关键字重载,重写(覆盖),隐藏(重定义)抽象类接口继承和实现继…

关于JAVA8的Lambda表达式

1. 水在前面 这个礼拜忽然心血来潮把Lambda表达式学习了一遍,发现这玩意跟原来想象的好像不是一个东西,写个学习心得供以后复习用。还是那句话,这篇水文不能让你完全掌握,只是用来给我自己温习用的,或者也可以作为小伙…

DXP学习2- 绘制电气图【实验】

目录 一、实验目的 二、实验原理 1、创建一个新的项目文件。 2、新建原理图文件 3、设置原理图选项 4、放置元器件 5、其他电路元素的放置 6、对所有电路元素属性参数值的修改 三、实验设备 四、实验内容 1、绘制实验图2-1 元器件所在位置: 1,…

四、Elasticsearch 进阶

自定义目录 4.1 核心概念4.1.1 索引(Index)4.1.2 类型(Type)4.1.3 文档(Document)4.1.3 字段(Field)4.1.5 映射(Mapping)4.1.6 分片(Shards&#…