背景

当我们在本地或者开发环境上开发了一套代码并且运行之后,需要发布到测试、生产环境时,需要重新搭建一套能运行这个代码的环境,当搭好环境后发现在本地运行的好好的代码出现了各种各样的问题,于是不得不重新修改服务器上的相关环境......

实际场景:

某个服务需要增加一台新的服务器,部署好之后进行测试

开发:新的那台服务器上报错了,******
运维:之前那台服务器上没问题吗?

经过很长的排查原因的过程后......

运维:我看了下,两台服务器上的jdk版本不一样,你这个服务不兼容高版本的jdk吗?
开发:这个还真不知道,没遇到过
运维:我换下jdk版本试一下
运维:应该是jdk版本的问题,换了之后没问题了

等等还有各种各样的类似场景......

存在的问题

  • 环境配置不一致:在部署新服务器或迁移代码到不同环境时,经常出现环境配置不一致的问题,导致代码无法正常运行。

  • 缺乏对目标环境的了解:开发人员在部署代码之前,往往对目标环境的配置和要求了解有限,无法预测可能出现的兼容性问题。

  • 排查问题耗时:当代码在新环境中出现问题时,开发和运维人员需要花费大量时间来排查和定位问题的根本原因。

  • 缺乏自动化部署和标准化流程:手动搭建环境存在人为错误的风险,同时缺乏自动化和标准化的部署流程,导致环境配置的差异性和错误率增加。

就好比搬家,搬家的时候我们需要把所有家具和行李分别搬到新房子,再重新布置一遍,如果能直接将整个屋子一起搬到新地址,直接拎包入住就可以了

那有没有什么方法可以解决此类问题呢?有,容器技术

什么是容器?

容器是一种虚拟化技术,用于封装应用程序及其所有运行时所需的依赖项,以便可以在不同的环境中以一致的方式运行。容器提供了一个隔离的运行环境,使得应用程序可以独立运行,而不会受到底层系统环境的影响。

容器与虚拟机的区别

与传统的虚拟化技术相比,容器化技术更加轻量级和快速。容器不需要运行完整的操作系统,而是共享宿主机的操作系统内核。这使得容器的启动和停止速度非常快,资源消耗也较低。

特性

容器

虚拟机

启动

秒级

分钟

硬盘使用

一般为MB

一般为GB

性能

接近原生

弱于

系统支持量

单机支持上千

一般几十个

容器vs虚拟机.png

Docker介绍

容器是一种通用技术,Docker是其中的一种实现,使用最广泛

Docker是什么

Docker 是一种开源的容器化平台,用于构建、部署和运行应用程序。它使用容器技术将应用程序及其所有依赖项封装在一个独立的、可移植的容器中,从而实现应用程序的快速部署、可移植性和可扩展性。

Docker 的核心概念

1. 镜像(Image)

镜像是 Docker 容器的基础。一个镜像包含了运行应用程序所需的所有文件、依赖项和配置。它类似于一个只读的模板,可以被用来创建容器。镜像可以通过 Dockerfile 文件定义,其中包含了构建镜像所需的指令和配置。

2. 容器(Container)

容器是基于镜像创建的运行实例。每个容器都是相互隔离的,拥有自己独立的文件系统、网络和进程空间。容器可以被启动、停止、删除和暂停等操作。通过容器,可以实现应用程序的高度可移植性和隔离性。

3. Docker 镜像仓库(Docker Registry)

Docker 镜像仓库是用于存储和分享 Docker 镜像的中央存储库。最常用的镜像仓库是 Docker Hub,它是一个公共的镜像仓库,包含了大量的官方和社区维护的镜像。除了 Docker Hub,还可以搭建私有的镜像仓库,用于内部开发和部署。

4. Dockerfile

Dockerfile 是一个文本文件,用于定义和构建 Docker 镜像。它包含了一系列的指令和配置,用于指导 Docker 在构建镜像时的操作。通过 Dockerfile,可以定义容器的基础镜像、添加额外的依赖项、运行命令、设置环境变量等。

5. Docker Compose

Docker Compose 是一个用于定义和运行多个 Docker 容器的工具。它使用一个 YAML 格式的文件,描述了应用程序的各个组件和它们之间的依赖关系。通过 Docker Compose,可以一键启动、停止和管理多个容器,简化了多容器应用程序的部署和管理。