基于华为云欧拉操作系统(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)

相关推荐
一点媛艺41 分钟前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风1 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生2 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功2 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2342 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨2 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程2 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk3 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*3 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue3 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang