写在前面
- 博文内容为在华为云开发者认证实验中看到,整理分享
- Demo 以
华为云欧拉操作系统(Huawei Cloud EulerOS)
为例,当然也适用于其他的 Linux 发行版系统构建基础镜像 - 理解不足小伙伴帮忙指正
不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树
为什么需要基于当前操作系统构建基础镜像?
在日常生产中,我们可能下面一些诉求,比如企业上云
,之前是通过华为云欧拉系统ECS
直接部署的,但是后来要求容器化
,那么考虑兼容性和稳定性
,需要把当前 ECS
的环境做成基础镜像,供容器化使用,基于 HCE OS(Huawei Cloud EulerOS)
构建 HCE OS(Huawei Cloud EulerOS)
基础镜像可以确保与华为云平台的兼容性和稳定性。这意味着镜像可以更好地集成和运行在华为云环境中,确保系统的可靠性和性能。
同时华为云欧拉操作系统是华为云平台的一种操作系统,它可能专门针对特定的云环境和应用场景进行了定制。通过基于 HCE OS 构建 HCE OS 基础镜像,可以满足特定的业务需求和定制化要求。
容器安全性方面考虑,华为云欧拉操作系统通常会提供一些安全增强功能和机制,以确保在云环境中的数据和应用的安全性。基于 HCE OS 构建 HCE OS 基础镜像可以继承这些安全特性,以提供更高的安全级别
生态系统支持,华为云平台通常会提供一整套生态系统工具和服务,如监控、自动化部署、弹性伸缩等。基于 HCE OS 构建 HCE OS 基础镜像可以更好地集成这些工具和服务,以提供更完整的云解决方案。
实验环境
代码语言:javascript复制[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容器通过主机的网络接口与外部网络通信
,并通过桥接接口互相通信。
[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
代码语言:javascript复制[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
配置文件,添加镜像仓库地址
[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
代码语言:javascript复制[root@ecs-hce ~]# systemctl enable docker --now
[root@ecs-hce ~]# systemctl restart docker
确认配置结果
代码语言:javascript复制[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
的目录,用于安装软件包。
[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
使用
[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
这里其他的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
代码语言:javascript复制[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]#
进入到镜像文件目录,打包根目录
代码语言:javascript复制[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
代码语言:javascript复制[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
运行镜像测试
代码语言:javascript复制[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
进入容器执行命令测试
代码语言:javascript复制[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)