
最近在研究云原生技术,正好看到 openEuler 这个操作系统在社区里讨论挺多的。openEuler 是由华为主导的开源操作系统项目,面向企业级服务器、云计算、边缘计算等场景设计。作为开放原子开源基金会的孵化项目,openEuler 已经在金融、电信、能源等多个行业得到广泛应用。
我选择 openEuler 来做云原生实战,主要是看中了这几点:
相关资源:
这次实战我打算在 openEuler 上搭建一套容器化的应用环境,使用 Docker Compose 部署一个完整的 WordPress 博客系统(包含 Web 服务和数据库)。整个过程我会记录每一步操作,分享一些踩过的坑和解决方案。
这次实战我准备了一台云服务器,配置如下:
首先需要在云服务器上安装 openEuler 操作系统。在控制台创建服务器时,选择 openEuler 镜像,系统会自动完成安装。

从上图可以看到,我选择的是 openEuler 22.03 (LTS-SP1) 版本进行系统安装。整个安装过程是自动化的,非常方便。LTS-SP1 是长期支持版本的第一个服务包(Service Pack 1),提供了更多的稳定性更新和bug修复,适合生产环境长期使用。
服务器创建过程很简单,配置好规格和网络后,大概等了几分钟系统就安装好了。创建完成后,我用 SSH 密钥登录到服务器,开始后续的配置工作。
登录服务器后,先确认一下系统是否正确安装:
# 查看系统版本
cat /etc/os-release
# 查看内核版本
uname -a
从上图可以看到服务器的基本信息。执行了三个命令:
cat /etc/os-release:显示系统版本为 openEuler 22.03 (LTS-SP1)uname -a:显示内核版本为 5.10.0-136.12.0.86.0e2203sp1hostname:显示主机名为 ser563963324474这个版本的内核虽然是 5.10 系列,但经过了 openEuler 团队的深度优化,对容器技术的支持很完善。系统版本、内核信息、主机名等关键配置都清晰地展示出来了。
接下来确认一下硬件配置是否符合预期。我主要关注 CPU、内存和磁盘这几项:
# 查看 CPU 信息
lscpu | grep -E "Architecture|CPU\(s\)|Model name"
# 查看内存信息
free -h
# 查看磁盘信息
df -h
从图中可以确认,服务器是 16核16GB 的配置。CPU 型号是 Intel Xeon Gold 6138 @ 2.00GHz,架构是 x86_64。内存总共 15Gi(约15.6GB),可用内存 14Gi,非常充裕。磁盘方面,根目录挂载了 40GB 的空间,目前使用了 1.6GB,剩余 37GB,空间很充足。
这个配置对于容器化应用来说非常充裕。16核心的 CPU 可以轻松应对高并发请求,16GB 内存跑几十个容器都没问题。即使后续要扩展更多服务,资源也完全够用。
服务器刚创建好,系统包可能不是最新的,所以第一步先做一次全量更新。这样可以确保系统的安全性和稳定性,也能避免一些已知的bug。
# 更新系统所有软件包
sudo dnf update -y
更新过程大概花了3-5分钟,系统下载并安装了一些更新包。从截图可以看到更新命令执行完成,提示"Complete!",说明系统已经是最新状态了。
这里说一下 openEuler 使用的包管理器是 dnf,这个是 yum 的下一代工具,速度更快,依赖处理也更智能。如果你之前用过 CentOS 或 Fedora,会感觉很熟悉。
按照惯例,我直接用 dnf 安装 Docker:
sudo dnf install -y docker

安装倒是很顺利,但是查看版本的时候发现了问题:
docker --version
# Docker version 18.09.0, build 9da17b5Docker 18.09.0 是 2018 年的版本,已经非常老了。这个版本不仅缺少很多新特性,还有一些已知的bug,生产环境不建议使用。我需要的是至少 20.x 以上的版本,最好是最新的 24.x 或 25.x。
于是我决定卸载这个旧版本,改用 Docker 官方的源来安装最新版。
在网上搜索了一下 openEuler 安装 Docker 的方法,找到了一个很有用的解决方案。核心思路是:openEuler 与 CentOS 7 兼容,所以可以使用 Docker 官方的 CentOS 源。
首先停止并卸载旧版本:
sudo systemctl stop docker
sudo dnf remove -y docker docker-common然后添加 Docker 官方源:
# 添加 Docker CE 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo这里会遇到一个问题:openEuler 的版本号(比如 22.03LTS_SP1)Docker 官方源里没有对应的目录。解决办法是修改仓库配置文件,把版本号替换成 CentOS 7。

这里也可以用 sed 命令批量替换了配置文件中的变量:
# 将 $releasever 替换为 7
sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo替换完成后,验证一下修改是否生效:
cat /etc/yum.repos.d/docker-ce.repo | grep baseurl

从截图可以看到,baseurl 已经变成了 https://download.docker.com/linux/centos/7/x86_64/stable,说明修改成功了。
现在可以看看有哪些 Docker 版本可以安装了:
yum list docker-ce --showduplicates | sort -r | head -20

太好了!可以看到有很多版本可选,从 24.x 到最新的 26.x 都有。我选择安装比较新且稳定的 26.1.4 版本:
# 安装 Docker CE 最新版
sudo yum -y install docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 查看版本
docker --version
完美!Docker 已经升级到 26.1.4 版本了,这是一个比较新且稳定的版本。同时可以看到 Docker 服务状态是 active (running),说明服务已经正常启动了。
这里踩的坑总结一下:
Docker 安装好了,测试一下是否能正常工作:
sudo docker run hello-world

看到 "Hello from Docker!" 的欢迎信息,说明 Docker 已经可以正常拉取镜像和运行容器了。这个测试镜像很小,主要就是输出一段欢迎文字,确认 Docker 的各个组件(守护进程、客户端、镜像仓库)都能正常工作。
Docker 单独使用没问题了,接下来安装 Docker Compose。这个工具可以用一个配置文件管理多个容器,对于部署多服务应用非常方便。
一开始我尝试用 dnf 安装:
sudo dnf install -y docker-compose
安装倒是成功了,但版本是 1.29.2,这是比较老的版本。现在 Docker Compose 已经发展到 v2.x 了,新版本不仅性能更好,功能也更强大。
于是我决定从 GitHub 下载最新版本。操作很简单:
# 从 GitHub 下载最新版 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证版本
docker-compose --version
完美!从截图可以看到:
这是目前 Docker Compose 的最新稳定版本,相比 v1.x 版本,v2.x 有很多改进:
环境都准备好了,现在开始部署一个真实的应用。我选择了 WordPress,原因有几个:
先创建一个项目目录,把相关文件都放在这里。我按照自己的习惯创建了一个层级化的目录结构:
# 创建项目目录(多层级)
mkdir -p acowbo/docker-compose-project/wordpress
# 进入目录
cd acowbo/docker-compose-project/wordpress
# 确认当前路径
pwd
从截图可以看到,项目目录创建好了,当前路径是 /root/acowbo/docker-compose-project/wordpress。这种层级化的目录结构可以更好地组织不同的 Docker Compose 项目。接下来在这个目录里创建 Docker Compose 配置文件。
Docker Compose 的核心是 docker-compose.yml 配置文件,里面定义了所有的服务、网络、数据卷等。我的配置如下:
version: '3.8'
services:
# MySQL 数据库
db:
image: mysql:8.0
container_name: wordpress_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123123
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: 12313
volumes:
- db_data:/var/lib/mysql
networks:
- wordpress_net
# WordPress 应用
wordpress:
image: wordpress:latest
container_name: wordpress_app
restart: always
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: 12313
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
networks:
- wordpress_net
volumes:
db_data:
wordpress_data:
networks:
wordpress_net:
driver: bridge配置文件主要定义了两个服务:
两个服务通过自定义网络 wordpress_net 互联,数据通过数据卷持久化保存。这样即使容器重启或删除,数据也不会丢失。
创建完配置文件后,一行命令就能启动所有服务:
# 启动所有服务(后台运行)
docker-compose up -d
# 查看服务状态
docker-compose ps
从截图可以看到,两个容器都已经成功启动了:
wordpress_mysql:数据库容器,状态是 Upwordpress_app:WordPress 容器,状态是 Up,端口映射 0.0.0.0:8080->80/tcp这里解释一下端口映射:容器内部 WordPress 运行在 80 端口,我们把它映射到主机的 8080 端口。这样从外部访问服务器的 8080 端口,就能访问到容器里的 WordPress 了。
Docker Compose 真的很方便,不用手动创建网络、不用逐个启动容器,一个配置文件 + 一行命令就搞定了。这就是容器编排的魅力。
现在在浏览器里访问:http://<服务器IP>:8080

成功!看到了 WordPress 的安装向导界面。界面是中文的,提示选择语言后就可以开始配置网站了。这说明整套系统已经跑通了:
到这里,一个完整的容器化应用就部署完成了。如果要正式使用,接下来按照向导配置网站标题、管理员账号等信息就可以了。
应用跑起来了,看看资源占用情况。Docker 自带了 stats 命令可以实时监控容器资源:
docker stats --no-stream

从监控数据可以看到:
整体资源占用非常低,两个容器加起来内存不到 465MB,CPU 使用率不到 1%。这还是在容器刚启动、MySQL 初始化、WordPress 加载的情况下。等系统稳定运行后,占用会更低。
这也印证了容器化的一个优势:资源利用率高。同样的硬件配置,容器化部署可以跑更多的应用。如果用传统虚拟机方式,光是 MySQL 和 Web 服务就要占用几个 GB 的内存了。
这次在 openEuler 上用 Docker Compose 部署 WordPress 的实战,整体过程还是比较顺利的。虽然中间遇到了 Docker 版本的问题,但通过修改仓库配置也顺利解决了。
坑1:Docker 默认版本太老
坑2:Docker Compose 版本太老
坑3:**端口**开放
优点:
改进空间:
总的来说,openEuler 作为云原生场景的基础操作系统,完全能满足企业级应用的需求。
写在最后:
这是我第一次在 openEuler 上做云原生实战,整体感受还不错。虽然遇到了一些小问题,但都顺利解决了。容器化确实是未来的方向,值得每个开发者和运维工程师学习掌握。
如果你也想尝试 openEuler,建议从容器化应用开始,门槛不高,但收获很大。有问题可以去官方社区(https://forum.openEuler.org/)提问,社区响应还是很快的。
希望这篇文章对你有帮助!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。