首页 > 其他分享 >Docker知识(一)

Docker知识(一)

时间:2023-11-22 22:32:42浏览次数:27  
标签:容器 操作系统 虚拟机 知识 环境 Linux Docker

1.Docker是什么

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

Docker知识(一)_应用程序

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

一句话:解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

2.Docker为什么出现

假设您在开发一个商城项目,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。请问您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?

答案就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案---系统平滑移植,容器虚拟化技术。

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

Docker知识(一)_Docker_02

之前在服务器配置一个应用的运行环境,要安装各种软件,就拿电商项目的环境来说,Java/RabbitMQ/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在Windows上安装的这些环境,到了Linux又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程序,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的情况。Docker的出现使得Docker得以打破过去【程序即应用】的观念。通过镜像(images)将作业系统核心除外,运行应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。

3.容器与虚拟机比较

3.1容器发展简史

Docker知识(一)_应用程序_03

Docker知识(一)_虚拟化技术_04

3.2传统虚拟机技术

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

Docker知识(一)_应用程序_05

传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。

Docker知识(一)_Docker_06

虚拟机的缺点:

  • 资源占用多
  • 冗余步骤多
  • 启动慢

3.3容器虚拟化技术

由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为LXC)。Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

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

Docker知识(一)_Docker_07

Docker容器是在操作系统层面上实现的虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统虚拟机相比,Docker优势体现为启动速度快、占用体积小。

3.4对比

Docker知识(一)_应用程序_08

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

一句话:有没有对硬件进行虚拟/用的是谁的内核

标签:容器,操作系统,虚拟机,知识,环境,Linux,Docker
From: https://blog.51cto.com/u_16357390/8520330

相关文章

  • AI未来应用的新领域:具有领域知识的专属智能拼音输入法 —— 医生专属的智能输入法
    本人上个月去辽宁中医看了些小毛病,在和医生交流的时候随便小聊一下,其中一个主要的话题就是“医生是否需要练习五笔”。众所周知,医生的主要工作是看病,而需要使用输入法打字写病历只是看病过程中的次要工作,因此在直观感觉上人们认为医生是没有必要学习打字输入法的,但是我并不这样认......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • docker 中已经存在的容器修改自启动
    1.修改容器自启动dockerupdate--restart=always容器id2.关闭容器自动dockerupdate--restart=no容器id......
  • Docker部署SQLServer
    一、简介美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。二、搭建SQLServer绿联DX4600为例,首先我们打开Docker......
  • Docker Swarm动态扩容MINIO集群
    需求背景当一个minio集群的磁盘不够用的时候,可以有两种方式,第一个通过扩磁盘,第二种增加机器。但是不管是哪种方式,都不能去动原来集群的启动方式,那样集群就起不来了,会一直提示类似下面这种报错,ERRORUnabletoinitializebackend:/data1driveisalreadybeingusedinanother......
  • Python基础知识
    一、先置知识1、标识符标识符由字母、数字、下划线组成。所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。标识符是区分大小写的。以下划线开头的标识符是有特殊意义的。以单下划线开头_foo的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用**fr......
  • 老知识复盘-SQL从提交到执行到底经历了什么
    一、什么是SQLsql(StructuredQueryLanguage:结构化查询语言)是高级的费过程化编程语言,允许用户在高层数据结构上工作,是一种数据查询和程序设计语言,也是(ANSI)的一项标准的计算机语言.but...目前仍然存在着许多不同版本的sql语言,为了与ANSI标准相兼容,它们必须以相似......
  • docker部署jumpserver
    安装docker略版本$dockerversionClient:DockerEngine-CommunityVersion:24.0.7APIversion:1.43Goversion:go1.20.10Gitcommit:afdd53bBuilt:ThuOct2609:07:412023OS/Arch:linux/amd64C......
  • filerun docker方式安装(debian arm64, tinkerboard2s类似树莓派)
    启动mysqldockerrun-p3366:3306--namemysql57--privileged=true-eMYSQL_ROOT_PASSWORD=12345-v/mnt/docker/varlibmysql:/var/lib/mysql-dliupeng0518/mysql:5.7-arm64#redis命令dockerrun-itd--nameredis--privileged=true-p6380:6379redis--requir......
  • 【略读论文|时序知识图谱补全】Hierarchical Self-Atention Embedding for Temporal K
    会议:WWW,时间:2023,学校:东北大学计算机与通信工程学院摘要:目前TKGC模型存在的问题:只考虑实体或关系的结构信息,而忽略了整个TKG的结构信息。此外,它们中的大多数通常将时间戳视为一般特征,不能利用时间戳的潜在时间序列信息。本文的方法:一种基于自注意机制和历时嵌入技术的分层自注意......