Docker 入门:如何使用 Docker 容器化 AI 项目(一)

news2024/12/23 14:43:49

在这里插入图片描述

引言

在人工智能(AI)项目的开发和部署过程中,环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码,确保每个人使用的环境一致,才能避免 “在我的机器上可以运行”的尴尬问题。而 Docker 作为一种轻量级的虚拟化技术,提供了一种理想的解决方案:通过容器化技术,可以确保 AI 项目在各种环境中一致性地运行,从而大大简化部署流程。

本篇文章将详细介绍如何使用 Docker 容器化 AI 项目,帮助你掌握 Docker 在 AI 开发中的应用,提升项目的可移植性和可扩展性。文章将从基础概念入手,逐步讲解 Docker 容器的创建、管理、部署等关键技能,并通过实际的示例代码来帮助你理解 Docker 容器在 AI 项目中的实际应用。

一、什么是 Docker?

Docker 是一个开源平台,用于开发、传输和运行应用程序。Docker 使得开发者能够将应用程序及其依赖打包成一个标准化的容器,并且容器能够在任何支持 Docker 的环境中运行。这种容器化的方式能够避免环境差异带来的问题,是开发、测试和生产环境的一种理想解决方案。

与传统的虚拟化技术不同,Docker 不需要为每个应用程序创建一个完整的虚拟机,而是通过共享操作系统内核,轻量化地创建多个相互隔离的容器。每个容器中包含运行应用所需的所有依赖,保证了应用在不同环境中的一致性。

Docker 的优势:

  • 轻量级: Docker 容器共享主机操作系统内核,无需像虚拟机那样模拟整个操作系统,因此更加轻量,占用资源更少。
  • 快速启动: 容器可以在几秒钟内启动,而虚拟机通常需要几分钟。
  • 资源利用率高: 由于轻量级和快速启动的特性,Docker 可以在同一台主机上运行更多应用,提高资源利用率。
  • 可移植性: Docker 容器可以在任何支持 Docker 的平台上运行,无需修改,实现了“一次构建,到处运行”的目标。
  • 版本控制: Docker 镜像支持版本控制,可以轻松回滚到之前的版本。
  • 生态系统: Docker 拥有庞大的生态系统,Docker Hub 上有大量的官方和社区维护的镜像,可以方便地获取和使用。

Docker 架构简介:
在这里插入图片描述

  • Docker 引擎 (Docker Engine): Docker 的核心组件,负责构建和运行 Docker 容器。
  • Docker 客户端 (Docker Client): 用户与 Docker 引擎交互的命令行工具。
  • Docker 镜像 (Docker Image): 只读模板,用于创建 Docker 容器。包含应用程序及其依赖。
  • Docker 容器 (Docker Container): Docker 镜像的运行实例。
  • Docker 仓库 (Docker Registry): 存储和分发 Docker 镜像的地方,例如 Docker Hub。
  • Docker Compose: 用于定义和运行多容器 Docker 应用的工具。

Docker vs 虚拟机:
在这里插入图片描述

特性Docker 容器虚拟机
启动速度秒级分钟级
资源占用更少更多
性能接近原生有一定损耗
隔离性进程级隔离硬件级隔离
操作系统共享宿主机内核需要完整的操作系统
大小通常较小 (MB)通常较大 (GB)
可移植性跨平台,只需支持 Docker需要兼容不同虚拟化平台

二、Docker 的安装与基本操作

2.1 安装 Docker

在开始使用 Docker 之前,首先需要在本地安装 Docker。不同操作系统的安装方式有所不同,以下是针对常见操作系统的安装步骤:

2.1.1 Windows 安装

在这里插入图片描述

  • 访问 Docker 官网 下载适用于 Windows 的 Docker Desktop。
  • 双击安装文件并按照安装向导完成安装。
  • 重要: Docker Desktop for Windows 可以选择使用 WSL 2 (Windows Subsystem for Linux 2) 或 Hyper-V 作为后端。WSL 2 性能更好,建议选择使用 WSL 2。安装过程中可能需要启用 WSL 2 和 Hyper-V 功能。
  • 安装完成后,启动 Docker Desktop,并进行初始设置。
  • 验证 Docker 是否安装成功,在终端中运行以下命令:
docker --version

如果返回版本信息,则说明安装成功。

2.1.2 macOS 安装
  • 访问 Docker 官网 下载适用于 macOS 的 Docker Desktop。
  • 双击下载的 .dmg 文件并将 Docker 拖入应用程序文件夹。
  • 启动 Docker,按照提示完成设置。
  • 在终端中运行以下命令,验证安装是否成功:
docker --version
2.1.3 Linux 安装

在 Linux 上,Docker 安装通常需要使用命令行工具。

以下是在 Ubuntu的安装步骤:

设置Docker的apt存储库。

添加Docker的官方GPG密钥:

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

将存储库添加到Apt源:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装最新特定版本Docker包。

$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

通过运行hello-world映像来验证安装是否成功:

$ sudo docker run hello-world

该命令下载一个测试映像并在容器中运行它。当容器运行时,它打印一条确认消息并退出。

centos版本的linux参照

2.2 Docker 常用命令

以下是一些常见的 Docker 命令,它们帮助我们在使用 Docker 时进行容器的管理:

  • 查看 Docker 版本
sudo docker --version
  • 拉取镜像
sudo docker pull <image_name>:<tag>

例如: docker pull tensorflow/tensorflow:2.6.0-py3

  • 查看本地镜像
sudo docker images
  • 启动容器
sudo docker run -it <image_name>:<tag> bash
  • 列出所有容器
sudo docker ps -a
  • 停止容器
sudo docker stop <container_id>
  • 删除容器
sudo docker rm <container_id>
  • 删除镜像
sudo docker rmi <image_name>:<tag>

三、理解 Dockerfile:构建 AI 项目的基础镜像

在这里插入图片描述

为了将 AI 项目容器化,我们需要构建一个 Docker 镜像。Docker 镜像是一个包含应用程序及其所有依赖的只读模板,容器则是镜像的一个运行实例。构建 Docker 镜像的核心是 Dockerfile,它是一种包含一系列指令的文本文件,用于自动化镜像的创建过程。

3.1 创建 Dockerfile

一个简单的 Dockerfile 用于构建一个包含 Python 和 AI 项目依赖的镜像,示例如下:

# 使用官方 Python 镜像作为基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 复制项目文件到容器中
COPY . /app

# 安装项目依赖
RUN pip install --no-cache-dir -r requirements.txt

# 设置容器启动命令
CMD ["python", "main.py"]
3.1.1 说明
  • FROM:指定基础镜像,本例中使用的是 Python 3.8 版本的官方镜像。选择 slim 版本可以减小镜像体积。
  • WORKDIR:设置工作目录,所有后续的命令都会在这个目录中执行。
  • COPY:将当前目录的所有文件复制到容器中的 /app 目录。
  • RUN:在容器中执行命令,这里用于安装项目的 Python 依赖。--no-cache-dir 选项可以减小镜像大小。
  • CMD:指定容器启动时执行的命令。

3.2 构建镜像

创建好 Dockerfile 后,可以通过以下命令构建镜像:

docker build -t my-ai-project .

这会根据 Dockerfile 中的指令构建一个名为 my-ai-project 的镜像。-t 选项用于指定镜像的名称和标签(默认为 latest)。. 表示 Dockerfile 所在的当前目录。构建过程可能需要一些时间,取决于项目的大小和依赖的安装情况。

3.3 运行容器

构建完成后,可以通过以下命令运行容器:

docker run -it my-ai-project

这将启动一个基于 my-ai-project 镜像的容器,并进入交互模式。你可以在容器内运行 AI 项目的代码,或者启动相关服务。

想要系统学习AI 项目实战?那么”AI 项目实战:从原理到落地”这个专栏将带你具体的深入研究AI 项目。每个项目包含: 问题定义与数据集介绍、 数据预处理与特征工程、 模型选择与设计 、模型训练与调优、 模型评估与结果分析、 模型部署与上线 (Web API, 移动端部署等)!

点击进入:AI 项目实战:从原理到落地
点击进入:Docker 入门:如何使用 Docker 容器化 AI 项目(二)

本文为原创内容,未经许可不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…

Keil5 STM32库函数的工程

库函数来间接的操作寄存器 条件编译&#xff0c;如果你定义了USE_STDPERIPH_DRIVER &#xff08;使用标准外设驱动&#xff09;这个字符串&#xff0c;stm32f10x_conf.h才有效

Vue2五、自定义指令,全局局部注册、指令的值 ,插槽--默认插槽,具名插槽 ( 作用域插槽)

一、自定义指令 使用步骤 1. 注册 (全局注册 或 局部注册) &#xff0c;在 inserted 钩子函数中&#xff0c;配置指令dom逻辑 2. 标签上 v-指令名 使用 1、自定义指令&#xff08;全局&#xff09; Vue.directive("指令名"&#xff0c;{ 指令的配置项 insert…

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台&#xff0c;集成了版本控制、代码审查、问题跟踪、持续集成与持续交付&#xff08;CI/CD&#xff09;等多种功能&#xff0c;旨在为团队提供一站式的项目管理解决方案。借助 GitLab&#xff0c;开发…

MySQL基础笔记(三)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助&#xff0c;请多多点赞、评论、收藏&#xff0c;你们的反馈是我更新最大的动力&#xff01; 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…

使用qemu搭建armv7嵌入式开发环境

目录 目录 1 概述 2 环境准备 2.1 vexpress系列开发板介绍 2.2 安装工具 2.2.1 安装交叉工具链 2.2.2 安装qemu 2.2.3 安装其他工具 3 启动uboot 3.1 uboot下载与编译 3.1.1 下载 3.1.2 编译 3.2 使用qemu启动uboot 4 启动kernel 4.1 下载和编译kernel 4.1.1 下…

数据思维的哲学思考

引言 天地合而万物生&#xff0c;阴阳接而变化起。 《荀子礼论》 数据思维的哲学基础源于唯物主义哲学。在马克思的唯物主义思想中&#xff0c;世界是物质的&#xff0c;物质是运动的&#xff0c;运动是有规律的&#xff0c;规律是客观的。 数据思维的哲学基础就是&#xff…

Dijkstra(迪杰斯特拉)最短路径算法可视化演示

Dijkstra(迪杰斯特拉)算法&#xff0c;是一种解决带权图中单源最短路径的经典算法。它由荷兰计算机科学家 Edsger Dijkstra 于1956年提出。在现实生活中&#xff0c;这个算法被广泛应用于导航系统、网络路由等场景。 比如在地图导航中&#xff0c;城市可以看作图中的节点&…

利用深度纹理实现全局雾效

1、为什么要实现屏幕后处理效果的全局雾效 既然Unity中已经提供了全局雾效&#xff0c;那为什么还要自己来实现呢&#xff1f;主要是因为Unity自带的全局雾效有以下几个缺点&#xff1a; 需要为每个自定义Shader按规则书写雾效处理代码自带的全局雾效无法实现一些自定义效果&…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天&#xff0c;在使用Subversion提交代码到服务器时&#xff0c;发现无法提交*.a、*.so等二进制文件&#xff0c;右击这些文件&#xff0c;发现其属性为ignores。     问题原因&#xff1a;SVN的配置文件里&#xff0c;屏蔽了*.a、*.so文件的上传与下载&#xff0c;并把这些…

Linux下学 〖MySQL 〗表的属性之约束条件(下)(自增长auto_increament、唯一键unique key、外键foreign key)

绪论​ 每日激励&#xff1a;“不是看到希望才坚持&#xff0c;而是坚持了才有希望。—Jack” 绪论​&#xff1a; 本章是约束的下半篇&#xff0c;它将带你认识到一些在字段中非常常用的约束条件&#xff0c;自增长AUTO_CREMENT、唯一键UNIQUE KEY 和 外键FOREIGN KEY这三个。…

观察者模式(sigslot in C++)

大家&#xff0c;我是东风&#xff0c;今天抽点时间整理一下我很久前关注的一个不错的库&#xff0c;可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计&#xff0c;sigslot 官网&#xff1a; http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…

内置函数.

日期函数 current_date/time() 日期/时间 获得年月日&#xff1a; 获得时分秒&#xff1a; 获得时间戳&#xff1a;日期时间 now()函数 体会date(datetime)的用法&#xff1a;只显示日期 在日期的基础上加日期&#xff1a;按照日历自动计算 关键字为 intervalinterval 后的数值…

web实验三

web实验三 三四个小时左右吧&#xff0c;做成功了学到新东西了&#xff0c;还是挺有趣的&#xff0c;好玩。还有些功能没做完&#xff0c;暂时这样了&#xff0c;要交了。 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF…

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…

windows平台小熊猫C++安装fmt库

前言 Windows安装C第三方库有点不容易&#xff0c;使用VS的可能还好点&#xff0c;有vcpkg工具用。使用其他工具的就麻烦了&#xff0c;因为基本上第三方库&#xff0c;都默认你是Linux平台&#xff0c;给的安装方式教程都是清一色Cmake&#xff0c;Windows上没有cmake&#x…

信号处理相关的东东(学习解惑)

信号处理相关的东东&#xff08;学习解惑&#xff09; 所有内容学习自知乎专栏&#xff0c;https://www.zhihu.com/column/xinhao&#xff0c;写的很好&#xff0c;值得反复学习 时频域分析的一些常用概念 FROM&#xff1a;https://zhuanlan.zhihu.com/p/35742606 1、相加性…

pset4filter less: helpers.c

&#xff08;&#xff14;&#xff09;blur function 简单画图熟悉一下要做什么 可以看到3种情况&#xff0c;顶格&#xff0c;边界&#xff0c;里面如果分开算的话&#xff0c;是真的麻烦&#xff1b;但是当时还真的没有想到更好的&#xff0c;就先写一写&#xff08;此处摘取…

3. Kafka入门—安装与基本命令

Kafka基础操作 一. 章节简介二. kafka简介三. Kafka安装1. 准备工作2. Zookeeper安装2.1 配置文件2.2 启动相关命令3. Kafka安装3.1 配置文件3.2 启动相关命令-------------------------------------------------------------------------------------------------------------…

某政银行APP登陆逆向

版本 V10.0.0 环境检测 {"xposed": {"action": "warn_and_exit","msg": {"zh_CN": "检测到您的设备安装有Xposed框架&#xff0c;存在非法攻击风险&#xff01;"},"button": {"zh_CN": &qu…