blob: dbd18ea40d649ed2b1d629b3ea62bef18ad4a4e1 [file] [log] [blame]
John DeNisco06dcd452018-07-26 12:45:10 -04001.. _containerCreation:
2
3.. toctree::
4
5Creating Containers
6___________________
7
andrewdf50b452018-08-09 13:23:59 -04008Make sure you have gone through :ref:`installingVPP` on the system you want to create containers on.
John DeNisco06dcd452018-07-26 12:45:10 -04009
andrewdf50b452018-08-09 13:23:59 -040010After VPP is installed, get root privileges with:
John DeNisco06dcd452018-07-26 12:45:10 -040011
andrewdf50b452018-08-09 13:23:59 -040012.. code-block:: console
13
14 $ sudo bash
John DeNisco06dcd452018-07-26 12:45:10 -040015
16Then install packages for containers such as lxc:
17
andrewdf50b452018-08-09 13:23:59 -040018.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -040019
20 # apt-get install bridge-utils lxc
21
hsandide75176a2023-10-30 18:47:36 +010022As 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.
John DeNisco06dcd452018-07-26 12:45:10 -040023A 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."
24
25"That *default.conf* file is either located at /etc/lxc/default.conf or for unprivileged containers at ~/.config/lxc/default.conf."
26
27Since we want to ping between two containers, we'll need to **add to this file**.
28
29Look at the contents of *default.conf*, which should initially look like this:
30
andrewdf50b452018-08-09 13:23:59 -040031.. code-block:: console
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +020032
John DeNiscoa14c1662018-08-01 10:38:23 -040033 # cat /etc/lxc/default.conf
hsandide75176a2023-10-30 18:47:36 +010034 lxc.net.0.type = veth
35 lxc.net.0.link = lxcbr0
36 lxc.net.0.flags = up
37 lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
John DeNisco06dcd452018-07-26 12:45:10 -040038
39As you can see, by default there is one veth interface.
40
41Now 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.
42
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +020043You 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.
John DeNisco06dcd452018-07-26 12:45:10 -040044
andrewdf50b452018-08-09 13:23:59 -040045.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -040046
hsandide75176a2023-10-30 18:47:36 +010047 # 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
John DeNisco06dcd452018-07-26 12:45:10 -040048
49Inspect the contents again to verify the file was indeed modified:
50
andrewdf50b452018-08-09 13:23:59 -040051.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -040052
John DeNiscoa14c1662018-08-01 10:38:23 -040053 # cat /etc/lxc/default.conf
hsandide75176a2023-10-30 18:47:36 +010054 lxc.net.0.type = veth
55 lxc.net.0.link = lxcbr0
56 lxc.net.0.flags = up
57 lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
58 lxc.net.0.name = veth0
59 lxc.net.1.type = veth
60 lxc.net.1.name = veth_link
John DeNisco06dcd452018-07-26 12:45:10 -040061
62
63After this, we're ready to create the containers.
64
hsandide75176a2023-10-30 18:47:36 +010065Creates an Ubuntu Focal container named "cone".
John DeNisco06dcd452018-07-26 12:45:10 -040066
andrewdf50b452018-08-09 13:23:59 -040067.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -040068
hsandide75176a2023-10-30 18:47:36 +010069 # lxc-create -t download -n cone -- --dist ubuntu --release focal --arch amd64
John DeNisco06dcd452018-07-26 12:45:10 -040070
71
72If successful, you'll get an output similar to this:
73
74.. code-block:: console
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +020075
hsandide75176a2023-10-30 18:47:36 +010076 You just created an Ubuntu focal amd64 (20231027_07:42) container.
John DeNisco06dcd452018-07-26 12:45:10 -040077
78 To enable SSH, run: apt install openssh-server
79 No default root or user password are set by LXC.
80
81
82Make another container "ctwo".
83
andrewdf50b452018-08-09 13:23:59 -040084.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -040085
hsandide75176a2023-10-30 18:47:36 +010086 # lxc-create -t download -n ctwo -- --dist ubuntu --release focal --arch amd64
John DeNisco06dcd452018-07-26 12:45:10 -040087
88List your containers to verify they exist:
89
90
andrewdf50b452018-08-09 13:23:59 -040091.. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -040092
93 # lxc-ls
94 cone ctwo
95
96
97Start the first container:
98
andrewdf50b452018-08-09 13:23:59 -040099.. code-block:: console
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +0200100
John DeNisco06dcd452018-07-26 12:45:10 -0400101 # lxc-start --name cone
102
103And verify its running:
104
andrewdf50b452018-08-09 13:23:59 -0400105.. code-block:: console
Nathan Skrzypczak9ad39c02021-08-19 11:38:06 +0200106
John DeNisco06dcd452018-07-26 12:45:10 -0400107 # lxc-ls --fancy
hsandide75176a2023-10-30 18:47:36 +0100108 NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
109 cone RUNNING 0 - - - false
110 ctwo STOPPED 0 - - - false
John DeNisco06dcd452018-07-26 12:45:10 -0400111
112
113.. note::
114
115 Here are some `lxc container commands <https://help.ubuntu.com/lts/serverguide/lxc.html.en-GB#lxc-basic-usage>`_ you may find useful:
116
117
andrewdf50b452018-08-09 13:23:59 -0400118 .. code-block:: console
John DeNisco06dcd452018-07-26 12:45:10 -0400119
andrewdf50b452018-08-09 13:23:59 -0400120 $ sudo lxc-ls --fancy
121 $ sudo lxc-start --name u1 --daemon
122 $ sudo lxc-info --name u1
123 $ sudo lxc-stop --name u1
124 $ sudo lxc-destroy --name u1