写在前面


  • 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理
  • 认证地址:https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1
  • 当然也适用于其他的 Linux 系统构建基础镜像
  • 理解不足小伙伴帮忙指正

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


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

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

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

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

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

实验环境

[root@ecs-hce ~]# hostnamectl  Static hostname: ecs-hce Icon name: computer-vm Chassis: vmMachine ID: 91874445890c4df3958af4e0072eb5ff Boot ID: a6e3464ca4c646d9bfaceb94baa3a3cdVirtualization: kvmOperating System: Huawei Cloud EulerOS 2.0 (x86_64)Kernel: Linux 5.10.0-60.18.0.50.r865_35.hce2.x86_64Architecture: x86-64 Hardware Vendor: OpenStack FoundationHardware Model: OpenStack Nova[root@ecs-hce ~]# 

安装 Docker

添加桥接网卡

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

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

[root@ecs-hce ~]# ip link add name docker0 type bridge

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

[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

[root@ecs-hce ~]# dnf -y install docker >> /dev/nullFailed to set locale, defaulting to C.UTF-8retrieving repo key for updates unencrypted from http://repo.huaweicloud.com/hce/2.0/updates/RPM-GPG-KEY-HCE-2Importing GPG key 0xA8DEF926: Userid : "HCE " 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 配置文件,添加镜像仓库地址

[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

[root@ecs-hce ~]# systemctl enable docker --now[root@ecs-hce ~]# systemctl restartdocker

确认配置结果

[root@ecs-hce ~]# docker infoContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 0Server Version: 18.09.0Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsHugetlb 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 syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: b552a1e4ad1fd899da8a91965aa23e64d0cb3713runc version: 310245ac9b55f190f9c49642f524db4b089d5861init version: N/A (expected: )Security Options: apparmor seccompProfile: defaultKernel Version: 5.10.0-60.18.0.50.r865_35.hce2.x86_64Operating System: Huawei Cloud EulerOS 2.0 (x86_64)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 3.33GiBName: ecs-hceID: JA2S:67TN:CCT2:BBVQ:RKF2:IAMC:BXM7:LQGS:X7VV:FKQM:NEUA:2KW6Docker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries: 127.0.0.0/8Registry Mirrors: https://094f6e8c9700f3060f39c0043d3e15c0.mirror.swr.myhuaweicloud.com/Live Restore Enabled: true

制作 HCE-OS 基础镜像

制作 Docker 镜像本地源

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

[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/nullFailed 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 文件

[root@ecs-hce ~]# cp /etc/skel/.bash* /hce-x86-server/root && echo " " >/hce-x86-server/root/.bash_history
[root@ecs-hce /]# lsCloudrResetPwdAgentbootetc homelib64 mediaopt rootsbinsysusrbindev hce-x86-serverlib lost+foundmntprocrun srv tmpvar[root@ecs-hce /]# cd hce-x86-server/[root@ecs-hce hce-x86-server]# lsbinbootdevetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar[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]#

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

[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

[root@ecs-hce hce-x86-server]# docker import /root/hce-x86-server.tar hce/hce-x86-server:202401sha256:7b8fb730c9f615d167dfa29491cd1f27172d54ae8dc9f1095f46c87970a25ada[root@ecs-hce hce-x86-server]# docker images|grep hcehce/hce-x86-server 2024017b8fb730c9f612 seconds ago518MB

运行镜像测试

[root@ecs-hce hce-x86-server]# docker run -itdhce/hce-x86-server:202401 /bin/bashad84d622292583c9280c33b42ee25ef32b41b648478faf963da32a156bae4915[root@ecs-hce hce-x86-server]# docker psCONTAINER IDIMAGE COMMAND CREATED STATUSPORTS NAMESad84d6222925hce/hce-x86-server:202401 "/bin/bash" 15 seconds agoUp 12 seconds festive_matsumoto

进入容器执行命令测试

[root@ecs-hce hce-x86-server]# docker exec -it ad84d6222925 bash[root@ad84d6222925 /]# lsbindevetchomeliblib64mediamntoptprocrootsbinsrvsystmpusrvar[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)