ubuntu docker离线安装docker(.deb包方式)(成功)(附卸载方法)

news2024/12/26 21:00:15

参考文章:Install Docker Engine on Ubuntu

文章目录

    • 安装步骤
      • 下载安装包
      • 拷贝到目标主机并执行安装命令
    • 验证
      • 拉取运行容器
      • 测试build dockerfile
      • 测试持久运行容器
      • 测试主机重启后,docker各服务是否正常自启
    • 卸载方法
    • 附:各安装包作用说明(以及插件)
        • 1. `containerd.io_<version>_<arch>.deb`
        • 2. `docker-ce_<version>_<arch>.deb`
        • 3. `docker-ce-cli_<version>_<arch>.deb`
        • 4. `docker-buildx-plugin_<version>_<arch>.deb`
        • 5. `docker-compose-plugin_<version>_<arch>.deb`
    • 附:`docker-ce-rootless-extras_<version>_<arch>.deb`和`docker-scan-plugin_<version>_<arch>.deb `是什么?

https://docs.docker.com/desktop/install/ubuntu/

https://docs.docker.com/engine/install/ubuntu/#install-from-a-package

说明:这个安装方式是下载.deb包安装,最终效果几乎与用apt install docker.io完全相同。不仅安装方便,卸载起来也十分方便,不会破环系统环境。

安装步骤

下载安装包

https://download.docker.com/linux/ubuntu/dists/

我是ubuntu20.04,选择focal:

在这里插入图片描述

选择pool(官网让选这的):
在这里插入图片描述
解释:

目录说明:

  • edge/:包含一些实验性或开发中的软件包,可能不稳定或不适合生产环境使用。
  • nightly/:包含每日构建的软件包,用于测试和开发目的。
  • pool/:存放软件包的目录。
  • stable/:包含稳定版本的软件包,适合生产环境使用。
  • test/:包含一些测试相关的软件包。

文件说明:

  • InRelease:包含软件包的元数据和数字签名,用于验证软件包的完整性和真实性。
  • Release:包含软件包的元数据,如软件包列表、版本信息等。
  • Release.gpg:包含对Release文件的数字签名,用于验证Release文件的真实性。

选择stable:

在这里插入图片描述

选择amd64(根据系统来,我的目前是amd64):

在这里插入图片描述

将下列文件全下载下来:

containerd.io_<version>_<arch>.deb
docker-ce_<version>_<arch>.deb
docker-ce-cli_<version>_<arch>.deb
docker-buildx-plugin_<version>_<arch>.deb
docker-compose-plugin_<version>_<arch>.deb

关于下载什么版本的,我就根据我ubuntu20.04虚拟机上之前用apt install docker.io的来吧:

在这里插入图片描述

这是我们ubuntu20.04arm盒子的,我也备份下:

root@ubuntu:~# docker version
Client:
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.1
 Git commit:        20.10.21-0ubuntu1~20.04.2
 Built:             Thu Apr 27 05:56:44 2023
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.1
  Git commit:       20.10.21-0ubuntu1~20.04.2
  Built:            Thu Apr 27 05:37:01 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.12-0ubuntu1~20.04.1
  GitCommit:        
 runc:
  Version:          1.1.4-0ubuntu1~20.04.3
  GitCommit:        
 docker-init:
  Version:          0.19.0
  GitCommit:        
root@ubuntu:~# 
root@ubuntu:~# 

不过我的虚拟机貌似没装buildx插件和compose,我用命令装下:

apt install docker.io

docker buildx install

apt install docker-compose

算了,还是不装了,不装好像也没事,docker基本功能能用就行。(我后来试了,上面命令好像有问题,buildx还装不了。。。)

那我们就只装下面这几个,保证基本功能能用就行:

containerd.io_1.6.12-1_amd64.deb
docker-ce-cli_20.10.21~3-0~ubuntu-focal_amd64.deb
docker-ce_20.10.21~3-0~ubuntu-focal_amd64.deb

这也奇怪,列表中文件名有~符号,下下来文件又没了。。。。

在这里插入图片描述

拷贝到目标主机并执行安装命令

把下好的文件拷贝到目标虚拟机中:

在这里插入图片描述

然后根据官网提供的方法安装各安装包:

在这里插入图片描述

我这为了方便和可维护,直接做了个脚本:

#!/bin/bash

# 打印所有,包括注释
# set -v
# 打印执行命令
# set -x
# 命令出错退出
set -e
# 使用未初始化变量退出
set -u

USER=root

# Check user: only support root
WHO=$(whoami | grep "${USER}$")
if [ -z "${WHO}" ]; then
    echo
    echo "Please change to \"${USER}\" user mode first!"
    echo
    exit 1
fi

# 获取脚本所在目录
SCRIPT_DIR=$(
    cd "$(dirname "$0")" || {
        echo "cd Failure"
        exit 1
    }
    pwd
)

DEB_PATH_DOCKER_CONTAINERD_IO=$SCRIPT_DIR/containerd.io_1.6.12-1_amd64.deb
DEB_PATH_DOCKER_CE=$SCRIPT_DIR/docker-ce-cli_20.10.21_3-0_ubuntu-focal_amd64.deb
DEB_PATH_DOCKER_CE_CLI=$SCRIPT_DIR/docker-ce_20.10.21_3-0_ubuntu-focal_amd64.deb
# DEB_PATH_DOCKER_BUILDX=$SCRIPT_DIR/docker-buildx-plugin_0.11.1-1_ubuntu.20.04_focal_amd64.deb
# DEB_PATH_DOCKER_COMPOSE=$SCRIPT_DIR/docker-buildx-plugin_0.11.1-1_ubuntu.20.04_focal_amd64.deb

# 安装.deb包(注意是有顺序的,顺序错了安装不起来)
dpkg -i $DEB_PATH_DOCKER_CONTAINERD_IO \
    $DEB_PATH_DOCKER_CE \
    $DEB_PATH_DOCKER_CE_CLI

把脚本搞到目录下,并且运行:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

验证

拉取运行容器

# 第一次安装可以不用,但是卸载后再安装,就需要执行一下,否则会报错:“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”
sudo service docker start
sudo docker run hello-world

成功了!

在这里插入图片描述

测试build dockerfile

测试build dockerfile也没有问题,那那个buildx应该是build跨平台镜像用的:

在这里插入图片描述

测试持久运行容器

在这里插入图片描述

测试主机重启后,docker各服务是否正常自启

重启后:

在这里插入图片描述

看起来应该是没有什么问题,跟用apt install docker.io效果一样

卸载方法

可以用dpkg -r <package_name>命令来卸载包,

我写了个卸载脚本,执行脚本可以一键卸载docker(卸载上面安装的那三个.deb包):

#!/bin/bash

# 打印所有,包括注释
# set -v
# 打印执行命令
# set -x
# 命令出错退出
set -e
# 使用未初始化变量退出
set -u

USER=root

# Check user: only support root
WHO=$(whoami | grep "${USER}$")
if [ -z "${WHO}" ]; then
    echo
    echo "Please change to \"${USER}\" user mode first!"
    echo
    exit 1
fi

# 卸载函数
uninstall_package() {
    package_name=$1

    dpkg -r $package_name
    if [ $? -ne 0 ]; then
        echo "卸载 $package_name 失败!"
        echo
        exit 1
    fi
    echo "卸载 $package_name 成功"
    echo
}

# 注意卸载顺序:docker-ce 依赖 docker-ce-cli,不能先卸载 docker-ce-cli

# 卸载docker-ce
uninstall_package "docker-ce"

# 卸载docker-ce-cli
uninstall_package "docker-ce-cli"

# 卸载containerd.io
uninstall_package "containerd.io"

执行结果:

在这里插入图片描述

附:各安装包作用说明(以及插件)

下面是Docker相关软件包的安装文件,各自的作用如下:

1. containerd.io_<version>_<arch>.deb

这是Docker容器运行时(containerd)的软件包。Containerd是一个开源的容器运行时,用于管理和运行容器。

2. docker-ce_<version>_<arch>.deb

这是Docker社区版(Community Edition)的软件包。Docker CE是免费的Docker版本,适用于个人和小型团队使用。

3. docker-ce-cli_<version>_<arch>.deb

这是Docker社区版的命令行界面(CLI)的软件包。它提供了与Docker守护进程进行交互的命令行工具。

4. docker-buildx-plugin_<version>_<arch>.deb

这是Docker Buildx插件的软件包。Buildx是一个用于构建多平台镜像的工具,它可以同时构建多个平台的镜像,并支持交叉编译。

5. docker-compose-plugin_<version>_<arch>.deb

这是Docker Compose插件的软件包。Docker Compose是一个用于定义和运行多容器应用的工具,它使用一个YAML文件来配置应用的服务、网络和卷等。

附:docker-ce-rootless-extras_<version>_<arch>.debdocker-scan-plugin_<version>_<arch>.deb 是什么?

https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/

下载文件列表里有这两个,不知道是啥?

在这里插入图片描述

在这里插入图片描述

docker-ce-rootless-extras_<version>_<arch>.deb 是Docker社区版(Community Edition)的非root用户额外组件的软件包。它包含了一些用于在非root用户下运行Docker的额外工具和插件。这些组件允许非特权用户在没有root权限的情况下使用Docker。

docker-scan-plugin_<version>_<arch>.deb 是Docker的扫描插件的软件包。这个插件允许用户对Docker镜像进行安全扫描,以检测其中的漏洞和安全问题。它可以帮助用户在构建和部署容器时提前发现潜在的安全风险。

这两个软件包是Docker的附加组件,可以根据需要选择安装。docker-ce-rootless-extras适用于非root用户使用Docker的场景,而docker-scan-plugin适用于进行Docker镜像的安全扫描。

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

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

相关文章

【iPadOS 开发】打开 iPad 的开发者模式的方法

文章目录 1. 前提条件2. 具体方法 1. 前提条件 iPad 通过 Type-C 线连接到 Mac Mac上已经安装 Xcode 2. 具体方法 在 Xcode 顶栏中的 Window 中打开 Devices and Simulators &#xff0c;可以看到自己的设备&#xff1a; 接着在 iPad 上进入 设置 > 隐私与安全性 > 开…

2023年Houdini电脑配置推荐,附上10款Houdini渲染器

SideFX Houdini是一款非常强大的工具&#xff0c;旨在创建最高质量的电影效果。它需要强大的系统来实现平稳的工作流程。赞奇云工作站为 SideFX Houdini找到最佳的 CPU、GPU 和渲染器。 什么是 SideFX Houdini&#xff1f; SideFX Houdini是一款 3D 动画和视觉效果软件&#…

监狱人员定位系统:提高监狱安全性及维护社会安全的工具

如何提高监狱安全性一直是社会关注的焦点。在现代化的安全管理工具中&#xff0c;监狱人员定位系统正逐渐被广泛应用于各地监狱。通过实时定位和监控&#xff0c;这一系统能够有效提高监狱安全性和管理效率&#xff0c;维护社会的安全和稳定。 那么&#xff0c;在这篇文章中&a…

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级…

Python实现Up数据信息采集 <内含JS逆向解密>

目录标题 前言环境使用:模块使用:实现基本流程:代码展示&#xff1a;尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: python 3.8 >>> 运行代码 pycharm 2021.2 >>> 辅助敲代码 模块使用: 第三方模块 需要安装 import requests >…

chapter12:SpringBoot与检索

Spring Boot与检索视频 1. 简介 我们的应用经常需要添加检索功能&#xff0c;开源的ElasticSearch是目前全文搜索引擎的首选。 他可以快速的存储、搜索和分析海量数据。SpringBoot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。 ElasticSearch是一…

骨头的诱惑题解

样例输入1&#xff1a; 4 4 5 S.X. ..X. ..XD ....样例输出1&#xff1a; NO样例输入2&#xff1a; 3 4 5 S.X. ..X. ...D样例输出2&#xff1a; YES思路分析&#xff1a; 看到能否到达终点的题目先想 d f s dfs dfs。但这道题规定必须刚好 T T T秒到达&#xff0c;所…

记一次对Ghidra反编译的修复

前言 Ghidra是NSA在2019年开源的逆向工具&#xff0c;可以说从开源发布开始&#xff0c;就基本成了开源界唯一可以与 IDA 竞争的存在&#xff0c;其它的工具多少总是欠点意思。不过从实际情况来看&#xff0c;虽然 Ghidra一直在积极维护&#xff0c;但是现在的Bug情况跟IDA相比…

【《Azure、DevOps和微服务软件架构实战(第2版)》——教你构建并交付可满足组织业务需求的高度可扩展的企业应用程序】

本书的编写方式与很多技术书籍不同&#xff0c;作者站在架构师的视角&#xff0c;以一个项目的整个生命周期为主线&#xff0c;向读者展示了如何在云时代设计和实现一款软件&#xff0c;其内容涵盖了从软件架构设计的基本原则、需求收集、解决方案设计&#xff0c;可选技术架构…

扫码自测,全对有奖!《人月神话》知识自测卷01-共10题

自测链接 https://www.101test.com/cand/index?paperIdUH5KRN 最先答对全部题目的前三名将获赠清华大学出版社近年出版的新书。 请把全对(10分)的截屏发给微信号13811867132&#xff08;备注&#xff1a;人月兑奖&#xff09;&#xff0c;并留下相关信息。 1. [单选] 在&qu…

Vue3兄弟组件之间传值-mitt

Vue3兄弟组件之间传值-使用mitt插件 环境vue3tsvite 1.安装mitt 在终端cd到项目目录运行 npm install mitt安装成功在package.json文件会有显示 2.在main.js里面全局引用 // An highlighted block import mitt from mitt app.config.globalProperties.$mitt mitt()3.此时…

低代码开源项目汇总

低代码是基于可视化和模型驱动理念&#xff0c;结合云原生与多端体验技术&#xff0c;它能够在多数业务场景下实现大幅度的提效降本&#xff0c;为专业开发者提供了一种全新的高生产力开发范式。 不定期汇总更新一些低代码开源项目。 1、Appsmith Appsmith 是一款开源低代码…

根据UIL下载图片/视频、根据URL自动下载图片/视频、GUI自动下载想要的图片

1&#xff0c;根据UIL下载图片/视频 def downForInterface(file_path):count 1value_rows []with open(file_path, encodingUTF-8) as file:f_csv csv.reader(file)for r in f_csv:value_rows.append(r)for file_path in value_rows:cunmulu if . in file_path[0]:print(cu…

Java毕业设计-汽车出租系统【含源码、论文】

前言 汽车出租管理系统&#xff1a; 随着当今社会科学技术的高速发展&#xff0c;人民的生活水平不断的提高&#xff0c;自由行也开始盛行。有些人为了方便&#xff0c;选择汽车租赁的方式出行&#xff0c;因此汽车租赁成为一个极具市场潜力的行业。面对日趋发展的租赁市场&a…

有向图的强联通分量-SCC-Tarjan算法

有向图的强联通分量(SCC)Tarjan算法 强连通分量&#xff08;Strongly Connected Components&#xff0c;SCC&#xff09;的定义是&#xff1a;极大的强连通子图。 下图中&#xff0c;子图{1,2,3,4}为一个强连通分量&#xff0c;因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强…

B2B2C多商户跨境电商购物网站搭建(后台采集功能)

如何部署开发一个B2B2C开源多语言多商户跨境外贸网站 随着全球化的发展&#xff0c;跨境外贸成为了许多企业拓展业务的重要方向。搭建一个B2B2C跨境外贸网站&#xff0c;将有助于实现企业的全球化经营。那么如何搭建一个B2B2C跨境外贸网站呢&#xff1f; 一、选择合适的开源平…

安科瑞智能照明控制系统的应用发展需求-安科瑞黄安南

【摘 要】 &#xff1a;随着电力电子技术的快速发展&#xff0c;智能照明控制技术已经成为楼宇自动化控制系统的重要组成部分&#xff0c;是绿色照明的发展方向。智能照明控制系统在照明节能上起到重要的作用。文章结合实际案例&#xff0c;探讨了智能照明控制技术在照明节能上…

OK3588的NPU加速推理resnet18—rknn_toolkit_lite2的Python语言篇

OK3588的NPU加速推理MobileNet——Python语言篇 Rknn_toolkit_lite2Miniconda安装创建虚拟环境并运行NPU加速推理代码注释 Rknn_toolkit_lite2 RKNN Toolkit Lite2 主要用于 RKNN 模型在 Rockchip NPU 上的部署。 在使用 RKNN Toolkit Lite2 之前&#xff0c;用户需要先通过 R…

LeetCode:面试题:消失的数字——时间复杂度

题目&#xff1a;数组nums中包含0~n的所有整数&#xff0c;但其中缺失了一个数&#xff0c;请写代码找出那个缺失的整数&#xff0c;要求在时间复杂度为O&#xff08;N&#xff09;的时间内完成 思路1&#xff1a;冒泡排序遍历&#xff08;下一个数不等于上一个数1&#xff0c…

Mybatis中 #{} 和 ${} 的区别,SLQ注入

#{}:预编译处理&#xff0c;类似于占位符。${}:字符直接替换 预编译处理&#xff1a;Mybatis在处理#{}时候&#xff0c;会将SQL中的#{}转换为&#xff1f;&#xff0c;使⽤ PreparedStatement 的 set ⽅法来赋值。 直接替换&#xff1a;是MyBatis 在处理 ${} 时&#xff0c;就是…