Building a Kamailio Docker image
In this tutorial we will go over how to create a Dockerfile for Kamailio and build our own Kamailio image. If you want to learn more about Dockerfile’s you can read through our other post on creating a Dockerfile.
Setup Dockerfile
- First thing we need to do is create a new directory for our Dockerfile.
mkdir docker_kamailio
- We then need to make our Dockerfile.
touch docker_kamailio/Dockerfile
- Next, open up the Dockerfile with your favorite editor so we can start building.
vim docker_kamailio/Dockerfile
Installing Kamailio
- We will be installing Kamailio on a CentOS 6 container. First thing we need to do is specify what docker image we want to start with. Add the following to your Dockerfile.
FROM centos:6
- Next, we need to add the Kamailio 4.4 Open Build Service repository to our yum.repos.d list.
RUN yum -y install wget
RUN wget -O /etc/yum.repos.d/home:kamailio:v4.4.x-rpms.repo http://download.opensuse.org/repositories/home:/kamailio:/v4.4.x-rpms/CentOS_6/home:kamailio:v4.4.x-rpms.repo
RUN yum -y update
- Now that the Kamailio 4.4 repository is added to our system, it is time to install the kamailio packages. For simplicity of running the whole Kamailio stack on one container, we will be using SQLite as our back end database.
RUN yum install -y kamailio kamailio-debuginfo kamailio-utils gdb kamailio-sqlite
Setting up kamctlrc
We need to configure kamctlrc to use SQLite and to not prompt us during the database creation.
- Set the
DBENGINE
,DBHOST
, andDB_PATH
.
WORKDIR /etc/kamailio/
RUN echo "DBENGINE=SQLITE" >> kamctlrc
RUN echo "DBHOST=localhost" >> kamctlrc
RUN echo "DB_PATH="/usr/local/etc/kamailio/kamailio.sqlite"" >> kamctlrc
- Next, we ne need to specify the following options so that
kamdbctl
won’t prompt us during the database creation.
RUN echo "INSTALL_EXTRA_TABLES=no" >> kamctlrc
RUN echo "INSTALL_PRESENCE_TABLES=no" >> kamctlrc
RUN echo "INSTALL_DBUID_TABLES=no" >> kamctlrc
Creating Back End Database
- SQLite requires a file it can write the database to. We need to make a directory and file, which was already specified in the
DB_PATH
variable added to thekamctlrc
file.
RUN mkdir /usr/local/etc/kamailio
RUN touch /usr/local/etc/kamailio/kamailio.sqlite
- If all the settings in
kamctlrc
are correct, and/usr/local/etc/kamailio/kamailio.sqlite
exists, we should be able to create the Kamailio Database without any prompts interrupting our automated build.
RUN /usr/sbin/kamdbctl create
Running Kamailio
- Add the following
kamctl
command to create a user for testing.
RUN kamctl add 1000@dopensource.com opensourceisneat
- Next, we need to specify which ports to expose. Because Kamailio does not handle media, we only need to open up port 5060 for SIP.
EXPOSE 5060/udp
- Finally, we need to specify what command to run when the container is started up
CMD["/usr/sbin/kamailio", "-m 64", "-M 8", "-D"]
Finished Dockerfile
Now that we have a finished Dockerfile, you can exit out of your editor, saving any changes. The file should look something like this.
FROM centos:6
RUN yum -y install wget
RUN wget -O /etc/yum.repos.d/home:kamailio:v4.4.x-rpms.repo http://download.opensuse.org/repositories/home:/kamailio:/v4.4.x-rpms/CentOS_6/home:kamailio:v4.4.x-rpms.repo
RUN yum -y update
RUN yum install -y kamailio kamailio-debuginfo kamailio-utils gdb kamailio-sqlite
WORKDIR /etc/kamailio/
RUN echo "DBENGINE=SQLITE" >> kamctlrc
RUN echo "DBHOST=localhost" >> kamctlrc
RUN echo "DB_PATH="/usr/local/etc/kamailio/kamailio.sqlite"" >> kamctlrc
RUN echo "INSTALL_EXTRA_TABLES=no" >> kamctlrc
RUN echo "INSTALL_PRESENCE_TABLES=no" >> kamctlrc
RUN echo "INSTALL_DBUID_TABLES=no" >> kamctlrc
RUN mkdir /usr/local/etc/kamailio
RUN touch /usr/local/etc/kamailio/kamailio.sqlite
RUN /usr/sbin/kamdbctl create
RUN kamctl add 1000@dopensource.com opensourceisneat
EXPOSE 5060/udp
CMD ["/usr/sbin/kamailio", "-m 64", "-M 8", "-D"]
Building and running the new image
- Build the image using the
docker build
command. This will build an image calleddopensource/kamailio4.4
.
cd docker_kamailio
docker build -t dopensource/kamailio4.4 .
- Run a Kamailio container to test out our new image. Remember to map the SIP port to your docker host.
docker run -dit -p 5060:5060/udp dopensource/kamailio4.4
- You should now be able to register a softphone to your new Kamailio instance. Because we mapped 5060 to 5060 on the Docker host, you will be using your Docker host’s ip address for registration.
User ID: 1000
Domain:
Password: opensourceisneat