目录
一、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 容器可以快速部署、升级和管理,因此它越来越受到开发者和企业的青睐,被广泛应用于云计算、微服务、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 镜像是一个可执行的包,其中包含了运行一个应用程序所需的所有内容,例如代码、运行时环境、系统库、工具等。镜像是 Docker 技术的核心概念之一,它实际上是 Docker 容器运行时的基础,可以理解为容器的模板。
镜像是通过 Dockerfile 定义的,Dockerfile 是一个包含构建指令的文本文件,它用来构建一个 Docker 镜像。Dockerfile 通过一系列的指令来描述需要构建的应用程序镜像的内容和构建流程。Docker 镜像可以被保存在 Docker hub 或其他 Docker 镜像仓库中,并通过 Docker 客户端(CLI)来管理和使用。
Docker 的镜像就相当于是一个个不同用途的集装箱的集合,A空集装箱可以用来装载水果,B 集装箱可以用来装载蔬菜,C 集装箱可以用来装载海鲜……各种不同的东西可以用不同的集装箱装载,由于有集装箱的依托存储,不同的东西可以和谐的共同存放在一起,而且运输极为方便。
集装箱等于是一个固定框架,还可以在框架的基础上干自己所需要的事(例如按存放的货物不同配置存储环境,例如生鲜类需要配置冷藏环境),在修改完工后(装完货后),迁移整个环境依旧非常方便(整个集装箱可以随意搬动)。
类比到实际应用里,就是各种配置好的运行环境,例如 Nginx 镜像,MySQL 镜像,Ubuntu 镜像等。
这些镜像里,有的是整套程序环境(已经装有部分货物的箱子),有的则只包含最基础的系统环境(空箱子)
而利用镜像创建的容器环境里,用户又可以继续进行随意修改(把箱子里已有货物拿出来换成别的,或者放更多货物进去等),改完还能再次打包后进行方便的传输。
总体来说,Docker 中的镜像就是相当于一个框架蓝本,选用不同的蓝本,就可以直接构建出各种不同功能的现成系统环境。
容器一词源自英文container,但其实container还有集装箱的意思,
容器是由镜像创建而成的虚拟机,一个镜像可以创建无数个对应的容器,比如下载了一个 CentOS 镜像,那么就可以创建出无数个容器,每个容器都等于一个小虚拟机,里面运行着 CentOS 系统。
Docker 中的容器是一种轻量级的虚拟化技术,它可以在同一台主机上隔离应用程序及其依赖项,提供近乎于完全的隔离性,并且可以快速、可靠地分发和部署应用程序。
容器是运行 Docker 镜像的实例,它包含了所有应用程序及其依赖项,设置和配置等信息,容器可以被快速地启动、停止、销毁或者迁移。容器之间互相隔离,每个容器都有自己独立的文件系统、网络接口、进程空间和系统资源,因此应用程序和其依赖项可以在容器中以一种相对独立的方式运行,而不会受到宿主机操作系统的影响。
容器的出现,使得应用程序的部署和管理变得更加容易和高效,可以有效避免软件开发和部署中的一些常见问题,如环境不一致、依赖项冲突等。
仓库实际也就是一个镜像市场的作用,从市场里可以下载到各种所需的镜像,自己修改完的镜像也可以选择上传到仓库里提供他人下载。
Docker 默认官方仓库为 Docker Hub 。仓库还分为公共和私人的,私人仓库可以自己搭建,用于存放私有镜像。
Docker 仓库是存储和分享 Docker 镜像的场所。它是一个中央注册表,包含公共和私有仓库。公共仓库是任何人都可以自由使用和分享的仓库,其中包括了 Docker 官方的仓库。私有仓库只能由持有者或授权用户访问和使用。Docker 镜像可以从仓库中拉取,也可以推送到仓库中。
每个 Docker 仓库都有一个名称,也被称为命名空间,它用于指向特定的仓库。例如,Docker 官方的仓库名称是“docker”,而其他仓库会有自己的名称。
Docker 仓库中的每个镜像都具有一个唯一的标签。标签可以用于表示不同版本或配置的镜像,以便用户可以根据需要选择它们。
容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器虚拟化的是操作系统而不是硬件。容器更便携、更高效。
容器
容器是应用层的抽象,它将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为隔离进程运行。容器占用的空间比 VM 少(容器映像大小通常为 数十 MB),可以处理更多应用程序,并且需要更少的 VM 和操作系统。
虚拟机
虚拟机 (VM) 是将一台服务器转换为多台服务器的物理硬件的抽象。虚拟机监控程序允许多个 VM 在一台计算机上运行。每个 VM 都包含操作系统、应用程序、必要的二进制文件和库的完整副本,占用数十 GB。 VM 的启动速度也可能很慢。
容器和虚拟机一起
容器和 VM 一起使用为部署和管理应用提供了极大的灵活性
Docker 支持多种编程语言和应用程序框架,并可以在多种操作系统上运行,包括 Linux、Windows 和 macOS 等。
(以下介绍内容转载自腾讯云,地址见附录)
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
使用 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 都致力于为开发人员团队提供安全的环境。
Docker是一种容器化技术,可以将应用程序和其依赖的所有组件打包成一个可移植的容器,以便在不同的环境中部署和运行。与虚拟化技术相比,Docker容器更加轻量化,启动更快,占用资源更少,同时也更加便捷和灵活。可以将Docker容器看作是一种微型的虚拟机,它们可以在同一主机上运行多个容器,每个容器都是相互隔离的,并且具有自己的文件系统、网络和进程空间。这使得开发者能够更加高效地进行应用程序的开发、测试和部署,同时也为应用程序的管理和维护带来了更多的便利。
Docker是一个开源工具,它让开发人员可以在容器中打包、运输和运行应用程序。容器是轻量级的、可移植的、自包含的独立环境,它可以在任何机器上运行,而不需要任何修改。
假设你需要在你的电脑上运行一个应用程序,但你发现应用程序在不同的环境中会发生问题。比如,你在Windows电脑上开发了一个应用程序,但当你将它运行在Linux服务器上时,它不能正常工作。
这时候,你可以使用Docker来打包你的应用程序和需要的环境,这样就可以确保你的应用程序在不同的机器上都能正常运行了。
Docker基于镜像(Image)的概念,镜像就是一个文件,它包含了应用程序和所需的依赖环境。你可以将镜像上传到Docker仓库(Docker Hub)中,当需要在其他机器上运行应用程序时,只需要从Docker仓库中下载镜像,再通过容器(Container)运行即可。
容器是从镜像中创建出来的,它是一个隔离的运行环境。每个容器都有自己的文件系统、网络等资源,不会影响到宿主机以及其他容器。你可以在一个宿主机上运行多个容器,每个容器之间互不干扰。
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是一个开源的项目,官方支持有限,使用者需要通过社区、文档等手段获取相关的技术支持。
是的,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)
推荐阅读:
大数据的关键技术之——大数据采集 |
[你找到牵手一辈子的人了吗?] 七夕情人节特辑 |
数字技术能让古籍“活过来”吗? |
心情不好时,帮自己训练个AI情绪鼓励师吧(基于PALM 2.0 finetune) |
深度学习框架TensorFlow |
人工智能开发人员工作流程、看法、工具统计数据 |
2023 年6月开发者调查统计结果——最流行的技术(2) |
2023 年6月开发者调查统计结果——最流行的技术(1) |
让Ai帮我们画个粽子,它会画成什么样呢? |
|
|
|
给照片换底色(python+opencv) | 猫十二分类 | 基于大模型的虚拟数字人__虚拟主播实例 |
|
|
|
计算机视觉__基本图像操作(显示、读取、保存) | 直方图(颜色直方图、灰度直方图) | 直方图均衡化(调节图像亮度、对比度) |
|
|
|
语音识别实战(python代码)(一) |
人工智能基础篇 |
计算机视觉基础__图像特征 |
|
||
matplotlib 自带绘图样式效果展示速查(28种,全) |
||
|
||
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) | ||
|
|
|
立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦 | Python 3D可视化(一) |
让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud) |
|
|
|
python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印 |
用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心) |
python爱心源代码集锦(18款) |
|
|
|
Python中Print()函数的用法___实例详解(全,例多) |
Python函数方法实例详解全集(更新中...) |
《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念 |
|
|
|
用代码过中秋,python海龟月饼你要不要尝一口? | python练习题目录 |
|
|
|
|
草莓熊python turtle绘图(风车版)附源代码 | 草莓熊python turtle绘图代码(玫瑰花版)附源代码 |
草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码 |
|
|
|
巴斯光年python turtle绘图__附源代码 |
皮卡丘python turtle海龟绘图(电力球版)附源代码 | |
|
|
|
Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细) |
色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名) |
2023年4月多家权威机构____编程语言排行榜__薪酬状况 |
|
|
|
手机屏幕坏了____怎么把里面的资料导出(18种方法) |
【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向) | 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决 |
|
||
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue) | ||
|
|
|
2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特 | 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套) |
SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例) |
|
|
|
【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码) | HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码) | 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载) |
|
|
|
tomcat11、tomcat10 安装配置(Windows环境)(详细图文) |
Tomcat端口配置(详细) |
Tomcat 启动闪退问题解决集(八大类详细) |