当前位置: 首页 > article >正文

Linux Docker的简介

参考资料

  1. 30分钟Docker入门教程 ◀ 本篇博客所有图片皆来自于该视频截图
  2. 阮一峰 - Docker 入门教程

目录

  • 一. 环境配置时可能会遇到的问题
  • 二. 什么是Docker
  • 三. 虚拟机 与 Docker 的区别
    • 3.1 虚拟机
    • 3.2 Docker
  • 四. Docker的基本架构
  • 五. Dockerfile


一. 环境配置时可能会遇到的问题

  • 应用程序部署和环境配置繁杂
  • 开发环境的应用能正常运行,但是到了测试和生产环境却问题频发
  • 新同事加入项目组,需要花费大量时间来配置开发环境
  • 严格按照部署配置文档来配置环境,但是中间某一个步骤却始终失败

⏹例如我们有如下项目

  • 前端由Vue构建
  • 后端使用SpringBoot框架
  • 数据库使用Mysql和Redis数据库

😒为了让项目成功运行起来,在开发阶段通常通常需要进行如下配置,并且还需要在这些配置在测试环境和生产环境都需要再配置一遍。
如果顺利的话,很快就能结束,如果出现了问题,要花费很长时间去解决。

在这里插入图片描述


二. 什么是Docker

⏹Docker可以是一个用于构建,运行,传送应用程序的平台,可以将我们的应用程序打包成一个个的集装箱(容器),然后运送到任何地方。
Docker,就可以将应用程序和它运行时所需要的

  • 各种依赖包
  • 第三方软件库
  • 配置文件等

打包在一起,以便在任何环境中都可以正确的运行。

在这里插入图片描述

🧐当我们使用了Docker之后,就可以将项目的各部分打包成一个个集装箱(容器),只要在开发环境中的这些容器运行成功了,那么在其他环境中一定也可以成功运行。

在这里插入图片描述


三. 虚拟机 与 Docker 的区别

3.1 虚拟机

⏹常见的虚拟机软甲如下

  • 我们可以在Windows中通过WSL功能安装和使用Linux系统
  • 也可以在Mac上通过Parallels Desktop虚拟机软件运行Windows和各种Linux系统

在这里插入图片描述
⏹各种虚拟机是通过一种叫做虚拟化的技术来实现的

  • 虚拟化技术是一种将物理资源虚拟为多个逻辑资源的技术
  • 可以将一台物理服务器虚拟成多个逻辑服务器
  • 每个逻辑服务器都有自己的操作系统,CPU,内存,硬盘和网络接口等
  • 各个虚拟机之间互相隔离,可以独立运行
  • 虚拟机在一定程度上实现了资源的整合,可以将一台服务器的计算能力,存储能力,网络资源分配给多个逻辑服务器,实现多台服务器的功能,但是缺点也十分明显,每台虚拟机都需要占用大量的资源,而且启动速度也十分缓慢

在这里插入图片描述

⏹一般情况下,我们的一台服务器上只需要运行一个对外提供服务的应用程序就可以了,并不需要一个操作系统所提供的所有功能。
假设我们需要将Web服务器部署在虚拟机上,为了完成web服务器的部署,虚拟机却需要

  • 启动一个完整的操作系统,包括操作系统的内核和各种系统服务
  • 启动各种工具
  • 启动图形界面等等

这些我们并不需要的服务占用了大量的资源,导致资源浪费和自动速度慢的问题。

在这里插入图片描述

3.2 Docker

⏹Docker只是容器的技术的一种实现,是一种容器化的解决方案平台
而容器是一种虚拟化技术,和虚拟机类似,也是一个独立的环境,可以在这个环境中运行应用程序。

⏹和虚拟机不同的是,容器并不需要运行一个完整的操作系统,而是使用宿主机的操作系统,所以启动速度快。
因为所需要的资源更少,所以可以在一台物理服务器上运行更多的容器,这样就可以更好的利用服务器的资源,减少浪费。
一台物理服务器上只能运行几个虚拟机,但是可以同时运行好几百个容器。

在这里插入图片描述


四. Docker的基本架构

Docker Clinet 负责向 Docker Daemon 发送请求,Docker Daemon 接收到请求之后进行处理,并将结果返回给Docker Clinet
Docker Daemon是一个后台进程,用来接收并处理来自Docker客户端的请求。
我们在终端中输入的各种Docker命令,实际上都是通过Docker客户单发送给Docker Daemon的。

在这里插入图片描述
💥Docker中必须要了解的概念

  • images(镜像)
  • containers(容器)
  • Registry(仓库)

⏹image镜像
Docker中的镜像(images)是一个只读模板,可以用来创建容器(containers),容器是Docker的运行实例,镜像和容器就和Java中的类和实例的关系是一样的。还可以将镜像理解为一个虚拟机的快照(Snapshot),里面包含了要部署的应用程序以及它所关联的所有库。

通过images镜像,我们可以创建多个不同的Containers容器,这里的容器就像是一台台运行起来的虚拟机,里面运行了我们的应用程序,每一个容器都是独立运行的,相互之间不影响。

在这里插入图片描述


五. Dockerfile

  • Dockerfile是一个文本文件,用来告诉Docker如何来构建image镜像,这个镜像中包括了我们应用程序执行的所有命令(各种依赖,配置环境和运行应用程序所需要的所有内容)
  • Dockerfile一般会创建在项目的根目录下,在该文件中写入构建镜像所需要的所有指令,Docker会根据Dockerfile文件来构建镜像
    有了镜像之后,就可以根据镜像创建容器,然后就可以在容器中运行应用程序。

⏹Dockerfile就像是一个自动化脚本,用来创建镜像。创建镜像的过程,就好比在虚拟机中安装操作系统和软件一样。

在这里插入图片描述

相关文章:

Linux Docker的简介

参考资料 30分钟Docker入门教程 ◀ 本篇博客所有图片皆来自于该视频截图阮一峰 - Docker 入门教程 目录 一. 环境配置时可能会遇到的问题二. 什么是Docker三. 虚拟机 与 Docker 的区别3.1 虚拟机3.2 Docker 四. Docker的基本架构五. Dockerfile 一. 环境配置时可能会遇到的问题…...

极昆仑智慧与数元灵科技达成战略合作

近日,北京极昆仑智慧科技有限公司与北京数元灵科技有限公司正式签署产品级融合战略合作协议,双方将围绕 "AIBI商业智能分析" " Hybrid RAG 大模型问答" 等核心大模型应用,实现技术架构与业务场景的深度集成,…...

如何写一篇基于Spring Boot + Vue + 微信小程序的软件的接口文档

如何写一篇基于Spring Boot Vue 微信小程序的软件的接口文档 下面是一个例子,仅供参考! 基于Spring Boot Vue 微信小程序的博客系统接口文档 技术栈:Spring Boot 3.x Vue 3 Element Plus 微信小程序原生框架 文档版本:v1…...

上位机知识篇---网页端实现

一、网页端基础概念 网页的本质 网页是通过浏览器展示的超文本(HTML)内容,依赖 HTTP/HTTPS 协议 进行数据传输。组成要素: 结构层(HTML):定义页面内容和语义(如标题、段落、列表等&a…...

鼠标的拖动效果

1、变量的设置 let isDragging false; let startX; let startY; let endX; let endY; let box null;isDragging : 表示是否推拽startX、startY:表示起始坐标,相对于元素endX、endY:表示结束坐标,相对于元素box&…...

第四讲:类和对象(下)

1. 再探构造函数 • 之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅ 式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表&#xff…...

C++ vector容器存储对象和存储指针的区别(vector对象、vector指针)(存储指针时推荐使用智能指针)

文章目录 **1. 内存管理**- **存储对象**:- **存储指针**: **2. 生命周期控制**- **存储对象**:- **存储指针**: **3. 性能差异**- **存储对象**:- **存储指针**: **4. 使用场景**- **选择存储对象的情况**…...

C#和C++在编译过程中的文件区分

1. .h是头文件(Header File) 用来 声明类、函数、常量等。 通常不包含实际实现,只是“定义接口” // 示例:math_utils.h#pragma once int add(int a, int b); //定义函数名2. .cpp是源文件(Source File&…...

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Dad Jokes(冷笑话卡片)

📅 我们继续 50 个小项目挑战!—— DadJokes 组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ 豆包翻译确实可以,冷笑话应该属于各类语言比较难理解的…...

Spring AOP执行原理源码解析

对【com.example.demo.TestAspect#aopTest】连接点增加了五个通知 在调用【com.example.demo.A#testAop()】(用户自定义)方法时,Cglib拦截器对其进行了拦截 可以看到执行顺序分别是环绕前置,前置,环绕后置,…...

基于FPGA的超声波显示水位距离,通过蓝牙传输水位数据到手机,同时支持RAM存储水位数据,读取数据。

基于FPGA的超声波显示水位距离 前言一、整体框架二、代码架构1.超声波测距模块2.蓝牙数据发送模块3.数码管数据切换模块4.数码管驱动模块6.串口驱动7.顶层模块8.RAM ip核 仿真相关截图 前言 随着工业化进程的加速和环境保护意识的提升,对水资源管理和水位监测的需求…...

使用swoole作为MQTT客户端并接收实现即时消息推送

环境准备 首先需要安装swoole 可以使用pecl进行安装 ,如 pecl install swool, 注意加上版本号 或者使用构建好的docker镜像,这里使用构建好的 zacksleo/php:7.1-alpine-fpm-swoole 镜像 使用 compose 安装依赖库 composer require jesusslim/mqttcl…...

在Windows下利用LoongArch-toolchain交叉编译Qt

文章目录 0.交叉编译的必要性1.下载交叉编译工具链1.1.直接在Windows下使用mingw(不使用虚拟机)编译(还没成功,无法编译)1.2.在虚拟机中的Ubuntu中进行交叉编译 2.下载qt源码3.编译Qt3.1.创建loongarch64的mkspec3.2.创…...

如何在 React 中监听 div 的滚动事件

在 React 中监听 div 的滚动事件(scroll),可以通过为该 div 添加 onScroll 属性来实现。以下是一个基本的例子: ✅ 示例:监听 div 的滚动事件 import React, { useRef } from react;function ScrollComponent() {cons…...

AIRIOT无人机安防解决方案

随着无人机技术的飞速发展和广泛应用,其在安防领域的价值日益凸显,从关键设施巡检、大型活动安保到边境巡防、应急救援,无人机正成为立体化安防体系不可或缺的“空中哨兵”。然而,无人机安防应用蓬勃发展的同时,其自身…...

华为OD机考 - 水仙花数 Ⅰ(2025B卷 100分)

import java.util.*; public static Integer get(int count,int c){if(count<3||count>7){return -1;}//存储每位数的最高位……最低位int[] arr new int[count];List<Integer> res new ArrayList<>();for(int i(int) Math.pow(10,count-1);i<(int) Math…...

软考 系统架构设计师系列知识点之杂项集萃(81)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;80&#xff09; 第145题 商业智能是企业对商业数据的搜集、管理和分析的系统过程&#xff0c;主要技术包括&#xff08;&#xff09;。 A. 数据仓库、联机分析和数据挖掘 B. 数据采集、数据清洗…...

php apache构建 Web 服务器

虚拟机配置流程winsever2016配置Apache、Mysql、php_windows server 2016配置web服务器-CSDN博客 PHP 和 Apache 通过 ​​模块化协作​​ 共同构建 Web 服务器&#xff0c;以下是它们的交互机制和工作流程&#xff1a; ​​一、核心组件分工​​ 组件角色​​Apache​​Web …...

Ntfs!ReadIndexBuffer函数分析之nt!CcGetVirtualAddress函数之nt!CcGetVacbMiss

第一部分&#xff1a; NtfsMapStream( IrpContext, Scb, LlBytesFromIndexBlocks( IndexBlock, Scb->ScbType.Index.IndexBlockByteShift ), Scb->ScbType.Index.BytesPerIndexBuffer, &am…...

Vue3 + TypeSrcipt 防抖、防止重复点击实例

需要实现防抖应用场景&#xff1a; 点击【查询】按钮&#xff0c;发送网络请求&#xff0c;等待并接收响应数据 原来点击【查询】的代码&#xff1a; <script setup lang"ts" name"ReagentTransactionsDrawer"> ...... // 查询&#xff0c;没有防…...

SQL进阶之旅 Day 14:数据透视与行列转换技巧

【SQL进阶之旅 Day 14】数据透视与行列转换技巧 开篇 欢迎来到“SQL进阶之旅”系列的第14天&#xff01;今天我们将探讨数据透视与行列转换技巧&#xff0c;这是数据分析和报表生成中的核心技能。无论你是数据库开发工程师、数据分析师还是后端开发人员&#xff0c;行转列或列…...

打通印染车间“神经末梢”:DeviceNet转Ethernet/IP连接机器人的高效方案

在印染行业自动化升级中&#xff0c;设备联网需求迫切。老旧印染设备多采用Devicenet协议&#xff0c;而新型工业机器人普遍支持Ethernet/IP协议&#xff0c;协议不兼容导致数据交互困难&#xff0c;设备协同效率低、生产监控滞后&#xff0c;成了行业数字化转型的阻碍。本文将…...

Ubuntu挂载本地镜像源(像CentOS 一样挂载本地镜像源)

1.挂载 ISO 镜像 sudo mount -o loop /ubuntu-22.04.5-desktop-amd64.iso /mnt/iso 2.备份现有的软件源配置文件&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 3.编辑软件源配置文件 编辑 /etc/apt/sources.list sudo nano /etc/apt/sources.l…...

2025-06-02-IP 地址规划及案例分析

IP 地址规划及案例分析 参考资料 Plan for IP addressing - Cloud Adoption Frameworkwww.cnblogs.comimage-hosting/articles at master jonsam-ng/image-hosting 概述 在网络通信中&#xff0c;MAC 地址与 IP 地址分别位于 OSI 模型的数据链路层和网络层&#xff0c;二者协…...

AUTOSAR实战教程--开放式通用DoIP刷写工具OpenOTA开发计划

目录 软件概述 安装与运行 界面说明 3.1 功能区划分 3.2 状态显示 基本操作流程 4.1 DoIP连接配置 4.2 服务配置&#xff08;刷写流程&#xff09; 4.3 执行操作 4.4 保存配置 4.5 加载配置 功能详解 5.1 核心功能模块 诊断服务配置 通信设置 文件下载 工具功…...

Vue 学习路线图(从零到实战)

&#x1f3af; 学习目标&#xff1a;掌握 Vue 并能独立开发中大型项目 ✅ 适合人群&#xff1a;前端初学者、想快速上手做项目的开发者、中小型团队成员 &#x1f9ed; Vue 学习路线图&#xff08;从零到实战&#xff09; 第一阶段&#xff1a;基础语法 核心功能&#xff08;…...

AI赋能的浏览器自动化:Playwright MCP安装配置与实操案例

以下是对Playwright MCP的简单介绍&#xff1a; Playwright MCP 是一个基于 Playwright 的 MCP 工具&#xff0c;提供浏览器自动化功能不要求视觉模型支持&#xff0c;普通的文本大语言模型就可以通过结构化数据与网页交互支持多种浏览器操作&#xff0c;包括截图、点击、拖动…...

AI编程助手入门指南:GitHub Copilot、Cursor与Claude的安装与基础使用

&#x1f525; AI编程助手入门指南&#xff1a;GitHub Copilot、Cursor与Claude的安装与基础使用 你是否曾幻想过拥有一个24小时在线的编程搭档&#xff1f;它能理解你的思路、自动补全代码、解释复杂逻辑&#xff0c;甚至帮你调试错误&#xff1f;如今&#xff0c;这个幻想已成…...

Android 线性布局中常见的冲突属性总结

1. gravity vs layout_gravity 冲突原因&#xff1a;两者作用对象不同&#xff0c;混用会导致行为异常。 区别&#xff1a; android:gravity&#xff1a;父容器的属性&#xff0c;控制子元素在容器内的对齐方式。android:layout_gravity&#xff1a;子元素的属性&#xff0c;控…...

【技术笔记】MSYS2 指定 Python 版本安装方案

#工作记录 MSYS2 指定 Python 版本安装 一、前置条件 安装指定版本需要在干净的 MSYS2 环境中执行&#xff0c;为保证工具链的兼容性&#xff0c;若已安装 Python&#xff0c;需先卸载 Python 及与该版本深度绑定的工具链。具体操作如下&#xff1a; 卸载 Python&#xff1a…...