一、openEuler:操作系统的云原生之选
最近在研究云原生技术,正好看到 openEuler 这个操作系统在社区里讨论挺多的。openEuler 是由华为主导的开源操作系统项目,面向企业级服务器、云计算、边缘计算等场景设计。作为开放原子开源基金会的孵化项目,openEuler 已经在金融、电信、能源等多个行业得到广泛应用。
我选择 openEuler 来做云原生实战,主要是看中了这几点:
- 稳定可靠:企业级内核优化,生产环境可用
- 生态完善:支持主流开发工具和容器技术
- 社区活跃:文档齐全,问题能快速找到解决方案
相关资源:
- openEuler 官网:www.openEuler.org/
- 官方文档:docs.openEuler.openatom.cn/zh/
- 开源社区:gitee.com/openEuler
这次实战我打算在 openEuler 上搭建一套容器化的应用环境,使用 Docker Compose 部署一个完整的 WordPress 博客系统(包含 Web 服务和数据库)。整个过程我会记录每一步操作,分享一些踩过的坑和解决方案。
二、环境准备:选择和配置服务器
2.1 服务器配置
这次实战我准备了一台云服务器,配置如下:
- CPU:16核
- 内存:16GB
- 存储:40GB SSD
- 操作系统:openEuler 22.03 (LTS-SP1)
安装 openEuler 系统
首先需要在云服务器上安装 openEuler 操作系统。在控制台创建服务器时,选择 openEuler 镜像,系统会自动完成安装。

从上图可以看到,我选择的是 openEuler 22.03 (LTS-SP1) 版本进行系统安装。整个安装过程是自动化的,非常方便。LTS-SP1 是长期支持版本的第一个服务包(Service Pack 1),提供了更多的稳定性更新和bug修复,适合生产环境长期使用。
服务器创建过程很简单,配置好规格和网络后,大概等了几分钟系统就安装好了。创建完成后,我用 SSH 密钥登录到服务器,开始后续的配置工作。
查看系统信息
登录服务器后,先确认一下系统是否正确安装:
bash
# 查看系统版本
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 团队的深度优化,对容器技术的支持很完善。系统版本、内核信息、主机名等关键配置都清晰地展示出来了。
2.2 查看硬件配置
接下来确认一下硬件配置是否符合预期。我主要关注 CPU、内存和磁盘这几项:
bash
# 查看 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 内存跑几十个容器都没问题。即使后续要扩展更多服务,资源也完全够用。
三、系统初始化
3.1 更新系统包
服务器刚创建好,系统包可能不是最新的,所以第一步先做一次全量更新。这样可以确保系统的安全性和稳定性,也能避免一些已知的bug。
bash
# 更新系统所有软件包
sudo dnf update -y

更新过程大概花了3-5分钟,系统下载并安装了一些更新包。从截图可以看到更新命令执行完成,提示"Complete!",说明系统已经是最新状态了。
这里说一下 openEuler 使用的包管理器是 dnf,这个是 yum 的下一代工具,速度更快,依赖处理也更智能。如果你之前用过 CentOS 或 Fedora,会感觉很熟悉。
四、Docker 安装:遇到的坑和解决方法
4.1 初次安装(版本太低)
按照惯例,我直接用 dnf 安装 Docker:
sudo dnf install -y docker

安装倒是很顺利,但是查看版本的时候发现了问题:
bash
docker --version
# Docker version 18.09.0, build 9da17b5
Docker 18.09.0 是 2018 年的版本,已经非常老了。这个版本不仅缺少很多新特性,还有一些已知的bug,生产环境不建议使用。我需要的是至少 20.x 以上的版本,最好是最新的 24.x 或 25.x。
于是我决定卸载这个旧版本,改用 Docker 官方的源来安装最新版。
4.2 升级到最新版 Docker
在网上搜索了一下 openEuler 安装 Docker 的方法,找到了一个很有用的解决方案。核心思路是:openEuler 与 CentOS 7 兼容,所以可以使用 Docker 官方的 CentOS 源。
首先停止并卸载旧版本:
arduino
sudo systemctl stop docker
sudo dnf remove -y docker docker-common
然后添加 Docker 官方源:
csharp
# 添加 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 命令批量替换了配置文件中的变量:
bash
# 将 $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,说明修改成功了。
4.3 查看可安装的版本
现在可以看看有哪些 Docker 版本可以安装了:
yum list docker-ce --showduplicates | sort -r | head -20

太好了!可以看到有很多版本可选,从 24.x 到最新的 26.x 都有。我选择安装比较新且稳定的 26.1.4 版本:
bash
# 安装 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),说明服务已经正常启动了。
这里踩的坑总结一下:
- openEuler 默认仓库的 Docker 版本太老
- Docker 官方源需要修改配置才能用
- 替换版本号为 7 是关键操作
4.4 测试 Docker
Docker 安装好了,测试一下是否能正常工作:
sudo docker run hello-world

看到 "Hello from Docker!" 的欢迎信息,说明 Docker 已经可以正常拉取镜像和运行容器了。这个测试镜像很小,主要就是输出一段欢迎文字,确认 Docker 的各个组件(守护进程、客户端、镜像仓库)都能正常工作。
五、Docker Compose 安装
Docker 单独使用没问题了,接下来安装 Docker Compose。这个工具可以用一个配置文件管理多个容器,对于部署多服务应用非常方便。
5.1 遇到的问题
一开始我尝试用 dnf 安装:
sudo dnf install -y docker-compose
安装倒是成功了,但版本是 1.29.2,这是比较老的版本。现在 Docker Compose 已经发展到 v2.x 了,新版本不仅性能更好,功能也更强大。
5.2 安装最新版
于是我决定从 GitHub 下载最新版本。操作很简单:
bash
# 从 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

完美!从截图可以看到:
- 使用 curl 从 GitHub 成功下载了 Docker Compose
- 下载的文件大小约 73MB,下载速度还不错
- 添加执行权限后,验证版本是 v2.40.3
这是目前 Docker Compose 的最新稳定版本,相比 v1.x 版本,v2.x 有很多改进:
- 性能更好,启动容器更快
- 支持 GPU 资源管理
- 更好的依赖处理
- 完全兼容 v1.x 的配置文件
六、实战:部署 WordPress 博客系统
环境都准备好了,现在开始部署一个真实的应用。我选择了 WordPress,原因有几个:
- 经典场景:WordPress 是全球使用最广的博客系统,很有代表性
- 多组件:包含 Web 服务和数据库,可以展示容器编排能力
- 实用价值:部署完可以直接使用,不是纯粹的 Hello World
6.1 创建项目目录
先创建一个项目目录,把相关文件都放在这里。我按照自己的习惯创建了一个层级化的目录结构:
bash
# 创建项目目录(多层级)
mkdir -p acowbo/docker-compose-project/wordpress
# 进入目录
cd acowbo/docker-compose-project/wordpress
# 确认当前路径
pwd

从截图可以看到,项目目录创建好了,当前路径是 /root/acowbo/docker-compose-project/wordpress。这种层级化的目录结构可以更好地组织不同的 Docker Compose 项目。接下来在这个目录里创建 Docker Compose 配置文件。
6.2 编写 docker-compose.yml
Docker Compose 的核心是 docker-compose.yml 配置文件,里面定义了所有的服务、网络、数据卷等。我的配置如下:
yaml
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
配置文件主要定义了两个服务:
- db 服务:MySQL 8.0 数据库,用于存储 WordPress 的数据
- wordpress 服务:WordPress 最新版本,监听 8080 端口
两个服务通过自定义网络 wordpress_net 互联,数据通过数据卷持久化保存。这样即使容器重启或删除,数据也不会丢失。
创建完配置文件后,一行命令就能启动所有服务:
bash
# 启动所有服务(后台运行)
docker-compose up -d
# 查看服务状态
docker-compose ps
6.3 查看容器运行状态

从截图可以看到,两个容器都已经成功启动了:
wordpress_mysql:数据库容器,状态是 Upwordpress_app:WordPress 容器,状态是 Up,端口映射 0.0.0.0:8080->80/tcp
这里解释一下端口映射:容器内部 WordPress 运行在 80 端口,我们把它映射到主机的 8080 端口。这样从外部访问服务器的 8080 端口,就能访问到容器里的 WordPress 了。
Docker Compose 真的很方便,不用手动创建网络、不用逐个启动容器,一个配置文件 + 一行命令就搞定了。这就是容器编排的魅力。
6.4 访问 WordPress
现在在浏览器里访问:http://<服务器IP>:8080

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

从监控数据可以看到:
- wordpress_app:CPU 使用 0.01%,内存 65.62MiB / 15.12GiB(约 0.42%)
- wordpress_mysql:CPU 使用 0.75%,内存 398.7MiB / 15.12GiB(约 2.57%)
整体资源占用非常低,两个容器加起来内存不到 465MB,CPU 使用率不到 1%。这还是在容器刚启动、MySQL 初始化、WordPress 加载的情况下。等系统稳定运行后,占用会更低。
这也印证了容器化的一个优势:资源利用率高。同样的硬件配置,容器化部署可以跑更多的应用。如果用传统虚拟机方式,光是 MySQL 和 Web 服务就要占用几个 GB 的内存了。
八、实战总结
这次在 openEuler 上用 Docker Compose 部署 WordPress 的实战,整体过程还是比较顺利的。虽然中间遇到了 Docker 版本的问题,但通过修改仓库配置也顺利解决了。
8.1 踩过的坑
坑1:Docker 默认版本太老
- 问题:dnf 直接安装的 Docker 是 18.09.0
- 解决:使用 Docker 官方 CentOS 源,修改版本号为 7
- 参考:blog.csdn.net/weixin_4246...
坑2:Docker Compose 版本太老
- 问题:dnf 安装的 Docker Compose 是 1.29.2(v1.x)
- 解决:从 GitHub 下载最新版 v2.40.3
- 方法:使用 curl 从 GitHub releases 下载最新版本
坑3: * 端口 *开放
- 问题:浏览器无法访问 WordPress
- 解决:在云服务器控制台安全组开放 8080 端口
- 提示:如果启用了防火墙,记得用 firewall-cmd 开放端口
8.2 openEuler 使用体验
优点:
- 兼容性 * 好*:和 CentOS 高度兼容,生态工具基本都能用
- 性能稳定:容器运行流畅,资源占用合理
- 文档完善:官方文档写得很清楚,社区也很活跃
- 包管理方便:dnf 用起来和 yum 差不多,上手快
改进空间:
- 默认仓库的软件版本有点保守,像 Docker 还是 18.09
总的来说,openEuler 作为云原生场景的基础操作系统,完全能满足企业级应用的需求。
八、参考资源
- openEuler 官网:www.openEuler.org/
- openEuler 官方文档:docs.openEuler.openatom.cn/zh/
- Docker 官方文档:docs.docker.com/
- Docker Compose 文档:docs.docker.com/compose/
- WordPress 官网:wordpress.org/链接
写在最后:
这是我第一次在 openEuler 上做云原生实战,整体感受还不错。虽然遇到了一些小问题,但都顺利解决了。容器化确实是未来的方向,值得每个开发者和运维工程师学习掌握。
如果你也想尝试 openEuler,建议从容器化应用开始,门槛不高,但收获很大。有问题可以去官方社区(forum.openEuler.org/)提问,社区响应还是很快的。
希望这篇文章对你有帮助!