GPU机器docker环境离线安装

news2024/11/20 21:34:16
  • 秋风阁(https://focus-wind.com/)

文章目录

  • docker 环境离线二进制安装
    • 下载二进制包
    • 解压.tgz包
    • 迁移文件到/usr/bin/目录下
    • 启动docker
      • 手动启动docker
      • systemctl启动docker
        • docker.service
        • docker.socket
        • containerd.service
        • 设置开机重启
        • 启动docker服务
  • 离线安装nvidia-docker(docker容器内部使用GPU资源)
    • rpm源安装离线软件包
    • deb源安装离线软件包
    • 修改daemon文件,指定docker runtime配置
    • 测试nvidia-container-runtime
      • 测试nvidia-container-runtime是否安装成功
      • 测试nvidia-container-runtime运行状态
  • docker设置默认runtime
    • 关闭当前运行dockerd进程
    • 重启dockerd并指定runtime
    • 修改docker.service配置文件(systemctl)

docker 环境离线二进制安装

  • docker 二进制包下载位置

下载二进制包

在无法联网的环境中安装软件包,我们无法依赖于现成的包管理工具,只能通过一个一个的下载包的方式来进行软件的下载安装,但这样操作难免会遇到依赖问题,复杂的依赖问题会严重的影响我们环境的下载。所以可以通过下载二进制可执行文件的方式来避免下载依赖的问题。

在 https://download.docker.com/linux/ 路径下选择static目录而不是其他Linux发行版来选择下载的包。根据系统CPU架构和docker版本选择相应的tgz压缩包。

docker下载位置包括docker-${version}.tgzdocker-rootless-extras-${version}.tgz两种版本的docker二进制文件压缩包。其他rootless-extras版本是为解决docker使用root身份存在的运行安全风险提出的rootless mode方案,目的是让dockerd守护进程以非root身份运行,根据需要选择对应版本。

解压.tgz包

解压.tgz压缩包:

tar -xzvf docker-xxx.tgz

添加可执行权限:(若是从其他系统上传到linux,可能会导致文件的权限信息更改,需要给相关文件添加权限以保证文件执行权限正常)

chmod +x docker/*

迁移文件到/usr/bin/目录下

/usr/bin/目录是Linux用户可执行文件存放位置,将可执行文件存储在该路径下,在任意位置都可调用可执行脚本,否则就只能在当前路径下调用可执行脚本

cp -p docker/* /usr/bin/

启动docker

docker/*等可执行文件迁移到/usr/bin目录下,理论上在任意位置都可直接调用docker命令。但此时所谓的docker只是个空壳子,docker实际上分为客户端和服务端,docker命令本质上是一个客户端调用器,调用docker命令,向docker引擎发送信号,由服务端dockerd引擎来具体执行docker容器的操作,所以我们需要在后台启动dockerdcontainerd服务。

dockerd是docker用来管理容器的守护进程。

containerd是从docker中剥离的容器虚拟化技术,docker对容器的管理和操作基本都是通过containerd完成的

手动启动docker

由于二进制文件不是直接通过包管理工具安装的,所以不会被systemctl进行管理。

通过手动启动docker引擎,而不是由systemctl来管理,操作简单,不容易出错,但缺点是每次主机重启都需要手动启动引擎。

nohup dockerd &
nohup containerd &

systemctl启动docker

若觉得每次主机重启都需要手动启动docker引擎的操作麻烦,可以添加配置文件,通过systemctl来管理docker引擎。

systemctl docker配置文件:

  • /usr/lib/systemd/system/docker.service
  • /usr/lib/systemd/system/docker.socket
  • /usr/lib/systemd/system/containerd.service

docker.service

/usr/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes

# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target

docker.socket

/usr/lib/systemd/system/docker.socket

[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

containerd.service

/usr/lib/systemd/system/containerd.service

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

设置开机重启

systemctl enable docker.service

启动docker服务

systemctl start docker.service

离线安装nvidia-docker(docker容器内部使用GPU资源)

  • Docker GPU Support
  • libnvidia-container(软件包下载地址)

Docker GPU Support
nvidia-container-runtime-repo
阅读docker官方文档可知,docker runtime在运行使用Nvidia GPU时,需要nvidia-container-runtime插件才可以使用。经过在nvidia-container-runtime(repo)的文档查阅可知,nvidia容器工具包的相关软件包目前已由https://nvidia.github.io/libnvidia-container存储库提供服务。在GitHub libnvidia-container仓库的gh-pages分支下,可以看到相关的软件包(建议选择stable文件夹下稳定版本的软件包来进行离线下载)。

libnvidia-container核心包包括:

  • libnvidia-container-devel
  • libnvidia-container-static
  • libnvidia-container-tools
  • libnvidia-container1
  • nvidia-container-runtime
  • nvidia-container-toolkit
  • nvidia-docker2

根据自己的系统环境和CPU架构来选择合适的软件包进行下载。

rpm源安装离线软件包

rpm -Uvh *.rpm --nodeps --force

rpm文件调用以上命令强制安装当前路径下的所有离线.rpm软件包。

deb源安装离线软件包

dpkg -i --force-overwrite *.deb

deb文件通过以上命令强制安装当前路径下的所有离线.deb软件包。

修改daemon文件,指定docker runtime配置

修改配置/etc/docker/daemon.json

{
	"default-runtime": "nvidia",
	"runtimes": {
		"nvidia": {
			"path": "nvidia-container-runtime",
			"runtimeArgs": []
		}	
	}
}

测试nvidia-container-runtime

测试nvidia-container-runtime是否安装成功

nvidia-container-runtime -v

调用以上命令,显示runc等信息,即表示nvidia-container-runtime插件已完成安装。

测试nvidia-container-runtime运行状态

docker run --rm --runtime=nvidia nvidia/cuda nvidia-smi

调用以上命令,运行一个容器,在容器内部调用nvidia-smi命令,查看容器是否正常运行。若报错详细检查是否缺少相关依赖库。

docker设置默认runtime

下载安装nvidia-container-runtime后,若需要在容器内部调用GPU,仍需要在启动容器或compose等配置文件中指定runtime,若不想在启动容器时指定runtime,可以将nvidia-container-runtime设置为docker默认runtime。

docker runtime由dockerd在启动时指定。dockerd是docker用来管理容器的守护进程。docker实际上分为服务端和客户端。客户端调用docker命令向服务端dockerd引擎发送命令,由dockerd引擎来执行容器的具体操作,dockerd直接控制docker的daemon行为。通过在启动dockerd时指定runtime。

关闭当前运行dockerd进程

查看dockerd进程号

ps -ef | grep dockerd

kill掉dockerd运行进程

kill -9 pid

重启dockerd并指定runtime

nohup dockerd --default-runtime nvidia &

修改docker.service配置文件(systemctl)

若是通过systemctl启动的docker服务,需要修改docker.service文件,确保每次重启都会启动nvidia-container-runtime而不是docker原生runtime。
修改/usr/lib/systemd/system/docker.service文件的ExecStart配置项:

ExecStart=/usr/bin/dockerd --default-runtime nvidia -H fd:// --containerd=/run/containerd/containerd.sock

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

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

相关文章

GPT逆向:高效解读小红书文案生成器的内部逻辑

文章目录 前言一、什么是小红书文案生成器二、具体步骤总结 前言 关注我的很多同学都会写爬虫。但如果想把爬虫写得好,那一定要掌握一些逆向技术,对网页的JavaScript和安卓App进行逆向,从而突破签名或者绕过反爬虫限制。 最近半年&#xff…

密码学基本原理和发展——古典密码学

密码技术最早起源于公元前404年的希腊,此后密码大致经历了古典密码、近代密码和现代密码三个阶段。 1.古典密码 古典密码(公元前五世纪~19世纪末)代表性的是滚桶密码、棋盘密码和凯撒密码。 1.1滚筒密码 滚筒密码原理为信息发送…

5月17号软件资讯更新合集....

Erlang/OTP 26 正式发布 Erlang/OTP 26.0 已正式发布。 Erlang 是一种通用的并发函数式程序设计语言。Erlang 也可以指 Erlang/OTP 的通称,开源电信平台 (OTP) 是 Erlang 的常用执行环境及一系列标准组件。 这是一个重要版本更新,包含许多新特性、改进…

Python带你实现批量自动点赞小程序

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 所用知识点: 动态数据抓包 requests发送请求 json数据解析 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests 请求模块 ,第三方,需安装 win R 输入cmd 输入安装命令 pip inst…

oa是什么意思?oa系统哪个好用?

一、oa是什么意思 oa(Office Automation办公自动化)是一种将智能化科技应用于企业管理中的应用系统。它可以通过电脑网络、互联网等技术手段,将企业的各种业务流程、各种业务数据进行集成和处理,将各种业务流程和各种业务数据统一…

centos安装kurento

前沿 本文章使用docker安装,为个人安装记录 一、安装kurento 1.拉取镜像 # 搜索kurento docker search kurento# 拉取 docker pull kurento/kurento-media-server# 查看镜像是否拉取成功 docker images2.运行kurento服务 # 运行 docker run -d --name kms -p 8…

【Python Mayavi】零基础也能轻松掌握的学习路线与参考资料

Mayavi是Python的一个科学可视化库,主要用于三维(3D)科学数据的可视化。Mayavi具有优秀的可视化效果、交互性良好、易于使用、能够输出高质量的图像和动画等特点。对于需要展示科学数据的学者和研究人员来说,Mayavi是一个非常好的…

手撕代码带你领略Spring如何集成Mybatis

引言 有关于Spring整合Mybatis其实一直是一个很具有典型代表性的Spring实际应用,今天就带着大家由浅入深手撸一遍整合的代码 手撕代码 准备工作 首先准备两个Mapper作为今天演示的操作对象 import org.apache.ibatis.annotations.Select;public interface User…

动态规划——第N个泰波那契数

题目链接 leetcode在线oj题——第N个泰波那契数 题目描述 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 题目示例 示例1 输入:n 4 输出…

❤ cannot read properties of null(reading appendChild)解决办法

❤ 操作元素报&#xff1a;cannot read properties of null(reading appendChild)解决办法 1、场景&#xff1a; 写的一个js渲染&#xff0c;但是出了个小问题&#xff0c;cannot read properties of null(reading appendChild)报错。 <div id"divps" class&qu…

ASEMI代理Infineon英飞凌IPB64N25S3-20原厂MOS管

编辑-Z IPB64N25S3-20参数描述&#xff1a; 型号&#xff1a;IPB64N25S3-20 持续漏极电流&#xff1a;64A 脉冲漏极电流&#xff1a;256A 雪崩电流&#xff0c;单脉冲&#xff1a;27A 栅极-源极电压&#xff1a;20V 功率耗散&#xff1a;300W 操作和储存温度&#xff1…

【Linux】有名管道实现简单版聊天功能

目录 有名管道实现简单版聊天功能 橙色 有名管道实现简单版聊天功能 创建两个.c文件&#xff0c;一个是chata.c&#xff0c;一个是chatb.c chata.c文件内容如下&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include &l…

Linux-基础IO

一、C语言文件IO 1、C库函数介绍 打关文件fopen/fclose&#xff1a; FILE * fopen(const char* filename, const char* mode); int fclose (FILE* stream );文件打开方式&#xff1a; 读写函数fread/fwrite&#xff1a; size_t fread( void *buffer, size_t size, size_t cou…

刷题day66:目标和

题意描述&#xff1a; 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添…

Kibana 的安装

1. 简介 Kibana 是一个开源的分析与可视化平台&#xff0c;可以用 Kibana 搜索、查看存放在 Elasticsearch 中的数据&#xff0c;就跟谷歌的 elasticsearch head 插件类似&#xff0c;但 Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等&#xff0c;直观的…

物联网和边缘计算:如何将数据处理和决策推向设备边缘

第一章&#xff1a;引言 当我们谈论物联网&#xff08;IoT&#xff09;时&#xff0c;我们通常指的是将各种设备连接到互联网&#xff0c;并通过数据交换来实现智能化的网络。然而&#xff0c;传统的物联网模型通常涉及将数据发送到云端进行处理和分析。然而&#xff0c;随着技…

5月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年5月8日-5月14日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站…

【js】原生input框及下拉框数据联动( 列如: 输入框输入 3,下拉框里的选项值则为:1,2,3)

需求 输入框输入 数字 下拉框要显示对应的数字 列如: 输入框输入 13 下拉框里的选项值则为&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9&#xff0c;10&#xff0c;11&#xff0c;12&#xff0c;…

【数据结构 -- C语言】 双向带头循环链表的实现

目录 1、双向带头循环链表的介绍 2、双向带头循环链表的接口 3、接口实现 3.1 开辟结点 3.2 创建返回链表的头结点 3.3 判断链表是否为空 3.4 打印 3.5 双向链表查找 3.6 双向链表在pos的前面进行插入 3.6.1 头插 3.6.2 尾插 3.6.3 更新头插、尾插写法 3.7 双向链…