信创之国产浪潮电脑+统信UOS操作系统体验8:安装Docker并进行测试验证scratch镜像

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython

一、前言

今日在进行Docker容器相关知识的学习,不过学习环境都不是基于统信UOS操作系统的,为了实验,老猿觉得手头国产浪潮电脑+统信UOS操作系统就是原生的linux操作系统,正适合进行试验,因此就一边查资料一边动手,为了为后来者提供参考,就将整个过程详细记录下来。

二、安装Docker

2.1、确认操作系统兼容版本

由于不同Linux系列在软件包安装管理上使用方式不同,在安装之前需要确认操作系统是哪个系列。
统信UOS操作系统主要兼容Debian Linux系列,可以通过如下指令验证:

administrator@jwp:~/Desktop$dpkg --get-selections | grep -v deinstall | grep -i ubuntu
administrator@jwp:~/Desktop$dpkg --get-selections | grep -v deinstall | grep -i Debian
debian-archive-keyring                          install
debianutils                                     install
intltool-debian                                 install
libsdl1.2debian:arm64                           install
odbcinst1debian2:arm64                          install

Debian系统中,使用apt-get命令来安装软件。例如,如果要安装名为package的软件包,可以执行以下命令:sudo apt-get install package。

需要注意的是,在安装软件之前,需要确保已经更新了软件源列表。可以使用sudo apt-get update命令来更新软件源列表。

另外,除了apt-get命令之外,还可以使用dpkg命令来安装Debian软件包,例如sudo dpkg -i package.deb。但是,dpkg命令需要在已经下载了Debian软件包的情况下使用,即必须先从某个源(例如官方源或第三方镜像)下载相应的软件包文件(通常是以.deb为扩展名的文件),下载过程可以通过在终端中使用apt-get或wget等工具下载.deb软件包文件。对于一些依赖关系比较复杂的软件包,建议使用apt-get来进行安装和配置。

2.2、使用sudo -i 指令进入超级用户操作模式避免频繁输入密码

administrator@jwp:~/Desktop$ sudo -i
请输入密码:
验证成功
root@jwp:~# 

2.3、执行机器软件包更新

因为Docker可能会依赖于特定版本的软件包或依赖关系,如果系统上的软件包列表不是最新的,可能会导致安装失败或出现其他问题。因此安装Docker之前需要确保系统已经更新了最新的软件包列表,以避免潜在的安装问题。

Linux的apt-get update指令用于更新本地软件包列表。当运行这个命令时,系统会连接到软件包仓库,并获取可用的软件包的最新信息。它通常与其他命令一起使用,如apt-get upgrade,用于更新系统中的软件包。

root@jwp:~# apt-get update
命中:1 https://pro-driver-packages.uniontech.com eagle InRelease
命中:2 https://cdn-professional-security.chinauos.com eagle/1050 InRelease                                   
命中:3 https://professional-packages.chinauos.com/desktop-professional eagle InRelease                       
命中:4 https://professional-packages.chinauos.com/printer eagle InRelease                                 
获取:5 https://app-store-files.uniontech.com/231129162224956/appstore eagle-pro InRelease [6,134 B]
获取:6 https://app-store-files.uniontech.com/231129162224956/appstore eagle-pro/appstore arm64 Packages [1,628 kB]
已下载 1,634 kB,耗时 4(441 kB/s)
正在读取软件包列表... 完成

2.4、执行docker安装指令

做了软件包更新后,就可以执行执行Docker安装了,指令和执行情况如下:

root@jwp:~# apt-get install docker-ce docker-ce-cli containerd.io
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包是自动安装的并且现在不需要了:
  arch-test bridge-utils chromium-common chromium-sandbox cloud-image-utils debootstrap deepin-picker-cli
  distro-info libboost-log1.67.0 libboost-program-options1.67.0 libboost-serialization1.67.0
  libboost-test1.67.0 libboost-timer1.67.0 libfuse3-3 libgles2-mesa libleveldb1d liblxc1 libpam-cgfs
  libprotobuf-dev libprotoc17 libqt5charts5 libsdl2-image-2.0-0 lxc lxc-templates lxcfs protobuf-compiler
  qemu-utils uengine uengine-android-image uidmap zlib1g-dev
使用'apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
  containerd.io docker-ce docker-ce-cli
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 0 B/68.1 MB 的归档。
解压缩后会消耗 303 MB 的额外空间。
正在选中未选择的软件包 containerd.io。
(正在读取数据库 ... 系统当前共安装有 250822 个文件和目录。)
准备解压 .../containerd.io_1.3.4-1_arm64.deb  ...
正在解压 containerd.io (1.3.4-1) ...
/var/cache/apt/archives/containerd.io_1.3.4-1_arm64.deb;
signature verify success!
正在选中未选择的软件包 docker-ce-cli。
准备解压 .../docker-ce-cli_5%3a19.03.8.2-1_arm64.deb  ...
正在解压 docker-ce-cli (5:19.03.8.2-1) ...
/var/cache/apt/archives/docker-ce-cli_5%3a19.03.8.2-1_arm64.deb;
正在选中未选择的软件包 docker-ce。
准备解压 .../docker-ce_5%3a19.03.8.2-1_arm64.deb  ...
正在解压 docker-ce (5:19.03.8.2-1) ...
/var/cache/apt/archives/docker-ce_5%3a19.03.8.2-1_arm64.deb;
正在设置 containerd.io (1.3.4-1) ...
正在设置 docker-ce-cli (5:19.03.8.2-1) ...
正在设置 docker-ce (5:19.03.8.2-1) ...
正在处理用于 systemd (241.50-1+deepin1) 的触发器 ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 deepin-app-store (7.7.3.0012-1) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
root@jwp:~# 

执行的apt-get install docker-ce docker-ce-cli containerd.io 指令,用于安装 Docker Community Edition(CE)和 Docker Command Line Interface(CLI)以及 containerd.io 容器运行时,以便可以开始使用 Docker 构建和管理容器化应用程序:

  • Docker CE 是 Docker 社区版,是一个免费、开源的容器平台,用于构建、打包和运行容器化应用程序。它提供了一组命令行工具和 API,使开发人员可以轻松地创建、部署和管理容器化应用程序
  • Docker CLI 是 Docker 的命令行接口,提供了用于管理 Docker 容器的命令行工具。通过 Docker CLI,可以创建、启动、停止、移动和删除容器
  • containerd.io 是一个容器运行时,用于管理容器的生命周期和资源。它可以作为 Docker 和其他容器平台的运行时组件,提供高效的容器管理和资源分配

2.5、验证Docker安装是否成功

2.5.1、查看版本信息

可以使用docker version查看docker是否安装成功以及安装的版本信息。

root@jwp:~# docker version
Client:
 Version:           19.03.0-dev
 API version:       1.40
 Go version:        go1.15.9
 Git commit:        
 Built:             Thu Dec  9 02:12:36 2021
 OS/Arch:           linux/arm64
 Experimental:      false

Server:
 Engine:
  Version:          dev
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.15.9
  Git commit:       
  Built:            Thu Dec  9 02:10:48 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          2c90293f
  GitCommit:        2c90293f6964528176db4fc61d3defe7ee281779
 runc:
  Version:          1.0.0~rc6+dfsg1
  GitCommit:        1.0.0~rc6+dfsg1-3
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
root@jwp:~# 

可以看到这个版本是比较老的,这是因为apt默认从操作系统配置仓库拉取安装包,这个包本身就版本比较旧。

可以使用apt-cache命令查询软件包信息(显示指定软件包的安装状态和候选版本信息,包括本地缓存中的版本和远程仓库中的版本),包括版本号、软件源信息等,如下所示:

root@jwp:~# apt-cache policy docker-ce
docker-ce:
  已安装:5:19.03.8.2-1
  候选: 5:19.03.8.2-1
  版本列表:
 *** 5:19.03.8.2-1 500
        500 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 Packages
        500 https://professional-security.chinauos.com eagle/1050/main arm64 Packages
        100 /usr/lib/dpkg-db/status
root@jwp:~# 

可以看到软件原是统信官网。

2.5.2、运行Docker输出hello world

Docker的hello-world镜像是一个非常简单的镜像,通常用于演示和测试Docker的基本功能。它包含一个名为“hello”的可执行文件,当在容器中运行时,该文件会打印出“Hello from Docker”的文本信息。

hello-world镜像非常小,只有几KB大小,因此非常适合用于测试和演示Docker的基本操作,例如拉取、构建和运行镜像等。

要使用hello-world镜像,可以在终端或命令行界面中输入以下命令:

root@jwp:~/docker_test# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

root@jwp:~/docker_test# 

可以看到执行该命令后,Docker将会创建一个新的容器并执行“hello”命令,打印出“Hello from Docker”的文本信息。

执行docker images可以查看当前存在的镜像,执行docker ps指令可以查看运行的容器:

root@jwp:~/docker_test# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              b038788ddb22        6 months ago        9.14kB
root@jwp:~/docker_test# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@jwp:~/docker_test# 

可以看到hello-world已经退出不在运行。

2.6、验证scratch 镜像是否可以创建或拉取

下面试图通过docker pulldocker build 拉取和创建一个scratch 镜像:

root@jwp:~/docker_test# docker pull scratch 
Using default tag: latest
Error response from daemon: 'scratch' is a reserved name

root@jwp:~/docker_test# cat Dockerfile
FROM scratch
root@jwp:~/docker_test# 

root@jwp:~/docker_test# docker build -t scratch .
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM scratch
 ---> 
No image was generated. Is your Dockerfile empty?
root@jwp:~/docker_test# 

可以看到无法拉取scratch镜像,而通过一个只有FROM scratch配置项的Dockerfile无法创建一个镜像。

三、小结

本文介绍了Docke的证scratch镜像的概念、机制和原理,以及其使用优点,同时验证了scratch无法被拉取和创建,只能作为一个创建其他镜像的base镜像使用。

参考资料

1、Docker基础知识 (28) - 在 Dockerfile 中以 scratch 为基础镜像 (FROM scratch)
2、每天5分钟玩转 Docker 容器技术之镜像

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于国产操作系统的介绍内容请参考专栏《国产信创之光》的相关文章,更多云计算相关方面的介绍请参考《云计算与公有云服务》专栏的介绍。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

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

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

相关文章

【SparkSQL】基础入门(重点:SparkSQL和Hive的异同、SparkSQL数据抽象)

【大家好,我是爱干饭的猿,本文重点介绍Spark SQL的定义、特点、发展历史、与hive的区别、数据抽象、SparkSession对象。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一…

用flutter 写一个专属于儿子的听书的app

背景: 儿子最近喜欢上了用儿童手表听故事,但是手表边里的应用免费内容很少,会员一年要300多,这么一笔巨款,怎能承担的起,所以打算自己开发一个专属于儿子的听书app。 最终效果: 架构: 后端由两…

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章,本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…

解决:ModuleNotFoundError: No module named ‘qt_material‘

解决:ModuleNotFoundError: No module named ‘qt_material’ 文章目录 解决:ModuleNotFoundError: No module named qt_material背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时,报错&…

Django快速搭建静态网页

Django的快速搭建 这个是例子 这个是一个目录 项目名称:项目似乎被命名为DJ0928,这是Django项目的根目录。 文件都是Django项目的核心配置文件。 settings.py 包含了项目的配置设置。urls.py 定义了项目的URL路由。wsgi.py 和 asgi.py 分别用于Web服务器…

力扣刷题篇之分治

系列文章目录 目录 系列文章目录 前言 一、分解问题 二、解决子问题 三、合并结果 总结 前言 刷题按照: [力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode) 参考: 「五大常用算法」一文搞懂分治算法…

爬虫学习 异步爬虫(五)

多线程 多进程 协程 进程 运行中的程序 线程 被CPU调度的执行过程,操作系统 运算调度的min单位 在进程之中,进程中实际运作单位 from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(target …

异步操作的方法

在高级语言中已经有了异步的原语言,而在C 中的最好的方式就是 libevent 的方式,我这还是相当认同的,高级语言就不需要在苦哈哈的,事件转圈了,但是原理还是以事件为基础的 一句话就是在一个循环中等着他执行完,这个循环中有很多其他…

CodeMeter软件保护及授权管理解决方案(二)

客户端管理工具 CodeMeter Runtime是CodeMeter解决方案中的重要组成部分,其为独立软件包,开发者需要把CodeMeter Runtime和加密后的软件一起发布。CodeMeter Runtim包括以下组件用于实现授权的使用: CodeMeter License Server授权服务器 Co…

Leetcode(面试题 08.01.)三步问题

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中,我们将要详细介绍一下Leetcode(面试题 08.01.)三步问题相关的内容 一、题目分析 1.小孩可以上一阶,两阶&#xff…

2948. 交换得到字典序最小的数组 (分组排序)

Problem: 2948. 交换得到字典序最小的数组 文章目录 题目思路Code 题目 给你一个下标从 0 开始的 正整数 数组 nums 和一个 正整数 limit 。 在一次操作中&#xff0c;你可以选择任意两个下标 i 和 j&#xff0c;如果 满足 |nums[i] - nums[j]| < limit &#xff0c;则交换…

Python之数据可视化

文章目录 一、1、matplotlib简单应用1.1、绘制带有中文标签和图例的图1.2、 绘制散点图1.3、绘制饼状图1.4、多个图形一起显示 一、 1、matplotlib简单应用 matplotlib模块依赖于numpy模块和tkinter模块&#xff0c;可以绘制多种形式的图形&#xff0c;包括线图、直方图、饼状…

05_MySQL主从复制架构

任务背景 ##一、真实案例 某同学刚入职公司&#xff0c;在熟悉公司业务环境的时候&#xff0c;发现他们的数据库架构是一主两从&#xff0c;但是两台从数据库和主库不同步。询问得知&#xff0c;已经好几个月不同步了&#xff0c;但是每天会全库备份主服务器上的数据到从服务…

一文详解Python中常用数据类型

文章目录 Python 中常用的数据类型包括&#xff1a;Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典&#xff08;Dictionary&#xff09;Python中的集合&#xff08;Set&#xff09;Python中的…

Python---练习:求某同学成绩的总分及平均分

需求&#xff1a; 已知某同学的语文(70)、数学(90) 、英语(80)、历史(75)、地理(85)五门课的成绩,编程求该同学的总分以及平均分。 思考&#xff1a; 要求是算总分和平均分&#xff0c;先看总分&#xff0c;已经知道了各科成绩&#xff0c;那么可以用把成绩赋值给每个学科的…

使用Postman创建Mock Server

这篇文章将教会大家如何利用 Postman&#xff0c;通过 Mock 的方式测试我们的 API。 什么是 Mock Mock 是一项特殊的测试技巧&#xff0c;可以在没有依赖项的情况下进行单元测试。通常情况下&#xff0c;Mock 与其他方法的主要区别就是&#xff0c;用于取代代码依赖项的模拟对…

Linux下Docker 离线安装详细步骤,亲测成功

1.离线原因&#xff1a;公司新创不能使用开元linux&#xff0c;使用了一个变种centOS&#xff0c;致使yum被禁 2.步骤&#xff1a; 2.1 下载docker tar包&#xff0c;下载地址&#xff1a;Index of linux/https://download.docker.com/linux/ 2.2 新建自己的软件目录&am…

IELTS学习笔记_grammar_新东方

参考&#xff1a; 新东方 田静 语法 目录&#xff1a; 导学简单句… x.1 导学 学语法以应用为主。 基础为&#xff1a;单词&#xff0c;语法 进阶为&#xff1a;听说读写译&#xff0c;只考听说读写。 words -> chunks -> sentences, chunks&#xff08;语块的重要…

嵌入式设备与PC上位机通信协议设计的几点原则

嵌入式设备在运行中需要设置参数&#xff0c;这个工作经常由PC机来实现&#xff0c;需要为双方通信设计协议&#xff0c;有代表性协议是如下三种&#xff1a; 从上表可以看到&#xff0c;一般嵌入式设备内存和运算性能都有限&#xff0c;因此固定二进制是首选通信协议。 一&am…

使用 Docker 安装和配置 MySQL 数据库简介

目录 一、使用镜像安装 1、查询镜像 2、拉取镜像 3、查看本地镜像 4、启动docker镜像 二、使用Docker Compose安装 1、安装Docker和Docker Compose 2、创建Docker Compose文件&#xff1a; 3、启动MySQL容器 4、验证MySQL容器是否正常运行 5、连接到MySQL容器 6、停止…