Docker入门篇[SpringBoot之Docker实战系列] - 第534篇

历史文章(文章累计530+)

国内最全的Spring Boot系列之一

国内最全的Spring Boot系列之二

国内最全的Spring Boot系列之三

国内最全的Spring Boot系列之四

国内最全的Spring Boot系列之五》

国内最全的Spring Boot系列之六

国内最全的Spring Boot系列之七》

Spring Boot实用小技巧8 - 第530篇

Spring Boot实用小技巧9 - 第531篇

Spring Boot实用小技巧10 - 第532篇

Suno V4 API 接入 -- 最新的Suno模型,音质很炸裂

Spring Boot实用小技巧11 - 第533篇

Viggle Api上线V3-beta模型,圣诞节跳舞视频来临

Suno Api V4 - Suno Api系列教程,耗费1个星期,输出14篇文章

Viggle AI开放照片唱歌API,新年快乐唱起来

导读

SpringBoot中,当要将jar包部署到多台服务器的时候,那么每个环境都需要配置相同的运行的环境,如果有个运行环境要升级,那么多台服务器都要进行升级,这对于运维来说,非常的不友好。

那么我们想象这么一个场景,是否有没有一种方式,可以把这个环境的信息,配置在一个配置文件中,然后根据这个配置文件配置的信息自动进行搭建环境。

为了解决这么一个问题,那么Docker就运运而生了。

在接下来的一个文章中,会从介绍Docker开始,循序渐进的慢慢的过度到SpringBoot 中如何使用Docker进行部署

许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?

那么序列教程的第一篇的话,主要是来介绍一个:Docker起源以及Docker是什么?

一、环境配置的难题

软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?

用户必须保证两件事:操作系统的设置各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。

如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以跑了"(It works on my machine),言下之意就是,其他机器很可能跑不了。

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

二、虚拟机

虚拟机 (virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。

(1)资源占用多

虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。

(2)冗余步骤多

虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

(3)启动慢

启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

三、Linux 容器

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

Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

由于容器是进程级别的,相比虚拟机有很多优势。

(1)启动快

容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

(2)资源占用少

容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。

(3)体积小

容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

四、Docker 是什么?

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目 已经超过 5 万 7 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

五、Docker 的用途

Docker 的主要用途,目前有三大类。

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

好了,今天有关Docker的入门的文章就介绍到这里。

感慨一下:现在技术真的好卷呢,啥都要会,难,难,难,难于上青天。

历史文章(文章累计530+)

国内最全的Spring Boot系列之一

国内最全的Spring Boot系列之二

国内最全的Spring Boot系列之三

国内最全的Spring Boot系列之四

国内最全的Spring Boot系列之五》

国内最全的Spring Boot系列之六

国内最全的Spring Boot系列之七》

SpringBoot基本原理,轻松应对面试官 - 第522篇

Spring Boot实用小技巧 - - 第523篇

Spring Boot实用小技巧2 - 第524篇

Spring Boot实用小技巧3 - 第525篇

Spring Boot实用小技巧4 - 第526篇

万物皆能舞,AI让你秒变"舞"林高手 -- Viggle AI"舞"所不能

法定年龄退休2024年新规,我要到63岁才能退休了,看看你几岁退休,附退休对照表

Suno新上线Covers翻唱新 - 实现音频风格任意转换

Spring Boot实用小技巧5 - 第527篇

Spring Boot实用小技巧6 - 第528篇

又一款AI对口型神器,让照片开口说话唱歌,1分钟教会(附保姆级教程)

Spring Boot实用小技巧7

Spring Boot实用小技巧8 - 第530篇

Viggle API开放,接入到自己的产品中,让照片跳起舞来

Spring Boot实用小技巧9 - 第531篇

AI视频生视频,一次支持20秒的视频,效果挺震撼 - 模仿爆款抖音账号制作爆款视频[AI视界]

Spring Boot实用小技巧10 - 第532篇

Suno V4版本震撼来袭,音质与歌词双提升

Suno V4上线啦,来听听V3和V4的区别,效果太炸裂了 ------ V4 IS HERE

Suno V4 API 接入 -- 最新的Suno模型,音质很炸裂

Spring Boot实用小技巧11 - 第533篇

Viggle Api上线V3-beta模型,圣诞节跳舞视频来临

Suno Api V4 - Suno Api系列教程,耗费1个星期,输出14篇文章

Viggle AI开放照片唱歌API,新年快乐唱起来

相关推荐
杨DaB2 小时前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
Agome994 小时前
Docker之自定义jkd镜像上传阿里云
阿里云·docker·容器
昵称为空C4 小时前
SpringBoot接口限流的常用方案
服务器·spring boot
hrrrrb4 小时前
【Java Web 快速入门】十一、Spring Boot 原理
java·前端·spring boot
无能百分百4 小时前
阿里云服务器ECS安装Docker(CentOS 7.x)
docker
创码小奇客6 小时前
架构师私藏:SpringBoot 集成 Hera,让日志查看从 “找罪证” 变 “查答案”
spring boot·spring cloud·trae
Olrookie7 小时前
XXL-JOB GLUE模式动态数据源实践:Spring AOP + MyBatis 解耦多库查询
java·数据库·spring boot
waynaqua7 小时前
SpringBoot:听说你还不知道时区设置
spring boot
又是努力搬砖的一年7 小时前
SpringBoot中,接口加解密
java·spring boot·后端
风象南8 小时前
SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!
spring boot·后端