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

(一)Docker基本介绍

部署项目的发展

  • 传统部署适合需要最大性能和可靠性的场景,但在资源利用和管理方面有显著劣势。
  • 虚拟化部署提供了良好的资源利用率和隔离性,适用于需要灵活扩展和多租户环境的场景,但存在性能开销。
  • 容器部署在轻量级、可移植性和资源利用率方面表现优异,特别适合现代微服务架构和 DevOps 流程,但需要处理隔离性和安全性挑战。

选择适合的部署方式取决于具体的应用需求、性能要求、资源管理和安全考虑。

了解了项目部署的方式,接下来就开始学习当下最热门的容器技术的工具Docker


Docker 容器和传统虚拟机有区别

物理服务器

物理服务器是一种实体的、有形的计算机硬件设备,通常被安置在数据中心或服务器机房中。物理服务器是构建IT基础设施的基石,为各种云服务、虚拟化平台和大型应用提供了必要的计算资源。随着云计算和虚拟化技术的发展,许多企业选择将部分或全部工作负载迁移到云平台,但物理服务器仍然在某些特定场景下扮演着不可替代的角色,特别是在需要高性能、高安全性或特定硬件支持的情况下。

物理服务器与云服务器是虚拟化的关系

  • 物理服务器可以作为虚拟化的宿主机,运行多个虚拟机
  • 通过虚拟化技术,一台物理服务器可以被划分为多个虚拟服务器(如VPS)

VPS  vs   ECS

VPS (Virtual Private Server):

  • VPS 是在物理服务器上通过虚拟化技术创建的虚拟服务器。
  • 每个 VPS 都有独立的操作系统、存储和资源配置。
  • VPS 通常由主机服务提供商管理,用户拥有 root 访问权限。

但是VPS有个缺点,不支持自主升降级,不易动态调整,所以有了ECS

ECS (Elastic Compute Service):

  • ECS 是云服务提供商(如阿里云、亚马逊 AWS)提供的弹性计算服务。阿里的叫ECS,AWS的叫EC2
  • 它是一种虚拟化的计算资源,可以根据需求快速扩展或缩减。
  • ECS 实例通常运行在物理服务器上,但用户只需关注自己的虚拟机实例。

但是我们的服务器可能是不同的操作系统,部署应用会有各种的环境依赖问题,所以可以使用虚拟机将环境 + 应用打包

但是这种方法还是太笨重了,所以接下来引入了docker

Docker 是什么?

Docker 是一种开源平台,旨在简化应用程序的开发、部署和运行。通过使用容器技术,Docker 将应用程序及其依赖项打包到一个轻量级、独立的容器中,从而确保在任何环境中都能一致地运行。

docker源码

dockers官网

Namespace 提供了进程隔离,使得容器中的进程看到的系统资源是独立的,与其他容器或主机系统隔离。

Cgroup 用于限制、记录和隔离进程组使用的物理资源(CPU、内存、磁盘 I/O 等)

Docker 的主要特点

  1. 轻量级:Docker 容器共享主机操作系统的内核,与传统虚拟机相比,更加轻量级,启动速度更快,资源开销更小。

  2. 一致性和可移植性:Docker 容器包含应用程序及其所有依赖项,确保在不同环境(开发、测试、生产)中的一致运行,从而提高应用程序的可移植性。

  3. 隔离性:Docker 提供了进程级的隔离,每个容器都有自己独立的文件系统、网络和进程空间,确保应用程序之间的相互隔离。

  4. 高效资源利用:Docker 容器共享主机的操作系统内核,可以在同一主机上运行更多的容器,从而提高资源利用率。

  5. 易于集成和扩展:Docker 可以与持续集成和持续部署(CI/CD)工具无缝集成,支持快速开发、测试和部署应用程序。此外,Docker 生态系统中的 Docker Compose 和 Docker Swarm 等工具,使得管理和编排多个容器变得更加简单。


Docker 的基本组件

Docker Engine

  • Docker 的核心组件,包括 Docker 守护进程(daemon)和 Docker CLI(命令行接口)。Docker 守护进程负责构建、运行和管理容器,Docker CLI 提供与守护进程交互的命令行工具。

Docker Image

  • Docker 镜像是一个只读的模板,用于创建容器。它包含了运行应用程序所需的所有内容,包括代码、运行时、库和配置文件。镜像可以从公共或私有的 Docker 仓库(如 Docker Hub)中获取。

Docker Container

  • Docker 容器是镜像的一个运行实例。容器是独立、可执行的软件包,包含了运行应用程序所需的所有内容。它们可以快速启动和停止,并在不同的环境中一致地运行。

Docker Repository

  • Docker 仓库用于存储和分发 Docker 镜像。Docker Hub 是一个公共仓库,提供大量的官方和社区构建的镜像。用户也可以创建自己的私有仓库来存储自定义镜像。

Docker daemon

  • Docker daemon 监听 Docker API 请求并管理 Docker 对象,如镜像、容器、网络和数据卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。

Docker client

  • 是许多 Docker 用户与 Docker 交互的主要方式。当你使用 docker run 等命令时,客户端将这些命令发送给 dockerd 执行。Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器,并且可以与多个守护进程通信。

Docker Host

  • 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker Desktop

  • Docker Desktop 是一个适用于 Mac 和 Windows 环境的易于安装的应用程序,使你能够构建和共享容器化的应用程序和微服务。Docker Desktop 包含 Docker 守护进程(dockerd)、Docker 客户端(docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。

Docker Container 生命周期

Docker Container 生命周期,由以下五个状态组成

  1. Created state
  2. Running state
  3. Paused state/unpaused state
  4. Stopped state
  5. Killed/Deleted state

1. Created state

docker create --name <name-of-container> <docker-image-name>

2. Running state

在运行状态下,Docker 容器开始执行镜像中提到的命令。要运行 Docker 容器,请使用 docker run 命令。

docker run <container-id>
or
docker run <container-name>

docker run 命令会创建一个容器(如果该容器不存在)。在这种情况下,可以跳过创建容器的步骤。

3. Paused state/unpaused state

在暂停状态下,Docker 容器中当前执行的命令被暂停。使用 docker pause 命令来暂停正在运行的容器。

docker pause container <container-id or container-name>

注意:docker pause 会暂停容器中的所有进程。它发送 SIGSTOP 信号来暂停容器中的进程。

在取消暂停状态下,被暂停的容器一旦取消暂停就会恢复执行命令。 使用 docker unpause 命令来恢复暂停的容器。 然后,Docker 发送 SIGCONT 信号来恢复进程。

docker unpause <container-id or container-name>

4. Stopped state

在停止状态下,容器的主进程被优雅地关闭。Docker 发送 SIGTERM 信号进行优雅关闭,如果需要,会发送 SIGKILL 信号来终止容器的主进程。使用 docker stop 命令来停止容器。

docker stop <container-id or container-name>

重启 Docker 容器相当于执行 docker stop,然后执行 docker run,即停止和运行阶段。

5. Killed/Deleted state

在终止状态下,容器的主进程被突然关闭。Docker 发送 SIGKILL 信号来终止容器的主进程。

docker kill <container-id or container-name>

到此docker 容器的生命结束

参考

Docker Architecture, Life Cycle of Docker Containers and Data Management - DEV Community

docker容器和传统虚拟机有什么区别?_哔哩哔哩_bilibili

相关文章:

  • 【PYG】dataloader和densedataloader
  • 解决Linux环境Qt报“cannot find -lgl“问题
  • 2024.7.5
  • 【单链表】04 试编写算法将带头结点的单链表就地逆置,所谓“就地”是指辅助空间复杂度为0(1)。
  • VPN是什么?
  • 实验三 图像增强—灰度变换
  • Windows 11 安装 安卓子系统 (WSA)
  • Cesium与Three相机同步(3)
  • 安装局部的typeScript环境
  • 【C++】 解决 C++ 语言报错:Undefined Reference
  • window上部署sql server改动端口、和sqlserver的一些还原、批量插入存储过程的命令
  • Django 模版继承
  • Linux Shell 脚本入门教程:开启你的自动化之旅
  • Python使用(...)连接字符串
  • 微信小程序留言板1
  • #Java异常处理
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2019.2.20 c++ 知识梳理
  • Java Agent 学习笔记
  • python学习笔记 - ThreadLocal
  • SpringBoot 实战 (三) | 配置文件详解
  • ------- 计算机网络基础
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 用Python写一份独特的元宵节祝福
  • 智能合约Solidity教程-事件和日志(一)
  • 《码出高效》学习笔记与书中错误记录
  • 1.Ext JS 建立web开发工程
  • ​Java并发新构件之Exchanger
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (12)Hive调优——count distinct去重优化
  • (done) 两个矩阵 “相似” 是什么意思?
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)斐波那契Fabonacci函数
  • (六)c52学习之旅-独立按键
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET gRPC 和RESTful简单对比
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 解决重复提交问题
  • .net的socket示例
  • .Net小白的大学四年,内含面经
  • .NET运行机制
  • @Bean有哪些属性
  • @ModelAttribute使用详解
  • @property括号内属性讲解
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [100天算法】-实现 strStr()(day 52)