开源欧拉(openEuler)下 Docker 部署与使用【华为根技术】
【摘要】 openEuler 作为华为主导的开源操作系统,凭借轻量、高性能、面向鲲鹏架构优化等特性,成为云原生场景的重要选择。Docker 作为容器化核心工具,在 openEuler 中部署和使用需适配系统特性,本文从环境准备、Docker 安装、配置优化到实战使用,全方位讲解 openEuler 下 Docker 的完整使用流程。一、环境准备1. 系统要求操作系统版本:openEuler 20.03...
openEuler 作为华为主导的开源操作系统,凭借轻量、高性能、面向鲲鹏架构优化等特性,成为云原生场景的重要选择。Docker 作为容器化核心工具,在 openEuler 中部署和使用需适配系统特性,本文从环境准备、Docker 安装、配置优化到实战使用,全方位讲解 openEuler 下 Docker 的完整使用流程。
一、环境准备
1. 系统要求
- 操作系统版本:openEuler 20.03 LTS/22.03 LTS/24.03 LTS(推荐 22.03 LTS 及以上,对容器支持更完善)。
- 架构支持:x86_64/ARM64(鲲鹏),本文以 x86_64 为例,ARM64 操作一致。
- 前置条件:系统已配置网络,可访问外网;拥有 root 或 sudo 权限。
2. 系统初始化(可选但推荐)
# 1. 更新系统软件包 dnf update -y # 2. 关闭防火墙(测试环境,生产环境按需配置规则) systemctl stop firewalld && systemctl disable firewalld # 3. 关闭 SELinux(临时生效,重启后需重新设置) setenforce 0 # 永久关闭 SELinux(修改配置文件) sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 4. 关闭 swap(Docker/K8s 推荐,避免内存交换影响性能) swapoff -a sed -i '/swap/s/^/#/' /etc/fstab # 5. 加载容器所需内核模块 modprobe overlay modprobe br_netfilter # 6. 配置内核参数(优化网络,适配容器网络) cat > /etc/sysctl.d/docker.conf << EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 生效内核参数 sysctl --system
二、Docker 安装
openEuler 优先使用 dnf 包管理器(替代 yum),Docker 安装分为「官方源安装」和「离线安装」,推荐官方源安装。
1. 配置 Docker 官方源
# 安装依赖包 dnf install -y yum-utils device-mapper-persistent-data lvm2 # 添加 Docker 官方 yum 源(适配 openEuler 的 CentOS 兼容源) yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 备注:若官方源访问慢,可替换为国内镜像源(如阿里云) # yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. 安装指定版本 Docker
openEuler 对新版 Docker 兼容性良好,推荐安装稳定版(如 24.0.x 系列):
# 查看可安装的 Docker 版本 dnf list docker-ce --showduplicates | sort -r # 安装指定版本(以 24.0.9 为例,适配 openEuler 22.03) dnf install -y docker-ce-24.0.9 docker-ce-cli-24.0.9 containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 docker -v # 预期输出:Docker version 24.0.9, build cb74dfc
3. 启动并设置开机自启
# 启动 Docker 服务 systemctl start docker # 设置开机自启 systemctl enable docker # 检查 Docker 状态 systemctl status docker # 显示 active (running) 即为正常
4. 非 root 用户使用 Docker(可选)
默认仅 root 可操作 Docker,添加普通用户到 docker 组:
# 创建 docker 组(若不存在) groupadd docker # 将当前用户加入 docker 组(替换为你的用户名,如 openeuler) usermod -aG docker openeuler # 重新登录生效(或执行以下命令立即生效) newgrp docker # 验证:非 root 执行 docker 命令 docker ps
三、Docker 核心配置优化
1. 配置镜像加速(解决拉取镜像慢)
openEuler 访问 Docker Hub 速度较慢,配置国内镜像源:
# 创建 Docker 配置目录
mkdir -p /etc/docker
# 写入镜像加速配置
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://dockerproxy.cn",
"https://docker.awsl9527.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
配置项说明:
registry-mirrors:国内镜像加速地址,优先选择稳定的源;exec-opts:设置 cgroup 驱动为 systemd,适配 openEuler 系统初始化进程;log-driver/log-opts:限制容器日志大小,避免磁盘占满;storage-driver:使用 overlay2 存储驱动,性能最优。
2. 重启 Docker 使配置生效
# 重新加载配置 systemctl daemon-reload # 重启 Docker systemctl restart docker # 验证配置 docker info | grep -E "Registry Mirrors|Cgroup Driver|Storage Driver"
四、Docker 基础使用实战
1. 镜像操作(核心)
# 1. 拉取镜像(以 Nginx 为例) docker pull nginx:1.25-alpine # alpine 版本更轻量 # 2. 查看本地镜像 docker images # 3. 搜索镜像 docker search mysql # 4. 标记镜像(用于推送私有仓库) docker tag nginx:1.25-alpine myregistry.com/nginx:1.25-alpine # 5. 删除镜像(需先删除依赖容器) docker rmi nginx:1.25-alpine # 6. 保存镜像为压缩包(离线迁移) docker save -o nginx-1.25.tar nginx:1.25-alpine # 7. 导入离线镜像 docker load -i nginx-1.25.tar
2. 容器操作(核心)
# 1. 启动容器(交互式运行,测试用) docker run -it --rm centos:7 /bin/bash # --rm 退出后删除容器 # 2. 后台启动 Nginx 容器(生产常用) docker run -d \ --name my-nginx \ -p 8080:80 \ # 端口映射:主机8080 → 容器80 -v /data/nginx/html:/usr/share/nginx/html \ # 挂载静态页面目录 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ # 挂载配置文件 --restart=always \ # 容器异常退出自动重启 nginx:1.25-alpine # 3. 查看容器状态 docker ps # 运行中的容器 docker ps -a # 所有容器(包括停止的) # 4. 进入容器内部 docker exec -it my-nginx /bin/sh # alpine 系统用 sh,而非 bash # 5. 查看容器日志 docker logs -f my-nginx # -f 实时跟踪日志 # 6. 停止/启动/重启容器 docker stop my-nginx docker start my-nginx docker restart my-nginx # 7. 删除容器 docker rm my-nginx # 停止状态才能删除 docker rm -f my-nginx # 强制删除运行中的容器 # 8. 查看容器资源占用 docker stats my-nginx
3. 容器网络操作
# 1. 查看网络 docker network ls # 2. 创建自定义网络(桥接模式,容器间互通) docker network create my-network # 3. 启动容器并加入自定义网络 docker run -d --name mysql --network my-network -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0 # 4. 容器间网络互通(同一网络下可通过容器名访问) docker run -it --rm --network my-network busybox ping mysql
4. Docker Compose 编排(多容器管理)
Docker Compose 已随安装包自带,通过 docker compose 命令使用:
# 1. 创建 docker-compose.yml 文件
cat > docker-compose.yml << EOF
version: '3.8'
services:
nginx:
image: nginx:1.25-alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
restart: always
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=testdb
volumes:
- ./mysql-data:/var/lib/mysql
restart: always
networks:
- my-net
networks:
my-net:
EOF
# 2. 启动所有服务
docker compose up -d
# 3. 查看服务状态
docker compose ps
# 4. 停止服务(保留数据)
docker compose stop
# 5. 停止并删除容器(保留卷)
docker compose down
# 6. 停止并删除容器+卷
docker compose down -v
五、openEuler 下 Docker 常见问题排查
1. Docker 启动失败
- 原因:内核模块未加载、selinux 未关闭、cgroup 驱动不兼容。
# 查看启动日志 journalctl -u docker -f # 重新加载 br_netfilter 模块 modprobe br_netfilter sysctl --system # 确认 cgroup 驱动为 systemd docker info | grep Cgroup
2. 拉取镜像超时
- 原因:镜像源不可用、网络不通。
- 解决:更换
daemon.json中的镜像加速地址,或检查系统防火墙 / 代理配置。
3. 容器无权限访问宿主机文件
- 原因:openEuler 安全策略限制、挂载目录权限不足。
# 赋予挂载目录权限 chmod 777 /data/nginx/html # 或指定容器内用户(以 root 运行) docker run -d --name my-nginx -v /data/nginx/html:/usr/share/nginx/html --user root nginx:1.25-alpine
4. ARM64(鲲鹏)架构镜像兼容
- 问题:部分 x86 镜像无法在鲲鹏架构运行。
- 解决:优先拉取
arm64v8前缀的镜像,如arm64v8/nginx:1.25-alpine。
六、总结
- openEuler 下安装 Docker 需先优化系统内核参数、关闭 swap/SELinux,适配容器网络要求;
- 核心配置需重点关注镜像加速和 cgroup 驱动(systemd),提升使用体验和系统兼容性;
- 基础操作与其他 Linux 发行版一致,需注意 openEuler 用
dnf替代yum,鲲鹏架构优先选择 ARM 镜像; - 生产环境建议使用 Docker Compose 编排多容器,结合自定义网络和数据卷保证数据持久化。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)