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