John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 1 | .. _containerCreation: |
| 2 | |
| 3 | .. toctree:: |
| 4 | |
| 5 | Creating Containers |
| 6 | ___________________ |
| 7 | |
| 8 | First you should have root privileges: |
| 9 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 10 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 11 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 12 | ~$ sudo bash |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 13 | |
| 14 | Then install packages for containers such as lxc: |
| 15 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 16 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 17 | |
| 18 | # apt-get install bridge-utils lxc |
| 19 | |
| 20 | As quoted from the `lxc.conf manpage <https://linuxcontainers.org/it/lxc/manpages/man5/lxc.conf.5.html>`_, "container configuration is held in the config stored in the container's directory. |
| 21 | 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." |
| 22 | |
| 23 | "That *default.conf* file is either located at /etc/lxc/default.conf or for unprivileged containers at ~/.config/lxc/default.conf." |
| 24 | |
| 25 | Since we want to ping between two containers, we'll need to **add to this file**. |
| 26 | |
| 27 | Look at the contents of *default.conf*, which should initially look like this: |
| 28 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 29 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 30 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 31 | # cat /etc/lxc/default.conf |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 32 | lxc.network.type = veth |
| 33 | lxc.network.link = lxcbr0 |
| 34 | lxc.network.flags = up |
| 35 | lxc.network.hwaddr = 00:16:3e:xx:xx:xx |
| 36 | |
| 37 | As you can see, by default there is one veth interface. |
| 38 | |
| 39 | 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. |
| 40 | |
| 41 | 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. |
| 42 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 43 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 44 | |
| 45 | # echo -e "lxc.network.name = veth0\nlxc.network.type = veth\nlxc.network.name = veth_link1" | sudo tee -a /etc/lxc/default.conf |
| 46 | |
| 47 | Inspect the contents again to verify the file was indeed modified: |
| 48 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 49 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 50 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 51 | # cat /etc/lxc/default.conf |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 52 | lxc.network.type = veth |
| 53 | lxc.network.link = lxcbr0 |
| 54 | lxc.network.flags = up |
| 55 | lxc.network.hwaddr = 00:16:3e:xx:xx:xx |
| 56 | lxc.network.name = veth0 |
| 57 | lxc.network.type = veth |
| 58 | lxc.network.name = veth_link1 |
| 59 | |
| 60 | |
| 61 | After this, we're ready to create the containers. |
| 62 | |
| 63 | Creates an Ubuntu Xenial container named "cone". |
| 64 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 65 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 66 | |
| 67 | # lxc-create -t download -n cone -- --dist ubuntu --release xenial --arch amd64 --keyserver hkp://p80.pool.sks-keyservers.net:80 |
| 68 | |
| 69 | |
| 70 | If successful, you'll get an output similar to this: |
| 71 | |
| 72 | .. code-block:: console |
| 73 | |
| 74 | You just created an Ubuntu xenial amd64 (20180625_07:42) container. |
| 75 | |
| 76 | To enable SSH, run: apt install openssh-server |
| 77 | No default root or user password are set by LXC. |
| 78 | |
| 79 | |
| 80 | Make another container "ctwo". |
| 81 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 82 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 83 | |
| 84 | # lxc-create -t download -n ctwo -- --dist ubuntu --release xenial --arch amd64 --keyserver hkp://p80.pool.sks-keyservers.net:80 |
| 85 | |
| 86 | |
| 87 | List your containers to verify they exist: |
| 88 | |
| 89 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 90 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 91 | |
| 92 | # lxc-ls |
| 93 | cone ctwo |
| 94 | |
| 95 | |
| 96 | Start the first container: |
| 97 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 98 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 99 | |
| 100 | # lxc-start --name cone |
| 101 | |
| 102 | And verify its running: |
| 103 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 104 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 105 | |
| 106 | # lxc-ls --fancy |
| 107 | NAME STATE AUTOSTART GROUPS IPV4 IPV6 |
| 108 | cone RUNNING 0 - - - |
| 109 | ctwo STOPPED 0 - - - |
| 110 | |
| 111 | |
| 112 | .. note:: |
| 113 | |
| 114 | Here are some `lxc container commands <https://help.ubuntu.com/lts/serverguide/lxc.html.en-GB#lxc-basic-usage>`_ you may find useful: |
| 115 | |
| 116 | |
John DeNisco | a14c166 | 2018-08-01 10:38:23 -0400 | [diff] [blame] | 117 | .. code-block:: shell |
John DeNisco | 06dcd45 | 2018-07-26 12:45:10 -0400 | [diff] [blame] | 118 | |
| 119 | sudo lxc-ls --fancy |
| 120 | sudo lxc-start --name u1 --daemon |
| 121 | sudo lxc-info --name u1 |
| 122 | sudo lxc-stop --name u1 |
| 123 | sudo lxc-destroy --name u1 |