ARM46+KylinOS 环境下 Docker 安装与 Nginx 镜像操作实践

目录

一、背景知识储备

1. ARM46 架构概述

2. KylinOS 操作系统简介

3. Docker 与 Nginx 技术原理

二、Docker 安装前准备

1. 系统环境检查

2. 安装依赖包

三、Docker 安装过程

1. 添加 Docker 官方 GPG 密钥

2. 添加 Docker 软件源

3. 安装 Docker

四、安装过程中的错误及解决

1. 错误过程

2. 错误原因分析

3. 解决方法

五、Nginx 镜像操作

1. 拉取 Nginx 镜像

2. 查看镜像

3. 启动 Nginx 容器

4. 查看容器状态

5. 停止和删除容器

六、实践总结与拓展思考


一、背景知识储备

1. ARM46 架构概述

        ARM 架构凭借其低功耗、高性能的特点,在嵌入式设备、移动终端以及数据中心等领域得到广泛应用。ARM46 架构作为其中的一个分支,具备独特的指令集与硬件特性。与常见的 x86 架构相比,ARM46 采用精简指令集计算机(RISC)设计理念,指令长度固定,执行效率高,这使得它在能耗和空间占用上更具优势 。不过,也正因为架构差异,传统基于 x86 架构开发的软件无法直接在 ARM46 架构上运行,需要进行针对性的迁移适配。

2. KylinOS 操作系统简介

        KylinOS 是国产操作系统中的重要代表,它基于 Linux 内核进行深度开发,在安全性、稳定性和兼容性方面有着出色的表现。KylinOS 不仅支持多种国产 CPU 架构,还对国内常用的业务软件进行了适配优化,是推动国产化应用落地的关键基础。在 ARM46 架构上运行 KylinOS,能够充分发挥硬件性能,同时为各类应用提供安全可靠的运行环境。

3. Docker 与 Nginx 技术原理

        Docker 是一种开源的应用容器引擎,它采用容器化技术,将应用程序及其依赖项打包成一个可移植的容器。容器之间相互隔离,拥有独立的运行环境,这使得应用在不同环境中的部署变得更加简单高效。无论是开发、测试还是生产环境,只要安装了 Docker,就能快速部署应用,大大减少了因环境差异导致的部署问题。

        Nginx 则是一款高性能的 HTTP 和反向代理服务器,以其轻量级、高并发处理能力而闻名。Nginx 可以作为 Web 服务器直接处理 HTTP 请求,也能作为反向代理服务器,将客户端请求转发到后端的多个服务器上,实现负载均衡,提高服务的可用性和性能。在容器化环境中,Nginx 镜像的灵活使用,进一步增强了应用部署的便捷性和可扩展性。

二、Docker 安装前准备

1. 系统环境检查

        在 ARM46+KylinOS 环境中,我们首先通过uname -a命令查看系统内核信息。该命令会输出包括内核版本、架构类型、主机名等详细信息,确保当前系统确实是 ARM46 架构的 KylinOS 系统。接着,使用df -h命令检查磁盘空间,该命令以人类可读的格式显示磁盘分区的使用情况,我们需要确保有足够的空间用于下载 Docker 安装包以及后续镜像和容器的存储。经检查,系统资源满足 Docker 安装要求。同时,使用ping www.baidu.com等命令测试网络连通性,保证系统已联网,以便后续下载安装包和镜像。

2. 安装依赖包

        Docker 的运行依赖于一些基础软件包。在 KylinOS 系统中,软件包管理采用类似 Ubuntu 的apt工具。我们首先使用sudo apt-get update命令更新软件包列表,该命令会从配置的软件源中获取最新的软件包信息,确保后续安装的是最新版本的依赖包。接着执行sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common命令安装必要的依赖包。其中,apt-transport-https用于支持通过 HTTPS 协议下载软件包,保证下载过程的安全性;ca-certificates包含了证书颁发机构的证书,用于验证软件包来源的合法性;curl是一个强大的命令行工具,用于从网络上下载文件;software-properties-common则提供了一些常用的软件源管理工具,方便我们添加和管理软件源。

三、Docker 安装过程

1. 添加 Docker 官方 GPG 密钥

        为了确保下载的 Docker 安装包来源可靠,防止软件包被篡改,我们需要添加 Docker 官方的 GPG 密钥。使用命令curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg,该命令通过curl工具从 Docker 官方网站下载 GPG 密钥,并使用gpg命令将其转换为二进制格式后保存到指定路径。GPG 密钥就像是软件包的 “数字签名”,系统在安装软件包时会验证签名,只有签名正确的软件包才会被安装,从而保证了安装包的完整性和安全性。

2. 添加 Docker 软件源

        执行sudo add-apt-repository "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] Index of linux/ubuntu/ $(lsb_release -cs) stable"命令添加 Docker 软件源。这里的arch=arm64参数至关重要,因为 ARM46 架构与 ARM64 架构在一定程度上兼容,指定该参数能确保获取到适用于 ARM46 架构的 Docker 安装包。$(lsb_release -cs)用于获取当前系统对应的 Ubuntu 版本代号,理论上 KylinOS 基于 Ubuntu 开发,该命令能自动匹配版本。然而在实际操作中,由于 KylinOS 版本与 Ubuntu 原生版本存在差异,可能会导致获取的版本代号在 Docker 软件源中不被完全兼容,这也是后续可能出现问题的一个关键点。

3. 安装 Docker

        添加完软件源后,再次使用sudo apt-get update命令更新软件包列表,让系统获取到 Docker 软件源中的最新信息。然后执行sudo apt-get install -y docker-ce docker-ce-cli containerd.io命令安装 Docker。其中,docker-ce是 Docker 社区版的核心组件,包含了 Docker 的服务端和客户端;docker-ce-cli是 Docker 的命令行工具,我们通过它来管理 Docker 容器和镜像;containerd.io则是一个轻量级的容器运行时,负责容器的生命周期管理。安装完成后,使用sudo systemctl start docker命令启动 Docker 服务,此时 Docker 服务开始在后台运行。为了让 Docker 服务在系统开机时自动启动,我们执行sudo systemctl enable docker命令,将 Docker 服务添加到开机自启列表中。

四、安装过程中的错误及解决

1. 错误过程

        在执行添加 Docker 软件源命令sudo add-apt-repository "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] Index of linux/ubuntu/ $(lsb_release -cs) stable"时,系统提示E: The repository 'https://download.docker.com/linux/ubuntu focal Release' does not have a Release file.错误。最初,我们可能会简单地认为是网络问题导致无法获取 Release 文件,于是尝试多次重新执行命令,甚至更换网络环境,但问题依旧存在。进一步查看系统日志,发现每次执行命令时,系统确实尝试从指定的软件源获取信息,但由于版本代号不匹配,无法找到对应的 Release 文件,从而导致添加软件源失败。

2. 错误原因分析

        KylinOS 虽然基于 Ubuntu 开发,但在版本演进过程中,其版本号与 Ubuntu 原生版本存在一定差异。$(lsb_release -cs)命令获取的版本代号在 Docker 软件源中可能不存在对应的 Release 文件,导致系统无法验证软件源的合法性和完整性,进而无法从该软件源下载 Docker 安装包。此外,不同版本的 Ubuntu 在软件包管理机制和依赖关系上也可能存在细微差别,这也可能影响到软件源的正常使用。

3. 解决方法

        经过深入研究和测试,我们发现可以手动指定与 KylinOS 系统兼容的 Ubuntu 版本代号。通过查阅资料和实际测试,假设当前 KylinOS 系统与 Ubuntu 18.04(bionic)版本兼容,将命令修改为sudo add-apt-repository "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] Index of linux/ubuntu/ bionic stable"。修改后,再次执行sudo apt-get update更新软件包列表,此时系统能够正确识别软件源并获取相关信息。接着重新执行安装 Docker 的命令sudo apt-get install -y docker-ce docker-ce-cli containerd.io,成功完成 Docker 的安装。

五、Nginx 镜像操作

1. 拉取 Nginx 镜像

        Docker 安装完成后,我们就可以开始拉取 Nginx 镜像。使用命令sudo docker pull nginx,该命令会从默认的 Docker Hub 镜像仓库中拉取 Nginx 镜像。Docker Hub 是全球最大的容器镜像仓库,存储了海量的公开镜像。由于 Docker Hub 上有多种 Nginx 镜像版本,默认拉取的是最新版本。如果我们需要拉取特定版本的 Nginx 镜像,可以使用sudo docker pull nginx:版本号的格式,例如sudo docker pull nginx:1.23.1。在拉取镜像过程中,我们可以通过命令行输出的信息查看镜像的下载进度,当显示Status: Downloaded newer image for nginx:latest时,表示镜像拉取成功。

2. 查看镜像

        拉取完成后,通过sudo docker images命令查看已下载的镜像列表。该命令会列出本地所有的 Docker 镜像,包括仓库名称、标签、镜像 ID、创建时间和大小等信息。我们可以通过这些信息确认 Nginx 镜像是否成功拉取,以及查看镜像的具体版本和相关属性。例如,在镜像列表中找到仓库名称为nginx的镜像,查看其标签和镜像 ID,确保是我们所需的版本。

3. 启动 Nginx 容器

        使用sudo docker run -d -p 80:80 --name mynginx nginx命令启动 Nginx 容器。其中,-d参数表示以守护进程模式运行容器,即容器在后台运行,不占用当前终端;-p 80:80参数将容器内部的 80 端口映射到主机的 80 端口,这样我们在浏览器中通过访问主机 IP 地址,就能将请求转发到容器内部的 Nginx 服务上;--name mynginx参数为容器命名,方便我们后续对容器进行管理和操作。容器启动成功后,在浏览器中输入服务器 IP 地址,即可访问 Nginx 默认页面,页面上会显示 “Welcome to nginx!” 等信息,表明 Nginx 服务已正常运行。

4. 查看容器状态

        使用sudo docker ps命令查看正在运行的容器列表,该命令会显示容器的 ID、镜像名称、启动时间、运行状态等信息。通过查看这些信息,我们可以确认 Nginx 容器是否正常运行。如果需要查看所有容器(包括已停止的容器),可以使用sudo docker ps -a命令。此外,我们还可以使用sudo docker stats mynginx命令查看 Nginx 容器的资源使用情况,包括 CPU 使用率、内存使用量、网络 I/O 等信息,以便对容器性能进行监控和优化。

5. 停止和删除容器

        当不再需要 Nginx 容器时,首先使用sudo docker stop mynginx命令停止容器。该命令会向容器发送停止信号,容器会按照预定的流程关闭相关服务并退出。容器停止后,使用sudo docker rm mynginx命令删除容器。如果要强制删除正在运行的容器,可以使用sudo docker rm -f mynginx命令,但这种方式可能会导致数据丢失或服务异常,一般在确定不再需要容器且无重要数据的情况下使用。删除容器后,我们还可以使用sudo docker rmi nginx命令删除 Nginx 镜像,释放磁盘空间。

六、实践总结与拓展思考

        通过本次在 ARM46+KylinOS 环境下安装 Docker 并操作 Nginx 镜像的实践,我们深刻体会到应用迁移适配过程中环境差异带来的诸多挑战。从 Docker 安装时软件源版本匹配问题,到 Nginx 镜像的正确拉取和容器的合理配置,每一个环节都需要我们对技术原理有深入的理解,并具备解决实际问题的能力。

        在未来的学习和工作中,随着国产化替代的不断推进,我们还会遇到更多不同架构和操作系统环境下的应用迁移适配任务。例如,在 ARM 架构与国产数据库的结合应用中,如何进行数据迁移和性能优化;在 KylinOS 系统上部署大型分布式应用时,如何解决兼容性和扩展性问题等。这些都需要我们不断积累经验,深入研究技术细节,为国产化应用生态的建设贡献力量。

        同时,我们也可以进一步探索 Docker 和 Nginx 的高级应用场景,如使用 Docker Compose 进行多容器编排,利用 Nginx 的 Lua 脚本实现更复杂的反向代理和负载均衡策略等,不断提升自己在容器化技术和应用部署领域的技能水平。

你可能感兴趣的:(ARM46+KylinOS 环境下 Docker 安装与 Nginx 镜像操作实践)