Docker:基本介绍

目录

前言

一、为什么引入容器部署?

1.1 什么是应用程序?

1.2 部署方式发展史

1.3 传统应用程序部署方式

1.4 容器部署

二、Docker VS 虚拟机

2.1 物理服务器

2.2 云服务

2.3 VPS  vs   ECS

2.3.1 VPS (Virtual Private Server):

2.3.2 ECS (Elastic Compute Service):

2.4 Docker 是什么?

2.4.1 Docker的本质

2.5 为什么Docker可以减轻“打包”步骤?

2.6 Docker 的主要特点

三、Docker 的基本组件

3.1 Docker Engine

3.2 Docker Image

3.3 Docker Container

3.4 Docker Repository

3.5 Docker daemon

3.6 Docker client

3.7 Docker Host

3.8 Docker Desktop

四、Docker Container 生命周期

4.1 Created state

4.2 Running state

4.3 Paused state/unpaused state

4.4 Stopped state

4.5 Killed/Deleted state


前言

本章介绍当下最流行的应用程序部署和管理方法——Docker。Docker的本质是一种容器化技术,它利用Linux内核的特性(如命名空间和控制组)来创建轻量级、隔离的运行环境。首先,我们需要知道为什么要学习这个工具,然后简单的要了解一下他有什么功能,组件等。

接下来需要你携带这几个问题阅读本章内容:

  • 什么是应用程序?
  • 为什么使用Docker可以简化部署呢?
  • 为什么Docker可以创建轻量级、隔离的运行环境?

一、为什么引入容器部署?

1.1 什么是应用程序?

应用程序是为了完成特定任务或提供特定服务而设计的软件。它可以是简单的单一程序,也可以是复杂的多组件系统。

我们可以把它分为应用层和实现层,用户需要简单的使用应用层的接口,就需要程序员解决其代码内部环境的复杂依赖关系。

  • 应用层:从用户需求出发的,如:想听音乐,拍照,聊天
  • 实现层:从程序员技术实现上的,如:编解码,网络通信,UI

所有的应用程序都有依赖关系,如第三方软件包,系统库,数据库等,其中管理应用程序最复杂的就是解决配置和依赖性的相互冲突,当然有的时候使用不同版本的程序也会冲突,"在我的机器上能运行"问题╮(╯_╰)╭

所以解决依赖性管理的整正解决方案就是隔离

1.2 部署方式发展史

1.3 传统应用程序部署方式

传统上,应用程序通常直接部署在物理服务器或虚拟机上。有很多缺点

  • 环境不一致:"在我的机器上能运行"的问题。
  • 资源利用率低:单一应用往往无法充分利用服务器资源,多个应用部署在同一服务器可能造成冲突
  • 扩展性差:横向扩展困难,通常需要购买新的物理服务器,纵向扩展(增加配置)常需要停机
  • 维护复杂且成本高:更新和补丁管理复杂
  • 效率低下:部署过程繁琐,容易出错

1.4 容器部署

容器化部署通过提供一致的运行环境、提高资源利用率、简化部署流程、增强可扩展性和可移植性,有效解决了传统部署方式的诸多问题。它不仅改变了应用程序的部署方式,也推动了整个软件开发和运维流程的变革。

相信以上的内容已经可以了解为什么要学习Docker了,接下来就开始了解最热门的容器技术的工具Docker


二、Docker VS 虚拟机

总结比较:

  1. 资源效率:Docker 容器更轻量级,资源利用率更高。
  2. 启动速度:Docker 容器启动速度快(秒级),而虚拟机启动较慢(分钟级)。
  3. 隔离程度:虚拟机提供更强的隔离性,而 Docker 容器是进程级隔离。
  4. 操作系统支持:虚拟机可以运行不同的操作系统,Docker 主要支持 Linux(Windows 容器正在发展)。
  5. 性能:Docker 容器性能接近原生,虚拟机有一定性能开销。
  6. 便携性:Docker 容器更容易分享和部署。
  7. 应用场景
    • Docker 适合微服务架构、持续集成/部署、开发测试环境。
    • 虚拟机适合需要完整 OS 隔离的场景,如运行不同操作系统。
  8. 安全性:虚拟机提供更高级别的安全隔离。
  9. 存储空间:Docker 镜像通常较小(MB 级),虚拟机镜像较大(GB 级)。
  10. 开发环境一致性:Docker 在保证开发、测试、生产环境一致性方面表现更好。

2.1 物理服务器

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

2.2 云服务

云服务器是一种通过互联网提供的虚拟化计算资源,具有弹性扩展、按需付费、自助管理和高可用性等特点,使用户能够灵活、经济地获取和管理IT基础设施,适用于各种规模的应用部署和运算需求。注意:各个云服务厂商对应的产品名称是不一样的,要自行类比

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

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

2.3 VPS  vs   ECS

2.3.1 VPS (Virtual Private Server):

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

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

2.3.2 ECS (Elastic Compute Service):

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

但是我们的服务器可能是不同的操作系统,部署应用会有各种的环境依赖问题,所以可以使用虚拟机将环境 + 应用将其“打包”但是这种方法还是太笨重了,为了减轻“打包环境”,需要使用docker

2.4 Docker 是什么?

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

2.4.1 Docker的本质

Docker是基于进程的技术,但它通过Linux内核的特性提供了更高级别的抽象和管理。可以说,Docker容器是一种特殊的、受控的、隔离的进程运行环境。它既是进程,又比普通进程更加强大和灵活

docker源码

dockers官网

2.5 为什么Docker可以减轻“打包”步骤?

Docker的本质是一种容器化技术,它利用Linux内核的特性(如命名空间和控制组)来创建轻量级、隔离的运行环境。

关键点:

  1. 隔离环境:Docker提供了一种方法来打包应用及其依赖,使其在不同环境中一致运行。
  2. 资源管理:Docker使用Linux的cgroups(控制组)来限制和管理容器的资源使用。
  3. 文件系统隔离:使用联合文件系统和写时复制技术来管理容器的文件系统
  • Namespace (命名空间) 提供了进程隔离,使得容器中的进程看到的系统资源是独立的,与其他容器或主机系统隔离。
  • Cgroup (Linux控制组)用于限制、记录和隔离进程组使用的物理资源(CPU、内存、磁盘 I/O 等)

Linux 控制组(cgroup)

明确地告诉内核,必须为进程分配多少CPU和 RAM等资源。 因 为可以将相关的进程添加到一个组, CPU调度器更容易决定如何为组成员分配资源。 cgroup 的使用是必要的,因为容器和虚拟机不同,虚拟机有控制所有资源、实施合理资源分配的虚  拟化管理器,而容器对操作系统来说与常规的进程相似, cgroup试图公平地分配资源

Namespace

Linux 容器提供的隔离是由 Linux 内核的命名空间特性提供的。

目前有6种命名空间:

• IPC (进程间通信)

• Mount (文件系统和挂载点)

• Network (联网)

• PID (进程)

• User (用户 ID)

• UTS (主机名)

每个命名空间提供应用程序之间的边界。 在一个或者多个Linux命名空间内运行时,就称应用程序运行于一个容器之中。

2.6 Docker 的主要特点

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

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

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

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

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


三、Docker 的基本组件

3.1 Docker Engine

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

3.2 Docker Image

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

3.3 Docker Container

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

3.4 Docker Repository

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

3.5 Docker daemon

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

3.6 Docker client

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

3.7 Docker Host

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

3.8 Docker Desktop

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

四、Docker Container 生命周期

理解 Docker 容器的生命周期对于有效管理和维护 Docker 环境至关重要,特别是在设计容器化应用和自动化部署流程时。

Docker 的生命周期指的是 Docker 容器从创建到销毁的整个过程,由以下五个状态组成

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

4.1 Created state

创建:这个阶段包括构建或拉取镜像,然后创建容器。容器被创建但还未启动。

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

4.2 Running state

运行:容器被启动,其中的应用程序开始执行。这是容器的主要工作阶段

要运行 Docker 容器,请使用 docker run 命令。

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

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

4.3 Paused state/unpaused state

暂停/恢复(可选):容器可以被暂停,暂时停止其中的所有进程,之后可以被恢复。

使用 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.4 Stopped state

停止:容器可以被停止,可以是优雅停止或强制停止。

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

docker stop <container-id or container-name>

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

4.5 Killed/Deleted state

销毁:不再需要的容器可以被删除,相关的镜像也可以被清理。

Docker 发送 SIGKILL 信号来终止容器的主进程。

docker kill <container-id or container-name>

到此docker 容器的生命结束

关键点

  • 容器可以在停止和运行状态之间多次切换。
  • 即使容器停止,其文件系统也会保留,直到容器被显式删除。
  • 使用数据卷可以在容器生命周期之外持久化数据。
  • 容器的重启策略定义了它在退出时的行为。
  • 健康检查可以监控容器内应用的状态。

到此就结束了Docker基础学习,后续还会有更加有趣的docker知识(́◉◞౪◟◉‵)


参考

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

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

4、Docker能做什么_哔哩哔哩_bilibili

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值