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

在这里插入图片描述

引言

在人工智能(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 项目(二)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android修行手册 - 移动端几种常用动画方案对比

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

抢单人机交互「新红利」!哪些细分赛道“多金”?

受终端用户的智能座舱体验需求驱动&#xff0c;视觉、听觉、触觉等人机交互方式加速焕新。 一方面&#xff0c;人机多模交互引领&#xff0c;车载声学进入新周期。根据高工智能汽车研究院统计数据&#xff0c;单车的车载扬声器搭载量正在快速起量。 很显然&#xff0c;作为智…

Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量添加文本水印

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量添加文本水印 BiliBili视频链接&#xff1a; Linux shell脚本对常见图片格式转换webp和添加文本水印 在Linux系统中&#xff0c;使用ImageMagick可以图片格式转换&…

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器&#xff0c;在本地电脑中cmd使用该命令&#xff1a; scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中&#xff0c;C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径&#xff0c; ~/en…

004最长回文子串

#include #include #include using namespace std; class Solution { public: string longestPalindrome(string s) { int n s.size(); if (n < 2) { return s; } int maxLen 1;int begin 0;// dp[i][j] 表示 s[i..j] 是否是回文串vector<vector<int>> …

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…

ue5 pcg(程序内容生成)真的简单方便,就5个节点

总结&#xff1a; 前情提示 鼠标单击右键平移节点 1.编辑-》插件-》procedural->勾选两个插件 2.右键-》pcg图表-》拖拽进入场景 3.先看点point 右键-》调试(快捷键d)->右侧设置粒子数 3.1调整粒子数 可以在右侧输入框&#xff0c;使用加减乘除 4.1 表面采样器 …

【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹

代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…

STM32——“SPI Flash”

引入 在给单片机写程序的时候&#xff0c;有时会用到显示屏&#xff0c;就拿市面上的0.96寸单色显示器来说&#xff0c;一张全屏的图片就占用8x1281024个字节&#xff0c;即1kb的空间&#xff0c;这对于单片机来说确实有点奢侈&#xff0c;于是我买了一个8Mb的SPI Flash&#x…

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法&#xff1a; 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装&#xff0c;官方地址&#xff1a;https://subversion.apache.org/ 2、SVN的使用…

中国信通院致信感谢易保全:肯定贡献能力,期许未来合作

近日&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;向易保全发感谢信表达谢意&#xff0c;对其在中国信通院牵头的“铸基计划”——企业数字化转型高质量发展推进行动实施中展现出的重要贡献给予了高度评价和肯定&#xff0c;并展望了双方至20…

【微信小程序】1|底部图标 | 我的咖啡店-综合实训

底部图标 引言 在微信小程序开发中&#xff0c;底部导航栏&#xff08;tabBar&#xff09;是用户界面的重要组成部分&#xff0c;它为用户提供了快速切换不同页面的功能。今天&#xff0c;我们将通过一个实际案例——“我的咖啡店”小程序&#xff0c;来详细解析如何配置底部图…

(补)算法刷题Day24: BM61 矩阵最长递增路径

题目链接 思路 方法一&#xff1a;dfs暴力回溯 使用原始used数组4个方向遍历框架 &#xff0c; 全局添加一个最大值判断最大的路径长度。 方法二&#xff1a;加上dp数组记忆的优雅回溯 抛弃掉used数组&#xff0c;使用dp数组来记忆遍历过的节点的最长递增路径长度。每遍历到已…

基于单片机的智能电子秤(论文+源码)

1.设计框架 本次智能电子秤单片机控制系统由7个部分构成&#xff0c;包括手机&#xff0c;蓝牙传输模块&#xff0c;LCD液晶显示模块&#xff0c;单片机控制系统、压力传感器检测电路&#xff0c;按键电路以及复位晶振&#xff0c;整体框图如图2.1所示。在功能上&#xff0c;整…

【保姆级别教程】VMware虚拟机安装Mac OS15苹果系统附带【VMware TooLS安装】【解锁虚拟机】和【Mac OS与真机共享文件夹】手把手教程

目录 准备工作 一、安装虚拟机 二、解锁系统 三、安装系统 四、部署系统 五、安装VMware Tools(选做) 为什么要安装VMware Tools&#xff0c;这是啥玩意&#xff1f; 六、配置共享文件夹(选做) 为什么要共享文件夹&#xff1f; 注意事项&#xff1a; 七、安装完成 准…

【服务器】linux服务器管理员查看用户使用内存情况

【服务器】linux服务器管理员查看用户使用硬盘内存情况 1、查看所有硬盘内存使用情况 df -h2、查看硬盘挂载目录下所有用户内存使用情况 du -sh /public/*3、查看某个用户所有文件夹占用硬盘内存情况 du -sh /public/zhangsan/*

Etcd注册中心基本实现

Etcd入门 什么是Etcd GitHub&#xff1a;https://github.com/etcd-io/etcd Etcd数据结构与特性 键值对格式&#xff0c;类似文件层次结构。 Etcd如何保证数据一致性&#xff1f; 表面来看&#xff0c;Etcd支持事务操作&#xff0c;能够保证数据一致性。 底层来看&#xff0…

sqlite 自定以脚本解释器

应用程序使用 libfdt 解析设备树,获取兼容性配置 内核源码支持libfdt 标准设备树语法,不用自己再创造 非常的爽,因为设备树支持预编译 一些可以跑类 BSD 系统的设备也可以使用这样的方法,不仅仅是在linux 系统上跑 有pylibfdt 支持解析设备树&#xff0c;校验设备树是否是正确的…

[python]pymc3-3.11.0安装后测试代码

测试通过环境&#xff1a; pymc33.11.0 python3.8 测试代码&#xff1a; import arviz as az import matplotlib.pyplot as plt import numpy as np import pymc3 as pm RANDOM_SEED 8927 np.random.seed(RANDOM_SEED) az.style.use("arviz-darkgrid") # True p…

Chrome 关闭自动添加https

Open Chrome and go to “chrome://net-internals/#hsts”