【Docker】Docker简介_运行原理

1、简介

1.1基本概念

  • 容器:容器是Docker的基本部署单元。它是一个轻量级的、独立的运行时环境,包含应用程序及其相关依赖。容器利用Linux内核的命名空间和控制组技术,实现了隔离性和资源管理,使得应用程序在不同的容器中运行不会相互影响。
  • 镜像:镜像是用于创建容器的模板。它包含了一个完整的文件系统,其中包括应用程序运行所需的所有文件、依赖和配置信息。镜像是不可变的,通过Docker镜像可以创建多个相同的容器实例。
  • 仓库:仓库是用于存储和分发Docker镜像的地方。最常用的公共镜像仓库是Docker Hub,上面有大量的官方和社区共享的镜像。此外,还可以搭建私有的镜像仓库,用于存放自己的镜像

1.2用途

  1. 提升开发效率:Docker可以快速搭建开发环境,节省大量时间。通过Docker,开发者可以轻易地让多个服务在有限的内存环境中运行。
  2. 构建环境:对于需要构建源码的场景,Docker可以提供一个预配置好的环境,省去了逐一安装软件的繁琐过程。
  3. 微服务:Docker支持微服务架构,可以将每个服务打包为一个Docker镜像并使用docker-compose来模拟生产环境。
  4. 自动测试:Docker可以与自动化测试紧密集成,通过镜像快速部署测试环境,提高测试效率。
  5. 部署过程:Docker镜像可以实现自我部署,降低硬件要求和应用环境之间的耦合度。
  6. 持续部署:Docker天生适合持续集成/持续部署,可以简化部署流程,加速应用发布。

1.3组成部分

  • DockerClient客户端:用于与Docker守护进程通信,提供用户与Docker的交互界面。
  • Docker Daemon守护进程:在宿主机上运行,接收来自DockerClient的请求,并管理Docker对象(如镜像、容器等)。
  • Docker Image镜像:如上所述,是创建容器的模板。
  • Docker Container容器:如上所述,是Docker的基本部署单元。

1.4Docker 架构

  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
  • Docker 容器通过 Docker 镜像来创建。
  • 容器与镜像的关系类似于面向对象编程中的对象与类。

|------------|----------|
| Docker | 面向对象 |
| 容器 | 对象 |
| 镜像 | 类 |

2、运行原理

2.1Docker的运行流程

  1. 安装与配置:首先,用户需要在宿主机上安装Docker软件,并进行必要的配置,如设置Docker仓库源、安装Docker软件包等。
  2. 获取镜像:用户可以通过Docker Hub或其他Docker仓库获取所需的镜像。这些镜像可以是官方提供的,也可以是用户自己创建的。
  3. 创建容器 :使用docker run命令,基于指定的镜像创建一个新的容器实例。Docker会加载镜像中的文件系统,并为容器分配所需的资源(如CPU、内存、网络等)。
  4. 运行容器:容器创建后,Docker会启动容器中的进程,并运行应用程序。容器与宿主机之间通过命名空间(Namespace)和控制组(Cgroup)技术实现隔离,确保容器内的进程不会干扰到宿主机或其他容器的运行。
  5. 管理容器 :用户可以使用Docker命令(如docker startdocker stopdocker restart等)来管理容器的运行状态。同时,Docker还提供了丰富的API接口,允许用户通过编程方式管理容器。

2.2核心组件

  1. Docker Client:Docker客户端是用户与Docker守护进程通信的桥梁。用户通过Docker客户端发送请求给Docker守护进程,后者负责执行相应的操作。
  2. Docker Daemon(守护进程):Docker守护进程是Docker架构中的主体部分,它负责接收Docker客户端的请求,并管理Docker对象(如镜像、容器等)。Docker守护进程提供了Docker Server的功能,使其能够接受来自客户端的请求。
  3. Docker Engine:Docker引擎是Docker的核心组件之一,它包含了Docker守护进程、客户端工具(docker命令)和REST API。Docker引擎负责执行Docker内部的一系列工作,如创建容器、运行应用程序等。
  4. Docker Registry:Docker仓库是存储和分发Docker镜像的地方。用户可以从Docker仓库中下载所需的镜像,也可以将自己的镜像推送到仓库中供其他人使用。
相关推荐
雪域迷影7 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
福大大架构师每日一题8 小时前
22.1 k8s不同role级别的服务发现
容器·kubernetes·服务发现
莹雨潇潇8 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
tangdou3690986559 小时前
1分钟搞懂K8S中的NodeSelector
云原生·容器·kubernetes
tangdou36909865512 小时前
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
docker·容器
later_rql12 小时前
k8s-集群部署1
云原生·容器·kubernetes
漫无目的行走的月亮15 小时前
在Docker中运行微服务注册中心Eureka
docker
大G哥17 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
大道归简18 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
zeruns80219 小时前
如何搭建自己的域名邮箱服务器?Poste.io邮箱服务器搭建教程,Linux+Docker搭建邮件服务器的教程
linux·运维·服务器·docker·网站