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/)提问,社区响应还是很快的。

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

相关推荐
碎梦归途2 小时前
思科网络设备配置命令大全,涵盖从交换机到路由器的核心配置命令
linux·运维·服务器·网络·网络协议·路由器·交换机
七维大脑虚拟机2 小时前
飞牛NAS公网IPv6+DDNS远程访问零延迟教程
运维·服务器·网络
小天源3 小时前
nginx在centos7上热升级步骤
linux·服务器·nginx
宴之敖者、5 小时前
Linux——\r,\n和缓冲区
linux·运维·服务器
LuDvei5 小时前
LINUX错误提示函数
linux·运维·服务器
未来可期LJ5 小时前
【Linux 系统】进程间的通信方式
linux·服务器
心理之旅5 小时前
高校文献检索系统
运维·服务器·容器
Lenyiin5 小时前
Linux 基础IO
java·linux·服务器
The Chosen One9855 小时前
【Linux】深入理解Linux进程(一):PCB结构、Fork创建与状态切换详解
linux·运维·服务器
2501_927773077 小时前
uboot挂载
linux·运维·服务器