Enter container *cone*, and check the current network configuration:
-.. code-block:: shell
+.. code-block:: console
root@cone:/# ip -o a
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
Check if the interfaces are down or up:
-.. code-block:: shell
+.. code-block:: console
root@cone:/# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
Make sure your loopback interface is up, and assign an IP and gateway to veth_link1.
-.. code-block:: shell
+.. code-block:: console
root@cone:/# ip link set dev lo up
root@cone:/# ip addr add 172.16.1.2/24 dev veth_link1
Run some commands to verify the changes:
-.. code-block:: shell
+.. code-block:: console
root@cone:/# ip -o a
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
After thats done for *both* containers, exit from the container if you're in one:
-.. code-block:: shell
+.. code-block:: console
root@ctwo:/# exit
exit
In the machine running the containers, run **ip link** to see the host *veth* network interfaces, and their link with their respective *container veth's*.
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN mode DEFAULT group default qlen 1
With VPP in the host machine, show current VPP interfaces:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl show inter
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
Based on the names of the network interfaces discussed previously, which are specific to my systems, we can create VPP host-interfaces:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl create host-interface name vethQL7K0C
root@localhost:~# vppctl create host-interface name veth8NA72P
Verify they have been set up properly:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl show inter
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
Set their state to up:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl set interface state host-vethQL7K0C up
root@localhost:~# vppctl set interface state host-veth8NA72P up
Verify they are now up:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl show inter
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
Add IP addresses for the other end of each veth link:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl set interface ip address host-vethQL7K0C 172.16.1.1/24
root@localhost:~# vppctl set interface ip address host-veth8NA72P 172.16.2.1/24
Verify the addresses are set properly by looking at the L3 table:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl show inter addr
host-vethQL7K0C (up):
Or looking at the FIB by doing:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# vppctl show ip fib
ipv4-VRF:0, fib_index:0, flow hash:[src dst sport dport proto ] locks:[src:plugin-hi:2, src:default-route:1, ]
At long last you probably want to see some pings:
-.. code-block:: shell
+.. code-block:: console
root@localhost:~# lxc-attach -n cone -- ping -c3 172.16.2.2
PING 172.16.2.2 (172.16.2.2) 56(84) bytes of data.
Creating Containers
___________________
-First you should have root privileges:
+Make sure you have gone through :ref:`installingVPP` on the system you want to create containers on.
-.. code-block:: shell
+After VPP is installed, get root privileges with:
- ~$ sudo bash
+.. code-block:: console
+
+ $ sudo bash
Then install packages for containers such as lxc:
-.. code-block:: shell
+.. code-block:: console
# apt-get install bridge-utils lxc
Look at the contents of *default.conf*, which should initially look like this:
-.. code-block:: shell
+.. code-block:: console
# cat /etc/lxc/default.conf
lxc.network.type = veth
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.
-.. code-block:: shell
+.. code-block:: console
# echo -e "lxc.network.name = veth0\nlxc.network.type = veth\nlxc.network.name = veth_link1" | sudo tee -a /etc/lxc/default.conf
Inspect the contents again to verify the file was indeed modified:
-.. code-block:: shell
+.. code-block:: console
# cat /etc/lxc/default.conf
lxc.network.type = veth
Creates an Ubuntu Xenial container named "cone".
-.. code-block:: shell
+.. code-block:: console
# lxc-create -t download -n cone -- --dist ubuntu --release xenial --arch amd64 --keyserver hkp://p80.pool.sks-keyservers.net:80
Make another container "ctwo".
-.. code-block:: shell
+.. code-block:: console
# lxc-create -t download -n ctwo -- --dist ubuntu --release xenial --arch amd64 --keyserver hkp://p80.pool.sks-keyservers.net:80
List your containers to verify they exist:
-.. code-block:: shell
+.. code-block:: console
# lxc-ls
cone ctwo
Start the first container:
-.. code-block:: shell
+.. code-block:: console
# lxc-start --name cone
And verify its running:
-.. code-block:: shell
+.. code-block:: console
# lxc-ls --fancy
NAME STATE AUTOSTART GROUPS IPV4 IPV6
Here are some `lxc container commands <https://help.ubuntu.com/lts/serverguide/lxc.html.en-GB#lxc-basic-usage>`_ you may find useful:
- .. code-block:: shell
+ .. code-block:: console
- 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
+ $ 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