基于华为云欧拉操作系统(HCE OS)构建HCE OS基础镜像

写在前面


不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。------村上春树


为什么需要基于华为云欧拉操作系统(HCE OS)构建 HCE OS 基础镜像?

在日常生产中,我们可能下面一些诉求,比如企业上云,之前是通过华为云欧拉系统ECS直接部署的,但是后来要求容器化,那么考虑兼容性和稳定性,需要把当前 ECS 的环境做成基础镜像,供容器化使用,基于 HCE OS 构建 HCE OS 基础镜像可以确保与华为云平台的兼容性和稳定性。这意味着镜像可以更好地集成和运行在华为云环境中,确保系统的可靠性和性能。

同时华为云欧拉操作系统是华为云平台的一种操作系统,它可能专门针对特定的云环境和应用场景进行了定制。通过基于 HCE OS 构建 HCE OS 基础镜像,可以满足特定的业务需求和定制化要求。

容器安全性方面考虑,华为云欧拉操作系统通常会提供一些安全增强功能和机制,以确保在云环境中的数据和应用的安全性。基于 HCE OS 构建 HCE OS 基础镜像可以继承这些安全特性,以提供更高的安全级别

生态系统支持,华为云平台通常会提供一整套生态系统工具和服务,如监控、自动化部署、弹性伸缩等。基于 HCE OS 构建 HCE OS 基础镜像可以更好地集成这些工具和服务,以提供更完整的云解决方案。

实验环境

bash 复制代码
[root@ecs-hce ~]# hostnamectl 
 Static hostname: ecs-hce
       Icon name: computer-vm
         Chassis: vm
      Machine ID: 91874445890c4df3958af4e0072eb5ff
         Boot ID: a6e3464ca4c646d9bfaceb94baa3a3cd
  Virtualization: kvm
Operating System: Huawei Cloud EulerOS 2.0 (x86_64)
          Kernel: Linux 5.10.0-60.18.0.50.r865_35.hce2.x86_64
    Architecture: x86-64
 Hardware Vendor: OpenStack Foundation
  Hardware Model: OpenStack Nova
[root@ecs-hce ~]# 

安装 Docker

添加桥接网卡

在安装 Docker 时添加桥接网卡是为了创建一个本地的网络环境,使 Docker 容器能够与主机和其他容器进行通信。

Docker 使用桥接网络模式作为默认网络模式。在桥接网络模式下,创建一个名为docker0的桥接接口,它充当 Docker 容器连接到主机网络的网桥。这个桥接接口允许Docker容器通过主机的网络接口与外部网络通信,并通过桥接接口互相通信。

bash 复制代码
[root@ecs-hce ~]# ip link add name docker0 type bridge

创建了一个名为docker0的桥接接口。桥接接口是用于连接多个网络设备的虚拟设备,可以将多个网络设备组成一个局域网。

bash 复制代码
[root@ecs-hce ~]# ip addr add dev docker0 10.0.0.1/8

为 docker0 接口添加了一个 IP 地址。具体来说,它将 IP 地址 10.0.0.1/8 分配给了 docker0 接口。IP 地址 10.0.0.1/8 表示一个具有 8 位子网掩码的 IPv4 地址,其中前 8 位是网络部分,后 24 位是主机部分

安装 Docker

bash 复制代码
[root@ecs-hce ~]# dnf -y install docker >> /dev/null
Failed to set locale, defaulting to C.UTF-8
retrieving repo key for updates unencrypted from http://repo.huaweicloud.com/hce/2.0/updates/RPM-GPG-KEY-HCE-2
Importing GPG key 0xA8DEF926:
 Userid     : "HCE <support@huaweicloud.com>"
 Fingerprint: C1BA 9CD4 9D03 A206 E241 F176 28DA 5B77 A8DE F926
 From       : http://repo.huaweicloud.com/hce/2.0/updates/RPM-GPG-KEY-HCE-2
[root@ecs-hce ~]# which docker
/usr/bin/docker

修改 /etc/docker/daemon.json 配置文件,添加镜像仓库地址

bash 复制代码
[root@ecs-hce ~]# vi /etc/docker/daemon.json
[root@ecs-hce ~]# cat /etc/docker/daemon.json
{
        "registry-mirrors": [
                "https://094f6e8c9700f3060f39c0043d3e15c0.mirror.swr.myhuaweicloud.com"
        ]
}

这里可能根据实际情况做一些其他的配置,比如修改镜像文件存放位置,最好配置到容量可扩展的位置,容器日志文件大小,保留数量、日志驱动等, cgroup驱动程序("systemd"或"cgroupfs")等相关配置

启动 Docker

bash 复制代码
[root@ecs-hce ~]# systemctl enable docker --now
[root@ecs-hce ~]# systemctl restart  docker

确认配置结果

bash 复制代码
[root@ecs-hce ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.0
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Hugetlb Pagesize: 2MB, 1GB, 2MB, 1GB (default is 2MB)
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b552a1e4ad1fd899da8a91965aa23e64d0cb3713
runc version: 310245ac9b55f190f9c49642f524db4b089d5861
init version: N/A (expected: )
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 5.10.0-60.18.0.50.r865_35.hce2.x86_64
Operating System: Huawei Cloud EulerOS 2.0 (x86_64)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.33GiB
Name: ecs-hce
ID: JA2S:67TN:CCT2:BBVQ:RKF2:IAMC:BXM7:LQGS:X7VV:FKQM:NEUA:2KW6
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://094f6e8c9700f3060f39c0043d3e15c0.mirror.swr.myhuaweicloud.com/
Live Restore Enabled: true

制作 HCE-OS 基础镜像

制作 Docker 镜像本地源

创建一个名为/hce-x86-server 的目录,用于安装软件包。

bash 复制代码
[root@ecs-hce ~]# mkdir /hce-x86-server && yum -y --releasever=2.0  --installroot=/hce-x86-server/ install yum net-tools bash-completion iputils vim >> /dev/null
Failed to set locale, defaulting to C.UTF-8

使用 yum 包管理器在指定的安装根目录/hce-x86-server 下安装了一些软件包。具体安装的软件包包括 yum(用于管理软件包)、net-tools(包含一些网络工具)、bash-completion(用于命令自动补全)、iputils(包含一些网络实用工具)和 vim(文本编辑器)

上面的这个命令同时会把制作镜像涉及到的一些元数据下载下来。--installroot 会在指定的目录下生成一个根文件系统roofs--releasever=2.0 用于指定发行版

这里为什么选择 yum net-tools bash-completion iputils vim 这几个工具,因为一个发行版的容器镜像一般包含这几个,包管理器,外壳程序,一些网络测试,文本编辑的实用程序。将以上工具及其依赖安装到一个特定的目录,那么这个目录就可以作为rootfs使用

这里其他的Linux发行版需要根据实际修改命令

拷贝系统环境变量到Docker镜像中

复制/etc/skel/目录下的.bash*文件到/hce-x86-server/root 目录,并清空/hce-x86-server/root/.bash_history 文件

bash 复制代码
[root@ecs-hce ~]# cp /etc/skel/.bash* /hce-x86-server/root && echo " " >/hce-x86-server/root/.bash_history
bash 复制代码
[root@ecs-hce /]# ls
CloudrResetPwdAgent  boot  etc             home  lib64       media  opt   root  sbin  sys  usr
bin                  dev   hce-x86-server  lib   lost+found  mnt    proc  run   srv   tmp  var
[root@ecs-hce /]# cd hce-x86-server/
[root@ecs-hce hce-x86-server]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@ecs-hce hce-x86-server]# cd root/
[root@ecs-hce root]# ls
[root@ecs-hce root]# ls -a
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .viminfo
[root@ecs-hce root]#

进入到镜像文件目录,打包根目录

bash 复制代码
[root@ecs-hce root]# cd /hce-x86-server
[root@ecs-hce hce-x86-server]# tar -zcvpf /root/hce-x86-server.tar --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .

导入镜像包至 Docker

bash 复制代码
[root@ecs-hce hce-x86-server]# docker import /root/hce-x86-server.tar hce/hce-x86-server:202401
sha256:7b8fb730c9f615d167dfa29491cd1f27172d54ae8dc9f1095f46c87970a25ada
[root@ecs-hce hce-x86-server]# docker images|grep hce
hce/hce-x86-server   202401              7b8fb730c9f6        12 seconds ago      518MB

运行镜像测试

bash 复制代码
[root@ecs-hce hce-x86-server]# docker run -itd  hce/hce-x86-server:202401 /bin/bash
ad84d622292583c9280c33b42ee25ef32b41b648478faf963da32a156bae4915
[root@ecs-hce hce-x86-server]# docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS               NAMES
ad84d6222925        hce/hce-x86-server:202401   "/bin/bash"         15 seconds ago      Up 12 seconds                           festive_matsumoto

进入容器执行命令测试

bash 复制代码
[root@ecs-hce hce-x86-server]# docker exec -it ad84d6222925 bash
[root@ad84d6222925 /]# ls
bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  srv  sys  tmp  usr  var
[root@ad84d6222925 /]# exit
[root@ecs-hce hce-x86-server]#

到这里我们就基于当前系统环境创建了一个基础镜像

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知:)


https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1


© 2018-2024 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

相关推荐
Swift社区3 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht3 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht3 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20243 小时前
Swift 数组
开发语言
吾日三省吾码4 小时前
JVM 性能调优
java
stm 学习ing4 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc5 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐5 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi775 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器