内网离线安装docker-ce工具,带你来了解!

news2024/11/22 9:55:46

虽然通常我们都是使用网络来安装 docker 的,但是对于安全要求比较高的业务或者用户来说,部署产品需要在内网部署,而内网通常是无法访问外部网络的,所以就需要通过内网进行安装了。

在这里插入图片描述

1. yum 离线安装包获取方法

下载软件包

这里以 CentOS7 为例进行说明

#替换并更新软件源

$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#生成缓存

$ yum makecache

#添加docker-ce软件源

$ curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

生成缓存

$ yum makecache

#前提条件

$ yum install -y yum-plugin-downloadonly

#下载rpm安装包,我这里以docker-ce为例说明

$ yum install --downloadonly --downloaddir=./ docker-ce

这里以 Ubuntu18.04 为例进行说明

#会存放在/var/cache/apt/archives目录下面

$ sudo apt-get install --download-only pppoe

2. yum 离线安装 docker-ce 工具

安装软件包

如果我们发现原有的操作系统已经安装了 docker 工具,但是对应版本并不能

满足我们的需要,可以将其卸载之后再次安装即可。

#搜索已经安装的docker安装包

$ sudo yum list installed | grep docker

docker.x86_64 2:1.12.6-16.el7.centos @extras

#分别删除安装包

$ sudo yum –y remove docker.x86_64

使用我们打好的 docker-ce 的安装包,执行安装命令的时候报错。

#安装时一并安装对应依赖

$ sudo yum install ./*.rpm

–> Finished Dependency Resolution

Error: Package: audit-libs-python-2.8.1-3.el7.x86_64 (/audit-libs-python-2.8.1-3.el7.x86_64)

Requires: audit-libs(x86-64) = 2.8.1-3.el7

Installed: audit-libs-2.8.1-3.el7_5.1.x86_64 (@updates)

audit-libs(x86-64) = 2.8.1-3.el7_5.1

Available: audit-libs-2.8.1-3.el7.x86_64 (base)

audit-libs(x86-64) = 2.8.1-3.el7

You could try using --skip-broken to work around the problem

You could try running: rpm -Va --nofiles --nodigest

#安装的时候忽略以问题

$ rpm -ivh --force --nodeps ./*.rpm

可以发现可能为系统已经安装了对应的包,将其移出目录外之后再次安装。

#移动到上级目录

$ mv audit-libs-2.8.1-3.el7.x86_64.rpm …

$ mv audit-libs-python-2.8.1-3.el7.x86_64.rpm …

如果有缺少依赖的问题,就到下面网站中找对应缺失的相关依赖镜像。

#CentOS

https://centos.pkgs.org/

总结下:虽然操作系统的大版本是一致的,但是对应小版本不一致可能会存在对应 rpm 包小版本的不一致,而导致存在依赖问题,导致安装时失败。

3. pip 离线安装包获取方法

下载软件包

Python 环境安装 package 的方法,一般是采用 pip 命令在线从 PyPI 网站上面下载安装的,这也是最为方便的途径。但是在某些情况下,要为一台离线的机器安装 package 依赖包,其根本无法访问外网环境。当然,一般大厂都会有内网 PyPI 代理,只要改一下 --index-url 参数即可。若无代理的情况下,只能将所有依赖到的 package 离线下载下来,放到离线的机器上安装,即可。

由于手动下载所有依赖是一件非常痛苦的事情,所以我发现了 pip download 命令可以很好的解决这个问题。

#(1)确认需要的依赖包 - 外部第三方库

$ sudo vim requirements.txt

alembic

#(2)确认需要的依赖包 - 内部第三方库

$ sudo vim requirements.txt

–index-url https://admin:111111@pypi.escapelife.com:4874/simple

love_grilfriend

#(3)通过如下命令下载依赖

$ sudo pip download -d /root/packages -r requirements.txt

4. pip 离线安装 package 方法

需要注意的是,

存在 online 和 offline 机器架构完全相同,也可能架构不相同。

[1] 架构相同

#直接在online机器执行如下命令下载所有依赖package到当前目录

$ sudo pip download tensorflow

#将目录内容拷贝到目标offline机器并目标offline机器执行

$ pip install --no-index --find-links=file:/data/tensorflow_package_dir tensorflow

#不依赖其他库强制安装

$ pip install --no-deps tensorflow-1.2.3-cp36-cp36m-linux_x86_64.whl

[2] 架构不同

#pyenv+docker

#架构不同的情况下,可以使用docker创建一个和目标机器相同的系统

#然后,使用上面这中方式进行下载和安装就可以了,也是很简单的,哈哈

#pyenv

#通过pyenv安装指定版本的python

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash pyenv install 3.7.13

#切换Python版本

$ pyenv global 2.7.13

#docker

#先启动目标系统的docker镜像

$ docker run -it -v /offline_tensorflow_py3:/package ubuntu /bin/bash

#在容器内安装python

$ apt-get update && apt-get install python python-pip

#使用和相同架构的操作步骤

[3] 存在问题 - 导致下文pip download失败的原因

PyPI 上 package 有好几种格式,不幸的是 PiPY 并没有规定一个 package 必须提供的安装格式,有的只有 wheel 没有源文件,有的只有源文件没有 wheel 或 egg。

源文件(一般是.tar.gz 或.zip 文件,用 pip 安装,与机器架构无关,但某些 package 可能涉及到 C/C++编译)

wheel 文件(二进制文件,拓展名为.whl,用 pip 安装,无需编译,但与机器架构相关)

.egg 文件(二进制文件,用 easy_install 安装,无需编译,但与机器架构相关)

#只要指定–platform/–python-version/–implementation/–abi即可

pip download with the --platform, --python-version, --implementation, and --abi options provides the ability to fetch dependencies for an interpreter and system other than the ones that pip is running on.

–only-binary=:all: or --no-deps is required when using any of these options. It is important to note that these options all default to the current system/interpreter, and not to the most restrictive constraints (e.g. platform any, abi none, etc).

To avoid fetching dependencies that happen to match the constraint of the current interpreter (but not your target one), it is recommended to specify all of these options if you are specifying one of them. Generic dependencies (e.g. universal wheels, or dependencies with no platform, abi, or implementation constraints) will still match an over- constrained download requirement.

#下载TensorFlow的pip包

pip download \

--only-binary=:all: \        # 只下载二进制package(即wheel或egg)

--platform linux_x86_64 \    # 说明是linux 64位架构

--python-version 27 \        # Python 2.7

--implementation cp \        # Cython 一般都是这个

--abi cp27mu                 # 解释器和系统的依赖关系的能力

tensorflow                   # 要下载的package名

5. 离线升级 Linux 内核的方法

这里主要是由CentOS 的操作系统进行演示说明

[1] 事件起因

在 CentOS7.3 的系统上面部署 NFS 服务的时候,发现跨主机使用的话,需要开通多个端口才能保证正常的使用。但是,我之前在 Ubuntu18.04 的系统上使用 NFS 服务却只需要使用到默认的一个端口即可,这个端口就是 2049 了。看了 NFS 服务的版本号也是相同的,一直没有找到问题的原因,最后还是我的 leader 发现是因为 Linux 操作系统的版本不一致导致的。

我们安装 CentOS7.3 的裸机,系统默认的内核版本为 3.10,属于比较老的版本,导致部分功能无法使用。现在,最新稳定的系统内核为 4.12 版本,所以需要将我们现在的系统内核版本升级到最新的版本,即可解决上述问题。

[2] 升级准备

#备份重要数据

如果是虚拟机的话,使用快照进行备份

针对重要程序数据进行备份,例如 MySQL、Apache、Nginx等

#检查当前CentOS系统版本

$ cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

#检查当前CentOS系统内核版本

#版本性质: 主分支ml(mainline),稳定版(stable),长期维护版lt(longterm)

$ uname -r

3.10.0-514.el7.x86_64

[3] 升级步骤 - 在线安装

#升级CentOS7.X内核并且启用ELRepo仓库

#RedHat只允许使用yum升级内核,CentOS允许使用ELRepo第三方仓库升级内核

$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

#安装最新的主线稳定内核

$ yum --enablerepo=elrepo-kernel install kernel-ml

#设置GRUB默认的内核版本

#修改含义: GRUB初始化页面的第一个内核将作为默认内核

$ vi /etc/default/grub

GRUB_DEFAULT=0

#重新创建内核配置

$ grub2-mkconfig -o /boot/grub2/grub.cfg

#重启机器并查看系统当前内核版本

$ uname -sr

Linux 4.12.0-1.el7.elrepo.x86_64

#查看系统中全部的内核RPM包(可选操作)

$ rpm -qa | grep kernel

kernel-tools-3.10.0-514.26.2.el7.x86_64

kernel-devel-3.10.0-514.10.2.el7.x86_64

kernel-3.10.0-514.26.2.el7.x86_64

kernel-3.10.0-327.el7.x86_64

kernel-ml-4.12.0-1.el7.elrepo.x86_64

kernel-headers-3.10.0-514.26.2.el7.x86_64

kernel-devel-3.10.0-514.26.2.el7.x86_64

kernel-tools-libs-3.10.0-514.26.2.el7.x86_64

#删除旧内核的RPM包(可选操作)

$ yum remove \

kernel-tools-3.10.0-514.26.2.el7.x86_64 \

kernel-devel-3.10.0-514.10.2.el7.x86_64 \

kernel-3.10.0-514.26.2.el7.x86_64 \

kernel-3.10.0-327.el7.x86_64 \

kernel-headers-3.10.0-514.26.2.el7.x86_64 \

kernel-devel-3.10.0-514.26.2.el7.x86_64 \

kernel-tools-libs-3.10.0-514.26.2.el7.x86_64

#重启系统

$ reboot

[4] 升级步骤 - 离线安装

#无法上网的服务器或者需要安装指定版本内核的需求

#我们可以把对应kernel的image的rpm包下载下来安装

官方CentOS6地址: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/

官方CentOS7地址: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/

#当然配置了ELRepo仓库之后也是可以下载离线安装包的

$ yum install -y yum-plugin-downloadonly

$ yum install --downloadonly --downloaddir=./ kernel-ml

#将rpm包下载上传到服务器上并使用下面的命令安装即可

$ yum -y install kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm

$ yum -y install kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm

6. pip 工具的相关问题汇总

汇总日常使用 pip 工具的常见错误和对应处理方法!

[1: 问题] 在使用新版的 pip 工具(在21+的版本之后)安装某些库的时候,由于依赖库版本的不一致,pip 会不断尝试和、以此安装已经存在的各个版本,来确实是否符合要求,且安装期间不会抛出错误。这就导致,如果是 CI 工具触发的话,短时间之内并不会停止(一个小时后自动被工具终止),导致问题不易排出且浪费机器性能。

#循环安装

$ pip install tensorflow

[1: 答案] 可以在手动处理的时候,加上如下参数,就可以在安装之后,迅速抛出异常。这样我们就可以根据抛出的异常冲突版本,来修改 requirements.txt 文件,最后解决该问题。

#–use-deprecated=legacy-resolver

$ pip3 install -r ./requirements.txt --upgrade --use-deprecated=legacy-resolver

[2: 问题] 安装 psycopg2 依赖包的时候,提示如下问题:

#报错信息

$ pip3 install psycopg2==2.8.4

creating pip-egg-info\psycopg2.egg-info

writing pip-egg-info\psycopg2.egg-info PKG-INFO

writing top-level names to pip-egg-info psycopg2.egg-info top_level.txt

writing dependency_links to pip-egg-info psycopg2.egg-info dependency_links.txt

writing manifest file ‘pip-egg-info\psycopg2.egg-info\SOURCES.txt’

warning: manifest_maker: standard file ‘-c’ not found

Error: pg_config executable not found.

Please add the directory containing pg_config to the PATH

or specify the full executable path with the option:

python setup.py build_ext --pg-config /path/to/pg_config build ...

or with the pg_config option in ‘setup.cfg’.


Command python setup.py egg_info failed with error code 1

[2: 答案] 后来在这个 StackOverflow 才知道了问题的原因,原来是系统少一个依赖包,导致的。

#前提条件

$ sudo apt install postgresql-client

#Ubuntu - Python3

$ sudo apt install libpq-dev python3-dev

#Ubuntu - Python2

$ sudo apt install libpq-dev python-dev

$ sudo apt install build-essential

新的一年
新的征程
新的活动来袭~
等你来学!

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

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

相关文章

语义分割数据标注案例分析

语义分割(Semantic Segmentation)是计算机视觉领域中的一种重要任务,它的目的是将图像中的每个像素分配到对应的语义类别中。简单来说,就是将一张图像分割成多个区域,并为每个像素指定一个标签,标识出它属于…

实时手势识别(C++与python都可实现)

一、前提配置: Windows,visual studio 2019,opencv,python10,opencv-python,numpy,tensorflow,mediapipe,math 1.安装python环境 这里我个人使用的安装python10&#…

MySQL进阶篇之MySQL管理

07、MySQL管理 7.1、系统数据库 MySQL数据库安装完成后,自带了四个数据库,具体作用如下: 数据库含义mysql存储MySQL服务器正常运行所需要的各种信息(时区、主从、用户、权限等)information_schema提供了访问数据库元…

科技赋能智慧警务,“链上天眼科技助警中国行”在京启动

2月28日,由全球领先的区块链大数据科技企业欧科云链和中国警察网联合举办的“链上天眼科技助警中国行”活动(下称“活动”),在北京正式启动。为了普及区块链基础知识,以及虚拟货币犯罪追踪与打击的新型技术应用经验&am…

(三)随处可见的LED广告屏是怎么工作的呢?接入GUI

续上文,本篇我们将尝试接入一个GUI来控制点阵屏。在前两篇中,我们相继介绍了点阵屏的控制原理,以及如何让点阵屏按照我们所想的进行显示。本篇将在此基础上接入一个GUI,使点阵屏的控制更加优雅。限于阅读体验和展示效果&#xff0…

王道计算机网络课代表 - 考研计算机 第一章 计算机网络体系结构 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “计算机网络体系结构” 章节知识点总结的十分全面,涵括了《计算机网络…

SpringMVC之JSON工具:Jackson Gson 和fastjson通过JSON工具来解决文字乱码和时间格式问题——通过JSON工具生成JSON

什么是Json? JSON:JavaScript Object NotationJS对象 它是一种轻量级的数据交换格式JSON(当前是交互的顶流),它自身具有独立的编程格式,它的特点是简洁和清晰,Json的存在大大改造了网络传输的…

ffmpeg音视频解码和渲染流程

背景: 随着游戏娱乐等直播业务的增长,在移动端观看直播的需求也日益迫切。但是移动端原生的播放器对各种直播流的支持却不是很好。Android 原生的 MediaPlayer 不支持 flv、hls 直播流,iOS 只支持标准的 HLS 流。本文介绍一种基于 ffplay 框…

挑选销售自动化工具应该关注什么功能?

销售自动化可以极大地提高你的生产力和效率,每周都为你节省时间。这样,你就可以把更多的时间用于完成交易,而减少用于行政任务的时间。市面上的销售自动化工具有很多,作为一般经验法则,以下是销售自动化工具中需要寻找…

智能家居Homekit系列一智能插座

WiFi智能插座对于新手接触智能家居产品更加友好,不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷,智能插座就是其中之一,比如外出忘记关空调,可以拿起手机远程关闭。 简单说就是:插座可以连接wi…

【微信小程序】-- WXML 模板语法 - 列表渲染 -- wx:for wx:key(十二)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

Web前端学习:四 - 练习

三九–四一:百度页面制作 1、左右居中: text-align: center; 2、去掉li默认的状态 list-style: none; li中有的有点,有的有序,此代码去掉默认状态 3、伪类:hovar 一般显示为color: #0f0e0f, 当鼠标接触时…

【JAVA程序设计】【C00107】基于SSM(非maven)的民宿短租管理系统——有文档

【C00107】基于SSM(非maven)的民宿短租管理系统——有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架非maven开发的民宿短租管理系统分为二种用户:系统管理员、用户 管理员角色包含以下功能: 用户管理、客房…

本地新项目上传到git的详细步骤

前提:你本地的项目目录里要记得添加.gitignore忽略文件,免得把一些无用的文件提交,内容如下,可直接粘贴: # Created by .ignore support plugin (hsz.mobi) ### Java template # Compiled class file *.class# Log fi…

Python不同版本之间的切换方法

在使用Python的过程中难免会遇到不同的项目使用不通同的Python环境,这就引出Python环境的切换问题 这篇文章以3.11.0与3.10.10之间的版本切换为列讲述 首先我自己的电脑上同时安装了这两个版本的Python,并且都已经配置了环境变量 1.两个版本的Python …

cast提前!最简单有效的神经网络优化方法,没有之一!

做优化有时候真的很头疼,绞尽脑汁的想怎么做算法等价,怎么把神经网络各层指令流水起来,在确保整网精度的同时,又有高性能。 但有时做了半天,却发现流水根本就流不起来,总是莫名其妙地被卡住。 真的是一顿…

[Java多线程 1] 多线程基础

在Java 技术中,多线程依旧是一个离不开的话题,掌握多线程才能对一些高并发技术理解透彻。同时多线程也需要有一定的操作系统基础,在其理论上进行学习,会对调度情况、线程情况有更多的了解。当然这一块也常常作为Java面试的重点&am…

HNU工训中心:元器件及测量基础实验报告

工训中心的牛马实验 1.实验目的 1.熟悉测量验证常用元器件参数、 并采用替代法(测量回路电流)测量其伏安特性的方法。 2.熟悉测量误差及减小测量误差注意事项 2.实验仪器和器材 1.实验仪器. 直流稳压电源型号:IT6302 台式多用表型号:UT805A 2.实验( 箱)器材 电路实验箱…

针对序列级和词元级应用微调BERT(需修改)

对于序列级和词元级自然语言处理应用,BERT只需要最小的架构改变(额外的全连接层),如单个文本分类(例如,情感分析和测试语言可接受性)、文本对分类或回归(例如,自然语言推…

sdut pta查找表

7-1 电话聊天狂人 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接…