• 下一代Docker来了,会让部署更加丝滑吗?


    下一代Docker来了,会让部署更加丝滑吗?

    目录

    一、Docker是什么?

    二、Docker 的几个名词概念

    2.1、镜像(Image)

    2.2、容器 (Container)

    2.3、仓库 (Repository)

    三、容器和虚拟机比较

    四、Docker 运行环境

    五、Docker AI 

    5.1、Docker AI介绍

    5.2、Docker AI 优点

    六、问题讨论

    6.1、在开发者眼中,Docker有怎样通俗易懂的理解方式?

    6.2、都在夸Docker的优点,那它有什么缺点吗?

    6.3、Docker与AI结合,会让部署更加丝滑吗?

    七、参考资料:


            在生成式AI应用中,Docker容器逐渐成为了最主流的部署方式,它可以屏蔽环境差异,使程序在任何环境上都有一致的表现,实现“build once,run everywhere”。近日,Dockercon大会发布了Docker与AI结合的新型产品,据悉1小时构建可缩短至1.5分钟,那么开发者们你们觉得Docker与AI结合,会让变成更加丝滑吗?

    一、Docker是什么?

            Docker 是一个开源的容器化平台,它可以让开发者将应用程序与其依赖项一起打包为一个可移植的容器,它可以在任何环境中运行。Docker 还包括一个容器注册表,可以让开发者分享和使用容器。Docker 容器可以快速部署、升级和管理,因此它越来越受到开发者和企业的青睐,被广泛应用于云计算、微服务、DevOps 等领域。

            docker是一个用Go语言实现的开源项目,可以屏蔽环境差异,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,真正实现“build once, run everywhere”。

            docker的另一个好处就是快速部署,因为容器启动速度非常快,只要确保一个容器中的程序正确运行,那么就能确信无论在生产环境部署多少都能正确运行。

    Docker的优点包括:

    Docker的优点:

    • 1. 轻量化:

            Docker容器相对于传统虚拟化技术来说非常轻量,它可以在同一台物理机器上运行成百上千个容器而不会导致性能下降。Docker容器相比于虚拟机更轻量化,可以更快速地启动和关闭,占用更少的资源。

    • 2. 可移植性:

            Docker容器可以在不同操作系统和不同环境下运行,这使得应用程序更容易在不同的环境中运行,实现了应用程序的可移植性。

    • 3. 一致性:

            Docker容器可以确保应用程序在任何环境中运行的一致性,减少了由于环境变化引起的问题。通过Docker容器,开发者可以在不同的环境中(比如开发、测试、生产)运行同样的应用程序,避免了由于环境不同而导致的问题。

    • 4. 安全性:

            Docker容器的隔离性可以确保应用程序在同一主机上运行时不会相互干扰,Docker可以为每个容器提供独立的文件系统和网络空间,在容器之间实现了隔离,避免了应用程序之间互相影响,提高了安全性。

    • 5. 可伸缩性:

            Docker容器的可伸缩性很高,可以方便地进行水平扩展。

    • 6. 快速部署:

            Docker能够快速地创建、启动和关闭容器。这使得应用程序的部署过程可以被大大缩短,减少了开发和运维人员的工作量。

    • 7. 资源利用率高:

            Docker容器可以在同一台物理机器上运行多个应用程序,从而提高了物理资源的利用率,减少了成本。

    • 8. 生态系统强大:

            Docker生态系统非常强大,有很多第三方工具和应用程序可以与Docker容器进行集成,从而提供更多的功能和服务。

    二、Docker 的几个名词概念

    2.1、镜像(Image)

            Docker 镜像是一个可执行的包,其中包含了运行一个应用程序所需的所有内容,例如代码、运行时环境、系统库、工具等。镜像是 Docker 技术的核心概念之一,它实际上是 Docker 容器运行时的基础,可以理解为容器的模板。

            镜像是通过 Dockerfile 定义的,Dockerfile 是一个包含构建指令的文本文件,它用来构建一个 Docker 镜像。Dockerfile 通过一系列的指令来描述需要构建的应用程序镜像的内容和构建流程。Docker 镜像可以被保存在 Docker hub 或其他 Docker 镜像仓库中,并通过 Docker 客户端(CLI)来管理和使用。

            Docker 的镜像就相当于是一个个不同用途的集装箱的集合,A空集装箱可以用来装载水果,B 集装箱可以用来装载蔬菜,C 集装箱可以用来装载海鲜……各种不同的东西可以用不同的集装箱装载,由于有集装箱的依托存储,不同的东西可以和谐的共同存放在一起,而且运输极为方便。

            集装箱等于是一个固定框架,还可以在框架的基础上干自己所需要的事(例如按存放的货物不同配置存储环境,例如生鲜类需要配置冷藏环境),在修改完工后(装完货后),迁移整个环境依旧非常方便(整个集装箱可以随意搬动)。

            类比到实际应用里,就是各种配置好的运行环境,例如 Nginx 镜像,MySQL 镜像,Ubuntu 镜像等。

            这些镜像里,有的是整套程序环境(已经装有部分货物的箱子),有的则只包含最基础的系统环境(空箱子)

            而利用镜像创建的容器环境里,用户又可以继续进行随意修改(把箱子里已有货物拿出来换成别的,或者放更多货物进去等),改完还能再次打包后进行方便的传输。

            总体来说,Docker 中的镜像就是相当于一个框架蓝本,选用不同的蓝本,就可以直接构建出各种不同功能的现成系统环境。

    2.2、容器 (Container)

            容器一词源自英文container,但其实container还有集装箱的意思,

            容器是由镜像创建而成的虚拟机,一个镜像可以创建无数个对应的容器,比如下载了一个 CentOS 镜像,那么就可以创建出无数个容器,每个容器都等于一个小虚拟机,里面运行着 CentOS 系统。

            Docker 中的容器是一种轻量级的虚拟化技术,它可以在同一台主机上隔离应用程序及其依赖项,提供近乎于完全的隔离性,并且可以快速、可靠地分发和部署应用程序。

            容器是运行 Docker 镜像的实例,它包含了所有应用程序及其依赖项,设置和配置等信息,容器可以被快速地启动、停止、销毁或者迁移。容器之间互相隔离,每个容器都有自己独立的文件系统、网络接口、进程空间和系统资源,因此应用程序和其依赖项可以在容器中以一种相对独立的方式运行,而不会受到宿主机操作系统的影响。

            容器的出现,使得应用程序的部署和管理变得更加容易和高效,可以有效避免软件开发和部署中的一些常见问题,如环境不一致、依赖项冲突等。


     

    2.3、仓库 (Repository)

            仓库实际也就是一个镜像市场的作用,从市场里可以下载到各种所需的镜像,自己修改完的镜像也可以选择上传到仓库里提供他人下载。

            Docker 默认官方仓库为 Docker Hub 。仓库还分为公共和私人的,私人仓库可以自己搭建,用于存放私有镜像。

            Docker 仓库是存储和分享 Docker 镜像的场所。它是一个中央注册表,包含公共和私有仓库。公共仓库是任何人都可以自由使用和分享的仓库,其中包括了 Docker 官方的仓库。私有仓库只能由持有者或授权用户访问和使用。Docker 镜像可以从仓库中拉取,也可以推送到仓库中。

            每个 Docker 仓库都有一个名称,也被称为命名空间,它用于指向特定的仓库。例如,Docker 官方的仓库名称是“docker”,而其他仓库会有自己的名称。

            Docker 仓库中的每个镜像都具有一个唯一的标签。标签可以用于表示不同版本或配置的镜像,以便用户可以根据需要选择它们。

    三、容器和虚拟机比较

            容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器虚拟化的是操作系统而不是硬件。容器更便携、更高效。

    容器
            容器是应用层的抽象,它将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为隔离进程运行。容器占用的空间比 VM 少(容器映像大小通常为 数十 MB),可以处理更多应用程序,并且需要更少的 VM 和操作系统。

    虚拟机
            虚拟机 (VM) 是将一台服务器转换为多台服务器的物理硬件的抽象。虚拟机监控程序允许多个 VM 在一台计算机上运行。每个 VM 都包含操作系统、应用程序、必要的二进制文件和库的完整副本,占用数十 GB。 VM 的启动速度也可能很慢。

    容器和虚拟机一起
            容器和 VM 一起使用为部署和管理应用提供了极大的灵活性

     

    四、Docker 运行环境

             Docker 支持多种编程语言和应用程序框架,并可以在多种操作系统上运行,包括 Linux、Windows 和 macOS 等。

    五、Docker AI 

    5.1、Docker AI介绍

    (以下介绍内容转载自腾讯云,地址见附录)

            Docker AI 的推出是 Docker 宣布的一系列新的 AI/ML 功能、内容和合作伙伴关系之一,旨在帮助开发人员在其应用程序中快速、安全地利用 AI/ML 的强大功能。通过将这些扩展功能添加到当前的 Docker 开发工具、内容和服务套件中,Docker “满足了开发人员的需求”,提高了他们的现有技能和工作流程的生产力。

            Docker CEO Scott Johnston 表示:“代码生成 AI 在编写源代码时提高了开发者的生产力,这是非常出色的。但除了源代码之外,应用程序还由 Web 服务器、语言运行环境、数据库、消息队列等多种技术组成。Docker AI 帮助开发者在其 '内部循环' 中快速且安全地定义和解决应用程序的各方面问题。”

            近年来,生成式 AI 和大语言模型(LLM)的迅速发展已经通过代码生成工具如 GitHub Copilot 和 Tabnine 将开发者的工作效率提高了 10 倍。

            然而,这些代码生成工具仅占应用程序的 10% 到 15%,其余 85% 到 90% 由数据库、语言运行环境、前端等组成,这些组件是由 Dockerfile、Docker Compose 文件和 Docker 镜像定义的。自 Docker 诞生以来,Docker 社区选择通过 GitHub、Docker Hub 和其他公共论坛与其他开发者分享这些知识。Docker AI 将使开发者社区能够从这一共享的知识中获益。

            IDC 的研究显示,生成式 AI 工具通过提高生产力、加速开发效率以及为高价值任务腾出更多时间,提高了开发者的幸福感。Docker AI 的指导不仅将帮助实现这些收益,还将为开发者在整个应用程序堆栈中设定成功的基础。通过利用 Docker 开发者社区的集体知识,开发者可以放心,Docker AI 的是基于最佳实践的,它会推荐最安全和最新的应用程序镜像。Docker AI 在开发者编辑 Dockerfile 或 Docker Compose 文件、调试本地 docker build 或在本地运行测试时,为开发者提供特定上下文的自动指导。Docker AI 使开发者能够从数百万使用 Docker 的开发者中汲取智慧(其中一些开发者有超过 10 年的经验),通过自动生成最佳实践并为其应用程序选择最新的安全镜像。使用 Docker AI,开发者能够更多地专注于他们的应用程序,而不是工具和基础架构。

            Docker AI 注册网址为:https://www.docker.com/ai-early-access-program

    5.2、Docker AI 优点

            使用 Docker 的人工智能和机器学习,简化并加速您的 AI/ML 开发工作流程
            AI 和 ML 现在是许多应用程序的一部分,增加了开发环境的复杂性。Gartner表示,到90年,2027%的应用程序将包含AI/ML。

            Docker 消除了重复、平凡的配置任务,并在整个开发生命周期中使用,以实现快速、轻松和可移植的应用程序开发。借助 Docker,AI/ML 开发人员在环境设置上花费的时间更少,而将更多的时间用于编码。

    • 更快的编码时间

            十多年来,开发人员一直依靠 Docker 来加速其开发环境的设置和部署。现代 AI/ML 应用程序非常复杂,Docker 为开发人员节省了加速创新的时间。

    • 数以百计的AI / ML模型和图像

            Docker Hub 上提供了数百个 AI/ML 映像。来自行业领先的 AI/ML 工具(如 PyTorch、Tensorflow 和 Jupyter)的经过验证的图像提供了可信且经过测试的内容,以确保 AI/ML 从业者有一个强大的起点。

    • 再现性

            AI/ML 模型需要一致的设置和部署才能生成准确的结果。Docker 允许团队确保其模型和环境对于每个部署都是相同的。

    • 默认安全

            受信任的内容、增强的隔离、注册表访问管理和 Docker Scout 都致力于为开发人员团队提供安全的环境。

    六、问题讨论

    6.1、在开发者眼中,Docker有怎样通俗易懂的理解方式?

            Docker是一种容器化技术,可以将应用程序和其依赖的所有组件打包成一个可移植的容器,以便在不同的环境中部署和运行。与虚拟化技术相比,Docker容器更加轻量化,启动更快,占用资源更少,同时也更加便捷和灵活。可以将Docker容器看作是一种微型的虚拟机,它们可以在同一主机上运行多个容器,每个容器都是相互隔离的,并且具有自己的文件系统、网络和进程空间。这使得开发者能够更加高效地进行应用程序的开发、测试和部署,同时也为应用程序的管理和维护带来了更多的便利。

            Docker是一个开源工具,它让开发人员可以在容器中打包、运输和运行应用程序。容器是轻量级的、可移植的、自包含的独立环境,它可以在任何机器上运行,而不需要任何修改。

            假设你需要在你的电脑上运行一个应用程序,但你发现应用程序在不同的环境中会发生问题。比如,你在Windows电脑上开发了一个应用程序,但当你将它运行在Linux服务器上时,它不能正常工作。

            这时候,你可以使用Docker来打包你的应用程序和需要的环境,这样就可以确保你的应用程序在不同的机器上都能正常运行了。

            Docker基于镜像(Image)的概念,镜像就是一个文件,它包含了应用程序和所需的依赖环境。你可以将镜像上传到Docker仓库(Docker Hub)中,当需要在其他机器上运行应用程序时,只需要从Docker仓库中下载镜像,再通过容器(Container)运行即可。

            容器是从镜像中创建出来的,它是一个隔离的运行环境。每个容器都有自己的文件系统、网络等资源,不会影响到宿主机以及其他容器。你可以在一个宿主机上运行多个容器,每个容器之间互不干扰。

            Docker可以让开发人员更加轻松地管理应用程序和依赖环境,同时也能够提高应用程序的可移植性和可靠性。

    6.2、都在夸Docker的优点,那它有什么缺点吗?

    Docker的缺点:

    Docker的一些缺点:

    • 1. 资源消耗:

            Docker容器运行时需要占用一定的CPU、内存和磁盘空间,虽然Docker容器比虚拟机更轻量,但是如果运行大量的容器,仍然会消耗大量的系统资源。

    • 2. 安全问题:

            由于Docker容器之间共享同一内核,容器之间的安全性和隔离性可能存在一定的风险。

            Docker的隔离性并不完全,容器之间可能会存在一定的安全问题,如容器之间的互访、特权容器的漏洞等。

            Docker容器共享主机的操作系统,如果容器中的应用程序存在漏洞,那么可能会影响到主机系统的安全。虽有工具和最佳实践可以帮助提高Docker的安全性,但这仍然需要开发者和运维人员投入额外的时间和精力。

    • 3. 复杂性:

    Docker的操作相对于传统的虚拟机来说更为复杂,需要掌握一定的Docker技术。Docker需要掌握一定的技术和知识才能进行操作,对于初学者来说可能较为困难。

    • 4. 存储问题:

            Docker容器内的数据与容器本身分离,当容器被删除时,数据也会被删除,为了避免数据丢失,需要进行备份和恢复。

    Docker默认使用AUFS存储驱动,对于大量的IO操作会出现问题,需要使用其他存储驱动。

    • 5. 容器数量限制:

            Docker默认设置了一个容器数量限制,单机上的容器数目有一定限制,需要手动进行设置。

    • 6. 性能问题:

            Docker容器相比于直接运行应用程序性能会略有损失,需要适当调优。

    • 7.数据持久性:

            Docker容器的设计理念是无状态的,也就是说,当容器停止运行时,其中的数据会被清除。虽然可以通过数据卷(volume)和数据容器等方式来实现数据的持久化,但是这会增加配置和管理的复杂性。

    • 8.学习曲线:

            尽管Docker为软件开发和部署带来了许多便利,但是要熟练使用Docker,还需要投入一定的时间和精力来学习。

    • 9.兼容性问题:

            虽然Docker的目标是“Build once, run anywhere”,但是在实际使用中,由于各种原因(比如操作系统的差异,驱动程序的问题等),可能并不能100%实现这个目标。

    • 10.跨平台:

            Docker最初是为Linux设计的,虽然现在也支持Windows和Mac,但是在这些平台上,Docker需要运行在一个轻量级的虚拟机中,这可能会带来一些性能和兼容性问题。

    • 11. 官方支持:

            由于Docker是一个开源的项目,官方支持有限,使用者需要通过社区、文档等手段获取相关的技术支持。

    6.3、Docker与AI结合,会让部署更加丝滑吗?

    是的,Docker与AI的结合可以让部署更加丝滑。

    • 1、Docker可以提供一个可移植的环境,使得AI应用程序可以在不同的操作系统和平台上运行,从而使部署更加方便和快速。
    • 2、Docker还可以提供一个容器化的环境,让AI应用程序可以轻松地在不同的主机之间迁移和扩展。
    • 3、Docker还可以提供一个标准化的部署流程,使得AI应用程序的部署更加可靠和一致。这可以帮助开发人员减少出错的可能性,并使得整个部署过程更加自动化和高效。
    • 4、Docker容器化技术可以让开发人员和数据科学家轻松地打包、分发和运行AI工作负载,以加速开发和部署AI应用程序。
    • 5、Docker 消除了重复、平凡的配置任务,并在整个开发生命周期中使用,以实现快速、轻松和可移植的应用程序开发。借助 Docker,AI/ML 开发人员在环境设置上花费的时间更少,而将更多的时间用于编码。

            因此,结合Docker与AI可以使得应用程序的部署更加丝滑,使得开发人员可以更加专注于开发AI算法和模型。可以让部署更加丝滑和高效,为企业和开发人员带来更大的价值。

    七、参考资料:

    Docker: Accelerated Container Application Development

    什么是Docker?看这一篇干货文章就够了! - 知乎

    Docker AI 帮助开发人员构建GenAI应用程序-腾讯云开发者社区-腾讯云 (tencent.com)

               推荐阅读:

  • 相关阅读:
    C语言实现贪吃蛇[内附详细步骤]
    【腾讯云 HAI域探秘】浅尝一番AI绘画
    赋能每一氪,吉利集团 · 同星用户日圆满落幕
    springcloudAlibaba之Nacos服务注册源码分析
    wordpress全站开发指南-面向开发者及深度用户(全中文实操)--wordpress是什么
    Response Header中不暴露Server(IIS)版本、ASP.NET及相关版本等信息
    JSTL 标签库
    加码企业服务,阿里云发布计算巢加速器
    读取yml文件
    (2022版)一套教程搞定k8s安装到实战 | PV/PVC
  • 原文地址:https://blog.csdn.net/weixin_69553582/article/details/133752044