☞ ░ 前往老猿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 pull
和docker 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 容器技术之镜像
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多关于国产操作系统的介绍内容请参考专栏《国产信创之光》的相关文章,更多云计算相关方面的介绍请参考《云计算与公有云服务》专栏的介绍。
关于老猿的付费专栏
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
- 付费专栏《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初学者疑难问题集专栏目录 》
- 付费专栏《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。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。