百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

银河麒麟V10使用Docker方式部署应用

nanshan 2025-01-09 15:07 14 浏览 0 评论

现在越来越多的企业级应用需要运行在国产化环境中,而银河麒麟 V10 是目前我碰到的最常用的服务器,在银河麒麟上部署应用有两种方式:使用二进制文件编译部署和使用 Docker 。

关于使用二进制文件的方式,在《银河麒麟系统安装中间件》中有相关介绍。如果客户允许使用 Docker,那可以更方便、快速进行部署了。

本文将介绍使用 Docker 的方式在银河麒麟 V10 服务器进行应用的部署。

可以使用下面命令查看服务器环境:

uname -a
hostnamectl

需要安装的组件

1、服务器已经安装 Docker ,还需要安装 docker-compose

2、中间件包括 Nginx、Redis、Mysql、Rabbitmq、MongoDB

3、.NET 8 的相关处理

docker-compose

在下面地址下载相应的安装包:

https://github.com/docker/compose/releases

将安装包放到服务器 /root 目录,然后执行下面命令进行安装:

cp docker-compose-linux-aarch64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

安装完后,执行 docker-compose -v 查看版本号,能正常显示说明安装成功。

Redis、MySql、RabbitMQ

根据验证发现中间件的 Docker 镜像有的可以直接拉取就可以,有的需要使用 arm64 版本的镜像,比如:

  • Redis、MySql、RabbitMQ 可以直接拉取
  • MongoDB、Nginx 需要用 arm64 版本

Redis、MySql、RabbitMQ 在 docker-compose.yml 文件中的配置如下:

 s2mysql:
restart: always
image: mysql:8.0
ports:
- "13306:3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=xxxxxx
volumes:
- ./config/mysql:/docker-entrypoint-initdb.d/
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --default-authentication-plugin=mysql_native_password
networks:
s2_net:
ipv4_address: 172.66.9.2

s2redis:
restart: always
image: redis:6.2.14
environment:
- TZ=Asia/Shanghai
volumes:
- ./config/redis/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
networks:
s2_net:
ipv4_address: 172.66.9.9

s2mq:
restart: always
image: rabbitmq:3.8.2-management
environment:
- TZ=Asia/Shanghai
networks:
s2_net:
ipv4_address: 172.66.9.8

奇怪的是,这些中间件的镜像中都有提供 arm 的版本,拿 Redis 来说,如下图:

可能直接使用 docker pull redis:6.2.14 拉取到的镜像是兼容版本,因为看镜像大小,直接拉取的又 146MB ,特定版本只有几十MB 。

MongoDB、Nginx

Nginx

以 Nginx 为例来看如何进行特定版本的拉取。

1、访问 https://hub.docker.com/_/nginx/tags?page=&page_size=&ordering=&name=1.25.4 ,进入到 Nginx 的 1.25.4 版本的页面。

2、点击前面的链接进入详细页面。

3、复制 index digest ,拼接到 docker pull 的后面,最终的拉取镜像的命令如下:

docker pull nginx:1.25.4@sha256:b72dad1d013c5e4c4fb817f884aa163287bf147482562f12c56368ca1c2a3705

4、拉取下来的镜像是没有 tag 的。

可以使用 docker tag 命令进行 tag 设置或直接使用镜像 ID ,前端构建的 Dockerfile 文件内容如下:

FROM 070027a3cbe0
COPY . /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

MongoDB

1、拉取特定版本镜像的方式和上面 Nginx 一样。

2、需要主要的是在银河麒麟V10 系统中,对 MongoDB 的版本是有要求的 ,一开始使用 MongoDB 5.0 镜像,容器运行失败,错误日志如下:

WARNING: MongoDB requires ARMv8.2-A or higher, and your current system does not appear to implement any of the common features for that! applies to all versions ≥5.0, any of 4.4 ≥4.4.19 see https://jira.mongodb.org/browse/SERVER-71772 see https://jira.mongodb.org/browse/SERVER-55178 see also https://en.wikichip.org/wiki/arm/armv8#ARMv8_Extensions_and_Processor_Features see also https://github.com/docker-library/mongo/issues/485#issuecomment-970864306

上面的意思指的是不能使用大于等于 5.0 的版本,如果是使用版本 4 ,不能大于 4.4.19 。

3、最后拉取了 4.2.24 ,终于运行成功了。

docker pull mongo:4.2.24@sha256:699d652ed67423d689258bad7b316cf005dfbb82b334118ec306f049042f3717

4、MongoDB 的 docker-compose.yml 配置如下:

 mongo:
restart: always
image: 97e328c342e0
environment:
- TZ=Asia/Shanghai
networks:
s2_net:
ipv4_address: 172.66.9.7

.NET 8

正常情况下,拉取 .NET 8 对应的镜像用来做应用的基础镜像即可。.NET 8 的镜像地址如下:

https://hub.docker.com/_/microsoft-dotnet-aspnet/

通过上图可以发现,.NET 6 和 .NET 7 都有支持 Debian 11 的版本,但 .NET 8 只有 Debian 12。银河麒麟 V10 的内核是 Debian 11 ,而你恰巧又用的是 .NET 8 ,那暂时还没有办法使用 Docker 的方式部署,只能直接在服务器上安装 .NET 8 环境。

1、安装依赖

yum install gmp-devel mpfr-devel libmpc-devel -y

2、执行下面命令安装

wget https://download.visualstudio.microsoft.com/download/pr/1e449990-2934-47ee-97fb-b78f0e587c98/1c92c33593932f7a86efa5aff18960ed/dotnet-sdk-8.0.204-linux-arm64.tar.gz

mkdir -p /opt/dotnet
tar -zxvf dotnet-sdk-8.0.204-linux-arm64.tar.gz -C /opt/dotnet

ln -s /opt/dotnet/dotnet /usr/bin
export DOTNET_ROOT=/opt/dotnet
export PATH=$PATH:/opt/dotnet

3、执行命令 dotnet --info 进行验证,出现下面结果表示安装成功:

.NET SDK:
Version: 8.0.204
Commit: c338c7548c
Workload version: 8.0.200-manifests.9f663350

运行时环境:
OS Name: kylin
OS Version: V10
OS Platform: Linux
RID: linux-arm64
Base Path: /opt/dotnet/sdk/8.0.204/

已安装 .NET 工作负载:
没有要显示的已安装工作负载。

Host:
Version: 8.0.4
Architecture: arm64
Commit: 2d7eea2529

.NET SDKs installed:
8.0.204 [/opt/dotnet/sdk]

.NET runtimes installed:
Microsoft.AspNetCore.App 8.0.4 [/opt/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.4 [/opt/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
None

Environment variables:
Not set

global.json file:
Not found

Learn more:
https://aka.ms/dotnet/info

Download .NET:
https://aka.ms/dotnet/download


相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: