calee0219 / free5gc-docker-compose

docker-compose of free5gc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

free5gc-docker-compose

docker-compose of free5gc

What's this?

Free5GC

The free5GC is an open-source project for 5th generation (5G) mobile core network. Currently, the major contributors are with National Chiao Tung University (NCTU). Although the ultimate goal of this project is to implement 3GPP Release 15 (R15) and Release 16 (R16) 5G core network (5GC), in current version we only implement three most important components in 5GC, namely Access and Mobility Management Function (AMF), Session Management Function (SMF) and User Plane Function (UPF). Thus, current version is mainly for the enhance Mobile Broadband (eMBB). Other features such as Ultra-Reliable Low Latency Connection (URLLC) and Massive Internet of Things (MIoT) are not supported yet.

The source code of free5GC can be downloaded from here.

Install free5GC manually

Reference: https://www.free5gc.org/installation

free5GC-docker-compose

free5GC-docker-compose is an free5gc all-in-one implement in docker-compose. It's for easier test and develop the project.

How to use it

Install docker.

Ubuntu

Reference: https://docs.docker.com/install/linux/docker-ce/ubuntu/

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

CentOS

Reference: https://docs.docker.com/install/linux/docker-ce/centos/

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

$ sudo yum install docker-ce docker-ce-cli containerd.io

$ sudo systemctl start docker
$ sudo systemctl enable docker

Install docker-compose

Reference: https://docs.docker.com/v17.09/compose/install/

$ sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Run Up

Because we need to create tunnel interface, we need to use privileged container with root permission.

$ git clone https://github.com/calee0219/free5gc-docker-compose.git
$ cd free5gc-docker-compose
$ git submodule init && git submodule update
$ docker-compose build
$ sudo docker-compose up # Recommand use with tmux to run in frontground
$ sudo docker-compose up -d # Run in backbround if need

After you run up your compose, attach into docker and start your test or develop

$ docker exec -it free5gc bash
# cd free5gc
# ./test/testngc -f install/etc/free5gc/test/free5gc.testngc.conf

Project map

We use submodule to get source code and mount into container. For this instence, it's easy to develop the source code outside container and test it in container.

When running docker compose, it won't build the project automatically. So don't forget build it up manually. After you change the source code, please rebuild the project before run testing as well.

We used the coommand sleep infinity to make free5gc container keep running. It's not a good way. If you have any idea about, please post an issue or PR for me.

Troubleshooting

Sometimes, you need to drop data from DB(See #Troubleshooting from https://www.free5gc.org/installation).

$ docker exec -it mongodb mongo
> use free5gc
> db.subscribers.drop()
> exit # (Or Ctrl-D)

Another way to drop DB data is just remove db data. Outside your container, run:

$ rm -rf ./mongodb

Reference

About

docker-compose of free5gc

License:MIT License


Languages

Language:Dockerfile 53.1%Language:Shell 46.9%