aboutsummaryrefslogtreecommitdiffstats
path: root/docs/usecases/containers/containerCreation.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/usecases/containers/containerCreation.rst')
-rw-r--r--docs/usecases/containers/containerCreation.rst124
1 files changed, 124 insertions, 0 deletions
diff --git a/docs/usecases/containers/containerCreation.rst b/docs/usecases/containers/containerCreation.rst
new file mode 100644
index 00000000000..dbd18ea40d6
--- /dev/null
+++ b/docs/usecases/containers/containerCreation.rst
@@ -0,0 +1,124 @@
+.. _containerCreation:
+
+.. toctree::
+
+Creating Containers
+___________________
+
+Make sure you have gone through :ref:`installingVPP` on the system you want to create containers on.
+
+After VPP is installed, get root privileges with:
+
+.. code-block:: console
+
+ $ sudo bash
+
+Then install packages for containers such as lxc:
+
+.. code-block:: console
+
+ # apt-get install bridge-utils lxc
+
+As quoted from the `lxc.conf manpage <https://linuxcontainers.org/lxc/manpages/man5/lxc.conf.5.html>`_, "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:
+
+.. code-block:: console
+
+ # 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.
+
+.. code-block:: console
+
+ # 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:
+
+.. code-block:: console
+
+ # 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".
+
+.. code-block:: console
+
+ # lxc-create -t download -n cone -- --dist ubuntu --release focal --arch amd64
+
+
+If successful, you'll get an output similar to this:
+
+.. code-block:: console
+
+ 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".
+
+.. code-block:: console
+
+ # lxc-create -t download -n ctwo -- --dist ubuntu --release focal --arch amd64
+
+List your containers to verify they exist:
+
+
+.. code-block:: console
+
+ # lxc-ls
+ cone ctwo
+
+
+Start the first container:
+
+.. code-block:: console
+
+ # lxc-start --name cone
+
+And verify its running:
+
+.. code-block:: console
+
+ # 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 <https://help.ubuntu.com/lts/serverguide/lxc.html.en-GB#lxc-basic-usage>`_ you may find useful:
+
+
+ .. 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