github.com/ncdc/docker@v0.10.1-0.20160129113957-6c6729ef5b74/docs/installation/linux/ubuntulinux.md (about) 1 <!--[metadata]> 2 +++ 3 aliases = [ "/engine/installation/ubuntulinux/"] 4 title = "Installation on Ubuntu " 5 description = "Instructions for installing Docker on Ubuntu. " 6 keywords = ["Docker, Docker documentation, requirements, apt, installation, ubuntu"] 7 [menu.main] 8 parent = "engine_linux" 9 weight = -6 10 +++ 11 <![end-metadata]--> 12 13 # Ubuntu 14 15 Docker is supported on these Ubuntu operating systems: 16 17 - Ubuntu Wily 15.10 18 - Ubuntu Trusty 14.04 (LTS) 19 - Ubuntu Precise 12.04 (LTS) 20 21 This page instructs you to install using Docker-managed release packages and 22 installation mechanisms. Using these packages ensures you get the latest release 23 of Docker. If you wish to install using Ubuntu-managed packages, consult your 24 Ubuntu documentation. 25 26 >**Note**: Ubuntu Utopic 14.10 and 15.04 exist in Docker's `APT` repository but 27 > are no longer officially supported. 28 29 ## Prerequisites 30 31 Docker requires a 64-bit installation regardless of your Ubuntu version. 32 Additionally, your kernel must be 3.10 at minimum. The latest 3.10 minor version 33 or a newer maintained version are also acceptable. 34 35 Kernels older than 3.10 lack some of the features required to run Docker 36 containers. These older versions are known to have bugs which cause data loss 37 and frequently panic under certain conditions. 38 39 To check your current kernel version, open a terminal and use `uname -r` to 40 display your kernel version: 41 42 $ uname -r 43 3.11.0-15-generic 44 45 >**Note**: If you previously installed Docker using `APT`, make sure you update 46 your `APT` sources to the new Docker repository. 47 48 ### Update your apt sources 49 50 Docker's `APT` repository contains Docker 1.7.1 and higher. To set `APT` to use 51 packages from the new repository: 52 53 1. Log into your machine as a user with `sudo` or `root` privileges. 54 55 2. Open a terminal window. 56 57 3. Update package information, ensure that APT works with the `https` method, and that CA certificates are installed. 58 59 $ sudo apt-get update 60 $ sudo apt-get install apt-transport-https ca-certificates 61 62 4. Add the new `GPG` key. 63 64 $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 65 66 5. Open the `/etc/apt/sources.list.d/docker.list` file in your favorite editor. 67 68 If the file doesn't exist, create it. 69 70 6. Remove any existing entries. 71 72 7. Add an entry for your Ubuntu operating system. 73 74 The possible entries are: 75 76 - On Ubuntu Precise 12.04 (LTS) 77 78 deb https://apt.dockerproject.org/repo ubuntu-precise main 79 80 - On Ubuntu Trusty 14.04 (LTS) 81 82 deb https://apt.dockerproject.org/repo ubuntu-trusty main 83 84 - Ubuntu Wily 15.10 85 86 deb https://apt.dockerproject.org/repo ubuntu-wily main 87 88 > **Note**: Docker does not provide packages for all architectures. To install docker on 89 > a multi-architecture system, add an `[arch=...]` clause to the entry. Refer to the 90 > [Debian Multiarch wiki](https://wiki.debian.org/Multiarch/HOWTO#Setting_up_apt_sources) 91 > for details. 92 93 8. Save and close the `/etc/apt/sources.list.d/docker.list` file. 94 95 9. Update the `APT` package index. 96 97 $ sudo apt-get update 98 99 10. Purge the old repo if it exists. 100 101 $ sudo apt-get purge lxc-docker 102 103 11. Verify that `APT` is pulling from the right repository. 104 105 $ apt-cache policy docker-engine 106 107 From now on when you run `apt-get upgrade`, `APT` pulls from the new repository. 108 109 ### Prerequisites by Ubuntu Version 110 111 - Ubuntu Wily 15.10 112 - Ubuntu Vivid 15.04 113 - Ubuntu Trusty 14.04 (LTS) 114 115 For Ubuntu Trusty, Vivid, and Wily, it's recommended to install the 116 `linux-image-extra` kernel package. The `linux-image-extra` package 117 allows you use the `aufs` storage driver. 118 119 To install the `linux-image-extra` package for your kernel version: 120 121 1. Open a terminal on your Ubuntu host. 122 123 2. Update your package manager. 124 125 $ sudo apt-get update 126 127 3. Install the recommended package. 128 129 $ sudo apt-get install linux-image-extra-$(uname -r) 130 131 4. Go ahead and install Docker. 132 133 If you are installing on Ubuntu 14.04 or 12.04, `apparmor` is required. You can install it using: `apt-get install apparmor` 134 135 #### Ubuntu Precise 12.04 (LTS) 136 137 For Ubuntu Precise, Docker requires the 3.13 kernel version. If your kernel 138 version is older than 3.13, you must upgrade it. Refer to this table to see 139 which packages are required for your environment: 140 141 <style type="text/css"> .tg {border-collapse:collapse;border-spacing:0;} .tg 142 td{font-size:14px;padding:10px 143 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;} 144 .tg-031{width:275px;font-family:monospace} </style> <table class="tg"> <tr> <td 145 class="tg-031">linux-image-generic-lts-trusty</td> <td class="tg-031e">Generic 146 Linux kernel image. This kernel has AUFS built in. This is required to run 147 Docker.</td> </tr> <tr> <td class="tg-031">linux-headers-generic-lts-trusty</td> 148 <td class="tg-031e">Allows packages such as ZFS and VirtualBox guest additions 149 which depend on them. If you didn't install the headers for your existing 150 kernel, then you can skip these headers for the"trusty" kernel. If you're 151 unsure, you should include this package for safety.</td> </tr> <tr> <td 152 class="tg-031">xserver-xorg-lts-trusty</td> <td class="tg-031e" 153 rowspan="2">Optional in non-graphical environments without Unity/Xorg. 154 <b>Required</b> when running Docker on machine with a graphical environment. 155 <br> 156 <br>To learn more about the reasons for these packages, read the installation 157 instructions for backported kernels, specifically the <a 158 href="https://wiki.ubuntu.com/Kernel/LTSEnablementStack" target="_blank">LTS 159 Enablement Stack</a> — refer to note 5 under each version. 160 </td> </tr> 161 <tr> <td class="tg-031">libgl1-mesa-glx-lts-trusty</td> </tr> </table> 162 163 To upgrade your kernel and install the additional packages, do the following: 164 165 1. Open a terminal on your Ubuntu host. 166 167 2. Update your package manager. 168 169 $ sudo apt-get update 170 171 3. Install both the required and optional packages. 172 173 $ sudo apt-get install linux-image-generic-lts-trusty 174 175 Depending on your environment, you may install more as described in the preceding table. 176 177 4. Reboot your host. 178 179 $ sudo reboot 180 181 5. After your system reboots, go ahead and install Docker. 182 183 ## Install 184 185 Make sure you have installed the prerequisites for your Ubuntu version. 186 187 Then, 188 install Docker using the following: 189 190 1. Log into your Ubuntu installation as a user with `sudo` privileges. 191 192 2. Update your `APT` package index. 193 194 $ sudo apt-get update 195 196 3. Install Docker. 197 198 $ sudo apt-get install docker-engine 199 200 4. Start the `docker` daemon. 201 202 $ sudo service docker start 203 204 5. Verify `docker` is installed correctly. 205 206 $ sudo docker run hello-world 207 208 This command downloads a test image and runs it in a container. When the 209 container runs, it prints an informational message. Then, it exits. 210 211 ## Optional configurations 212 213 This section contains optional procedures for configuring your Ubuntu to work 214 better with Docker. 215 216 * [Create a docker group](#create-a-docker-group) 217 * [Adjust memory and swap accounting](#adjust-memory-and-swap-accounting) 218 * [Enable UFW forwarding](#enable-ufw-forwarding) 219 * [Configure a DNS server for use by Docker](#configure-a-dns-server-for-use-by-docker) 220 * [Configure Docker to start on boot](#configure-docker-to-start-on-boot) 221 222 ### Create a Docker group 223 224 The `docker` daemon binds to a Unix socket instead of a TCP port. By default 225 that Unix socket is owned by the user `root` and other users can access it with 226 `sudo`. For this reason, `docker` daemon always runs as the `root` user. 227 228 To avoid having to use `sudo` when you use the `docker` command, create a Unix 229 group called `docker` and add users to it. When the `docker` daemon starts, it 230 makes the ownership of the Unix socket read/writable by the `docker` group. 231 232 >**Warning**: The `docker` group is equivalent to the `root` user; For details 233 >on how this impacts security in your system, see [*Docker Daemon Attack 234 >Surface*](../../security/security.md#docker-daemon-attack-surface) for details. 235 236 To create the `docker` group and add your user: 237 238 1. Log into Ubuntu as a user with `sudo` privileges. 239 240 This procedure assumes you log in as the `ubuntu` user. 241 242 3. Create the `docker` group and add your user. 243 244 $ sudo usermod -aG docker ubuntu 245 246 3. Log out and log back in. 247 248 This ensures your user is running with the correct permissions. 249 250 4. Verify your work by running `docker` without `sudo`. 251 252 $ docker run hello-world 253 254 If this fails with a message similar to this: 255 256 Cannot connect to the Docker daemon. Is 'docker daemon' running on this host? 257 258 Check that the `DOCKER_HOST` environment variable is not set for your shell. 259 If it is, unset it. 260 261 ### Adjust memory and swap accounting 262 263 When users run Docker, they may see these messages when working with an image: 264 265 WARNING: Your kernel does not support cgroup swap limit. WARNING: Your 266 kernel does not support swap limit capabilities. Limitation discarded. 267 268 To prevent these messages, enable memory and swap accounting on your 269 system. Enabling memory and swap accounting does induce both a memory 270 overhead and a performance degradation even when Docker is not in 271 use. The memory overhead is about 1% of the total available 272 memory. The performance degradation is roughly 10%. 273 274 To enable memory and swap on system using GNU GRUB (GNU GRand Unified 275 Bootloader), do the following: 276 277 1. Log into Ubuntu as a user with `sudo` privileges. 278 279 2. Edit the `/etc/default/grub` file. 280 281 3. Set the `GRUB_CMDLINE_LINUX` value as follows: 282 283 GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" 284 285 4. Save and close the file. 286 287 5. Update GRUB. 288 289 $ sudo update-grub 290 291 6. Reboot your system. 292 293 294 ### Enable UFW forwarding 295 296 If you use [UFW (Uncomplicated Firewall)](https://help.ubuntu.com/community/UFW) 297 on the same host as you run Docker, you'll need to do additional configuration. 298 Docker uses a bridge to manage container networking. By default, UFW drops all 299 forwarding traffic. As a result, for Docker to run when UFW is 300 enabled, you must set UFW's forwarding policy appropriately. 301 302 Also, UFW's default set of rules denies all incoming traffic. If you want to 303 reach your containers from another host allow incoming connections on the Docker 304 port. The Docker port defaults to `2376` if TLS is enabled or `2375` when it is 305 not. If TLS is not enabled, communication is unencrypted. By default, Docker 306 runs without TLS enabled. 307 308 To configure UFW and allow incoming connections on the Docker port: 309 310 1. Log into Ubuntu as a user with `sudo` privileges. 311 312 2. Verify that UFW is installed and enabled. 313 314 $ sudo ufw status 315 316 3. Open the `/etc/default/ufw` file for editing. 317 318 $ sudo nano /etc/default/ufw 319 320 4. Set the `DEFAULT_FORWARD_POLICY` policy to: 321 322 DEFAULT_FORWARD_POLICY="ACCEPT" 323 324 5. Save and close the file. 325 326 6. Reload UFW to use the new setting. 327 328 $ sudo ufw reload 329 330 7. Allow incoming connections on the Docker port. 331 332 $ sudo ufw allow 2375/tcp 333 334 ### Configure a DNS server for use by Docker 335 336 Systems that run Ubuntu or an Ubuntu derivative on the desktop typically use 337 `127.0.0.1` as the default `nameserver` in `/etc/resolv.conf` file. The 338 NetworkManager also sets up `dnsmasq` to use the real DNS servers of the 339 connection and sets up `nameserver 127.0.0.1` in /`etc/resolv.conf`. 340 341 When starting containers on desktop machines with these configurations, Docker 342 users see this warning: 343 344 WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers 345 can't use it. Using default external servers : [8.8.8.8 8.8.4.4] 346 347 The warning occurs because Docker containers can't use the local DNS nameserver. 348 Instead, Docker defaults to using an external nameserver. 349 350 To avoid this warning, you can specify a DNS server for use by Docker 351 containers. Or, you can disable `dnsmasq` in NetworkManager. Though, disabling 352 `dnsmasq` might make DNS resolution slower on some networks. 353 354 The instructions below describe how to configure the Docker daemon 355 running on Ubuntu 14.10 or below. Ubuntu 15.04 and above use `systemd` 356 as the boot and service manager. Refer to [control and configure Docker 357 with systemd](../../admin/systemd.md#custom-docker-daemon-options) to 358 configure a daemon controlled by `systemd`. 359 360 To specify a DNS server for use by Docker: 361 362 1. Log into Ubuntu as a user with `sudo` privileges. 363 364 2. Open the `/etc/default/docker` file for editing. 365 366 $ sudo nano /etc/default/docker 367 368 3. Add a setting for Docker. 369 370 DOCKER_OPTS="--dns 8.8.8.8" 371 372 Replace `8.8.8.8` with a local DNS server such as `192.168.1.1`. You can also 373 specify multiple DNS servers. Separated them with spaces, for example: 374 375 --dns 8.8.8.8 --dns 192.168.1.1 376 377 >**Warning**: If you're doing this on a laptop which connects to various 378 >networks, make sure to choose a public DNS server. 379 380 4. Save and close the file. 381 382 5. Restart the Docker daemon. 383 384 $ sudo restart docker 385 386 387 388 389 390 **Or, as an alternative to the previous procedure,** disable `dnsmasq` in 391 NetworkManager (this might slow your network). 392 393 1. Open the `/etc/NetworkManager/NetworkManager.conf` file for editing. 394 395 $ sudo nano /etc/NetworkManager/NetworkManager.conf 396 397 2. Comment out the `dns=dnsmasq` line: 398 399 dns=dnsmasq 400 401 3. Save and close the file. 402 403 4. Restart both the NetworkManager and Docker. 404 405 $ sudo restart network-manager 406 $ sudo restart docker 407 408 ### Configure Docker to start on boot 409 410 Ubuntu uses `systemd` as its boot and service manager `15.04` onwards and `upstart` 411 for versions `14.10` and below. 412 413 For `15.04` and up, to configure the `docker` daemon to start on boot, run 414 415 $ sudo systemctl enable docker 416 417 For `14.10` and below the above installation method automatically configures `upstart` 418 to start the docker daemon on boot 419 420 ## Upgrade Docker 421 422 To install the latest version of Docker with `apt-get`: 423 424 $ apt-get upgrade docker-engine 425 426 ## Uninstallation 427 428 To uninstall the Docker package: 429 430 $ sudo apt-get purge docker-engine 431 432 To uninstall the Docker package and dependencies that are no longer needed: 433 434 $ sudo apt-get autoremove --purge docker-engine 435 436 The above commands will not remove images, containers, volumes, or user created 437 configuration files on your host. If you wish to delete all images, containers, 438 and volumes run the following command: 439 440 $ rm -rf /var/lib/docker 441 442 You must delete the user created configuration files manually.