openEuler 云原生实战:使用 Docker Compose 快速部署企业应用

一、openEuler:操作系统的云原生之选

最近在研究云原生技术,正好看到 openEuler 这个操作系统在社区里讨论挺多的。openEuler 是由华为主导的开源操作系统项目,面向企业级服务器、云计算、边缘计算等场景设计。作为开放原子开源基金会的孵化项目,openEuler 已经在金融、电信、能源等多个行业得到广泛应用。

我选择 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.0e2203sp1
  • hostname:显示主机名为 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),说明服务已经正常启动了。

这里踩的坑总结一下:

  1. openEuler 默认仓库的 Docker 版本太老
  2. Docker 官方源需要修改配置才能用
  3. 替换版本号为 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

完美!从截图可以看到:

  1. 使用 curl 从 GitHub 成功下载了 Docker Compose
  2. 下载的文件大小约 73MB,下载速度还不错
  3. 添加执行权限后,验证版本是 v2.40.3

这是目前 Docker Compose 的最新稳定版本,相比 v1.x 版本,v2.x 有很多改进:

  • 性能更好,启动容器更快
  • 支持 GPU 资源管理
  • 更好的依赖处理
  • 完全兼容 v1.x 的配置文件

六、实战:部署 WordPress 博客系统

环境都准备好了,现在开始部署一个真实的应用。我选择了 WordPress,原因有几个:

  1. 经典场景:WordPress 是全球使用最广的博客系统,很有代表性
  2. 多组件:包含 Web 服务和数据库,可以展示容器编排能力
  3. 实用价值:部署完可以直接使用,不是纯粹的 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:数据库容器,状态是 Up
  • wordpress_app:WordPress 容器,状态是 Up,端口映射 0.0.0.0:8080->80/tcp

这里解释一下端口映射:容器内部 WordPress 运行在 80 端口,我们把它映射到主机的 8080 端口。这样从外部访问服务器的 8080 端口,就能访问到容器里的 WordPress 了。

Docker Compose 真的很方便,不用手动创建网络、不用逐个启动容器,一个配置文件 + 一行命令就搞定了。这就是容器编排的魅力。

6.4 访问 WordPress

现在在浏览器里访问:http://<服务器IP>:8080

成功!看到了 WordPress 的安装向导界面。界面是中文的,提示选择语言后就可以开始配置网站了。这说明整套系统已经跑通了:

  1. 服务器的 8080 端口对外开放
  2. 流量正确转发到 WordPress 容器
  3. WordPress 能够连接到 MySQL 数据库
  4. 数据库初始化成功

到这里,一个完整的容器化应用就部署完成了。如果要正式使用,接下来按照向导配置网站标题、管理员账号等信息就可以了。

七、性能监控

应用跑起来了,看看资源占用情况。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 使用体验

优点

  1. 兼容性 * *:和 CentOS 高度兼容,生态工具基本都能用
  2. 性能稳定:容器运行流畅,资源占用合理
  3. 文档完善:官方文档写得很清楚,社区也很活跃
  4. 包管理方便:dnf 用起来和 yum 差不多,上手快

改进空间

  1. 默认仓库的软件版本有点保守,像 Docker 还是 18.09

总的来说,openEuler 作为云原生场景的基础操作系统,完全能满足企业级应用的需求。

八、参考资源

写在最后

这是我第一次在 openEuler 上做云原生实战,整体感受还不错。虽然遇到了一些小问题,但都顺利解决了。容器化确实是未来的方向,值得每个开发者和运维工程师学习掌握。

如果你也想尝试 openEuler,建议从容器化应用开始,门槛不高,但收获很大。有问题可以去官方社区(forum.openEuler.org/)提问,社区响应还是很快的。

希望这篇文章对你有帮助!

相关推荐
Nturmoils1 小时前
openEuler 云原生进阶:K3s 轻量级 Kubernetes 集群实战
服务器·操作系统
一条咸鱼¥¥¥1 小时前
【运维经验】服务器设置磁盘阵列
运维·服务器
hweiyu001 小时前
Linux 命令:fdisk
linux·运维·服务器
步步为营DotNet1 小时前
深入理解IAsyncEnumerable:.NET中的异步迭代利器
服务器·前端·.net
学习中的阿陈1 小时前
pig、sqoop安装
linux·服务器·sqoop
宠..2 小时前
创建文本框控件
linux·运维·服务器·开发语言·qt
win水2 小时前
十,进程控制
linux·服务器·vim·gcc·g++
ZhongruiRao2 小时前
vscode windows免密登录Linux服务器教程 解决设置后仍需要输入密码的问题
linux·服务器·vscode
njxiejing2 小时前
TCP连接详解:三次握手与实战分析(SYN,ACK,seq)
服务器·网络·tcp/ip