Creating Containers

Make sure you have gone through Downloading and Installing VPP on the system you want to create containers on.

After VPP is installed, get root privileges with:

$ sudo bash

Then install packages for containers such as lxc:

# apt-get install bridge-utils lxc

As quoted from the lxc.conf manpage, "container configuration is held in the config stored in the container's directory. A basic configuration is generated at container creation time with the default's recommended for the chosen template as well as extra default keys coming from the default.conf file."

"That default.conf file is either located at /etc/lxc/default.conf or for unprivileged containers at ~/.config/lxc/default.conf."

Since we want to ping between two containers, we'll need to add to this file.

Look at the contents of default.conf, which should initially look like this:

# cat /etc/lxc/default.conf
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx

As you can see, by default there is one veth interface.

Now you will append to this file so that each container you create will have an interface for a Linux bridge and an unconsumed second interface.

You can do this by piping echo output into tee, where each line is separated with a newline character \n as shown below. Alternatively, you can manually add to this file with a text editor such as vi, but make sure you have root privileges.

# echo -e "lxc.net.0.name = veth0\nlxc.net.1.type = veth\nlxc.net.1.name = veth_link1"  | sudo tee -a /etc/lxc/default.conf

Inspect the contents again to verify the file was indeed modified:

# cat /etc/lxc/default.conf
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
lxc.net.0.name = veth0
lxc.net.1.type = veth
lxc.net.1.name = veth_link

After this, we're ready to create the containers.

Creates an Ubuntu Focal container named "cone".

# lxc-create -t download -n cone -- --dist ubuntu --release focal --arch amd64

If successful, you'll get an output similar to this:

You just created an Ubuntu focal amd64 (20231027_07:42) container.

To enable SSH, run: apt install openssh-server
No default root or user password are set by LXC.

Make another container "ctwo".

# lxc-create -t download -n ctwo -- --dist ubuntu --release focal --arch amd64

List your containers to verify they exist:

# lxc-ls
cone ctwo

Start the first container:

# lxc-start --name cone

And verify its running:

# lxc-ls --fancy
NAME STATE   AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
cone RUNNING 0         -      -    -    false
ctwo STOPPED 0         -      -    -    false

Note

Here are some lxc container commands you may find useful:

$ sudo lxc-ls --fancy
$ sudo lxc-start --name u1 --daemon
$ sudo lxc-info --name u1
$ sudo lxc-stop --name u1
$ sudo lxc-destroy --name u1