在Ubuntu 18.04上用Docker Compose一键部署OAI 5G核心网(v1.4.0镜像版)
在Ubuntu 18.04上快速部署OAI 5G核心网的完整实践指南对于5G技术开发者和学习者而言搭建一个可运行的核心网环境是理解5G架构和协议的重要一步。OpenAirInterfaceOAI作为开源的5G软件实现为研究和开发提供了便利。本文将详细介绍如何在Ubuntu 18.04系统上利用Docker Compose快速部署OAI 5G核心网v1.4.0版本帮助您绕过复杂的配置过程直接进入5G核心网的实践环节。1. 环境准备与优化在开始部署之前我们需要确保系统环境满足基本要求并进行了必要的优化配置。Ubuntu 18.04作为长期支持版本提供了稳定的基础但默认配置可能需要调整以获得更好的性能。1.1 系统更新与基础配置首先执行系统更新确保所有软件包都是最新版本sudo apt update sudo apt upgrade -y接下来安装一些基础工具这些将在后续步骤中发挥作用sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates git python3-pip1.2 Docker环境配置Docker是本次部署的核心组件正确的安装和配置至关重要。以下是经过优化的安装步骤卸载旧版本Docker如已安装sudo apt remove docker docker-engine docker.io containerd runc设置Docker仓库curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable安装Docker引擎sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io验证Docker安装sudo docker run hello-world配置Docker镜像加速针对国内用户sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://your-mirror.mirror.aliyuncs.com] } EOF sudo systemctl daemon-reload sudo systemctl restart docker1.3 Docker Compose安装虽然Ubuntu仓库提供了docker-compose但版本可能较旧。我们推荐通过pip安装最新版本sudo pip3 install --upgrade pip sudo pip3 install docker-compose验证安装docker-compose --version2. OAI核心网镜像获取与准备OAI 5G核心网由多个组件构成每个组件都有对应的Docker镜像。由于镜像体积较大正确的获取方式可以节省大量时间。2.1 镜像拉取策略官方镜像位于Docker Hub但直接拉取可能速度较慢。我们提供几种优化方案直接拉取适合网络条件好的用户docker pull oaisoftwarealliance/oai-amf:v1.4.0 docker pull oaisoftwarealliance/oai-smf:v1.4.0 docker pull oaisoftwarealliance/oai-nrf:v1.4.0 docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.4.0使用镜像加速服务推荐docker pull registry.cn-hangzhou.aliyuncs.com/oai/oai-amf:v1.4.0 docker tag registry.cn-hangzhou.aliyuncs.com/oai/oai-amf:v1.4.0 oai-amf:v1.4.0预先下载的镜像导入docker load oai-amf-v1.4.0.tar2.2 核心网组件镜像列表完整的OAI 5G核心网v1.4.0版本需要以下镜像组件名称官方镜像地址功能描述AMFoaisoftwarealliance/oai-amf:v1.4.0接入和移动性管理功能SMFoaisoftwarealliance/oai-smf:v1.4.0会话管理功能NRFoaisoftwarealliance/oai-nrf:v1.4.0网络功能注册SPGW-U-Tinyoaisoftwarealliance/oai-spgwu-tiny:v1.4.0用户平面功能UDMoaisoftwarealliance/oai-udm:v1.4.0统一数据管理UDRoaisoftwarealliance/oai-udr:v1.4.0统一数据存储AUSFoaisoftwarealliance/oai-ausf:v1.4.0认证服务器功能NSSFoaisoftwarealliance/oai-nssf:v1.4.0网络切片选择功能TRF-GENoaisoftwarealliance/trf-gen-cn5g:latest流量生成工具2.3 代码仓库克隆与准备除了Docker镜像我们还需要获取OAI核心网的配置文件和部署脚本mkdir ~/oai cd ~/oai git clone https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git cd oai-cn5g-fed git checkout -f v1.4.0 ./scripts/syncComponents.sh3. 网络配置与容器编排正确的网络配置是OAI核心网正常运行的关键。本节将指导您完成必要的网络设置和容器编排配置。3.1 Docker网络创建OAI核心网组件需要通过特定的网络进行通信。我们需要创建一个自定义的Docker网络docker network create \ --driverbridge \ --subnet192.168.70.128/26 \ -o com.docker.network.bridge.namedemo-oai \ demo-oai-public-net验证网络创建docker network ls ifconfig demo-oai3.2 系统网络参数调整为了确保网络功能正常需要调整一些系统参数sudo sysctl net.ipv4.conf.all.forwarding1 sudo iptables -P FORWARD ACCEPT为了使这些设置在重启后依然有效可以将其添加到系统配置中echo net.ipv4.conf.all.forwarding1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p3.3 容器编排文件解析OAI核心网使用docker-compose进行编排。主要配置文件为docker-compose-mini-nonrf.yaml其关键部分包括version: 3.8 services: oai-amf: image: oai-amf:v1.4.0 container_name: oai-amf networks: demo-oai-public-net: ipv4_address: 192.168.70.132 environment: - TZEurope/Paris - AMF_INTERFACE_NAME_FOR_NGAPeth0 - AMF_INTERFACE_NAME_FOR_N11eth0 volumes: - ./amf.conf:/opt/oai-amf/etc/amf.conf4. 核心网启动与验证一切准备就绪后我们可以启动OAI 5G核心网并进行基本功能验证。4.1 一键启动脚本使用OAI提供了方便的Python脚本来管理核心网生命周期cd ~/oai/oai-cn5g-fed python3 core-network.py --type start-basic启动后可以使用以下命令检查容器状态docker ps -a预期输出应显示所有核心网组件容器处于运行状态CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES a1b2c3d4e5f6 oai-amf:v1.4.0 /bin/bash /opt/oai-… Up 5 minutes oai-amf ...4.2 组件日志查看与监控各组件日志是排查问题的重要依据查看AMF日志docker logs oai-amf -f查看SMF日志docker logs oai-smf -f4.3 基本功能测试检查网络连通性docker exec -it oai-amf ping 192.168.70.129使用curl测试NRF服务发现curl -X GET http://192.168.70.129:8080/nnrf-nfm/v1/nf-instances模拟UE注册流程需要额外工具docker run --rm -it --network demo-oai-public-net oai-ue:latest ./nr-ue -c ue.conf4.4 常见问题排查以下是部署过程中可能遇到的典型问题及解决方案容器启动失败检查Docker日志journalctl -u docker.service验证镜像完整性docker images网络连接问题确认网桥存在brctl show检查IP分配docker inspect container_id服务注册失败确认NRF运行正常检查各组件配置文件中的NRF地址性能问题增加Docker资源限制考虑使用主机网络模式5. 进阶配置与优化基础部署完成后可以根据需求进行更深入的配置和优化。5.1 配置文件定制每个核心网组件都有对应的配置文件位于oai-cn5g-fed目录下。例如AMF的配置文件amf.conf包含重要参数[AMF] amf_name OAI-AMF ngap_ip_addr 192.168.70.1325.2 数据库持久化配置默认情况下UDM/UDR使用临时存储。可以配置MySQL数据库实现数据持久化services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: linux volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:5.3 性能调优建议调整Docker资源限制docker update --cpus 2 --memory 4g oai-amf使用主机网络模式提升性能但降低隔离性network_mode: host启用Docker构建缓存docker build --build-arg BUILDKIT_INLINE_CACHE1 -t oai-amf:v1.4.0 .5.4 安全加固措施修改默认凭证docker exec -it oai-amf bash -c sed -i s/default_password/strong_password/ /opt/oai-amf/etc/amf.conf限制网络暴露docker network create --internal demo-oai-internal-net启用TLS加密environment: - USE_TLStrue6. 开发与测试环境集成将OAI核心网集成到开发流程中可以更高效地进行5G相关开发工作。6.1 CI/CD管道配置示例以下是一个GitLab CI配置示例用于自动化构建和测试stages: - build - test - deploy build_amf: stage: build script: - docker build -t oai-amf:latest ./amf - docker push registry.example.com/oai-amf:latest test_core: stage: test script: - docker-compose -f docker-compose-test.yml up -d - ./run_tests.sh6.2 单元测试与集成测试OAI提供了一些测试工具和框架运行基础测试套件cd ~/oai/oai-cn5g-fed ./scripts/run_tests.sh basic编写自定义测试用例Python示例import requests def test_nrf_discovery(): response requests.get(http://192.168.70.129:8080/nnrf-nfm/v1/nf-instances) assert response.status_code 200 assert len(response.json()) 06.3 与gNB集成测试完整的5G系统测试需要接入无线部分配置gNB连接参数[AMF] guami [0x01, 0x02, 0x03] plmn_support [00101]启动gNB模拟器docker run --network demo-oai-public-net oai-gnb:latest ./nr-gnb -c gnb.conf验证注册流程docker logs oai-amf -f | grep Registration Request7. 实际应用场景扩展基础部署完成后可以进一步扩展以满足不同场景需求。7.1 多切片配置示例在nssf.conf中配置网络切片[Slice] sst1 sd0x0102037.2 边缘计算集成将UPF部署在边缘节点oai-spgwu-tiny: deploy: placement: constraints: - node.role worker7.3 与第三方应用集成通过NEF网络开放功能暴露能力curl -X POST http://192.168.70.129:8080/nef/v1/api -d {ue_id:imsi-001010000000001}7.4 性能监控与告警配置Prometheus监控monitoring: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml8. 资源清理与维护当不再需要核心网环境时应正确清理资源。8.1 优雅停止核心网使用脚本停止所有服务python3 core-network.py --type stop-mini8.2 日志归档保存重要日志供后续分析mkdir -p logs docker logs oai-amf logs/amf-$(date %Y%m%d).log docker logs oai-smf logs/smf-$(date %Y%m%d).log8.3 容器与镜像清理删除不再使用的容器和镜像docker system prune -f docker volume prune -f8.4 系统还原如果需要完全清除OAI相关配置sudo rm -rf ~/oai docker network rm demo-oai-public-net