# Docker role This role will install Docker on a target machine running Debian or Ubuntu. * [Docker role](#docker-role) * [Variable reference](#variable-reference) * [Optional variables](#optional-variables) * [Example](#example) * [Select the Docker version](#select-the-docker-version) * [Select the Docker-compose version](#select-the-docker-compose-version) * [Informations](#informations) * [Important about the network](#important-about-the-network) * [Update of docker-compose](#update-of-docker-compose) ## Variable reference ### Optional variables | Variable | Description | Default value | |------------------------|--------------------------------------------------------------------------------------------|---------------| | docker_compose | install docker-compose | `true` | | docker_user | name of the user who is going to use docker | `root` | | docker_rootless | run the Docker daemon as a non-root user (Rootless mode) | `false` | | docker_pinned | see section [Select the Docker version](#select-the-docker-version) bellow | None | | docker_compose_version | see section [Select the Docker-compose version](#select-the-docker-compose-version) bellow | None | | docker_registry_login | see bellow | None | `docker_registry_login` is used when you need to define an url/username/password to access specific dockers registries. The object is defined like this: ``` docker_registry_login: - url: "docker.talas.dev" username: "user" password: "pass" - url: "something" username: "user" password: "pass" ``` ## Example ### Select the Docker version By default, the latest version of Docker will be installed, but you can specify a version by setting this variable: ``` docker_pinned: "17.09.0~ce-0~debian" # Or only pin the major version docker_pinned: "27*" ``` To find out the list of available versions, use this command on the target server: ``` # apt-cache madison docker-ce docker-ce | 17.09.0~ce-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 17.06.2~ce-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 17.06.1~ce-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 17.06.0~ce-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 17.03.2~ce-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 17.03.1~ce-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 17.03.0~ce-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages ``` ### Select the Docker-compose version By default, this role will install the latest version of docker-compose. You can also select a specific docker-compose version by setting this variable: ``` docker_compose_version: "1.17.1" ``` You can find the list of docker-compose release here: https://github.com/docker/compose/releases/ ## Informations ### Important about the network This role let docker create the docker0 bridge interface. This means that if docker sees a route for all the rfc1918 networks (10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16), it will fail. This basically is the case for the machines in the DMZ: all those routes are defined so that the default gateway can be the BGP router, typically you have such configuration for their DMZ interface: ``` # DMZ6 auto eth136 iface eth136 inet static address 10.12.36.96 netmask 24 dns-nameservers 10.12.1.207 10.12.1.2 dns-search talas.com # static route up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.12.36.254 dev eth136 up route add -net 172.16.0.0 netmask 255.240.0.0 gw 10.12.36.254 dev eth136 up route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.12.36.254 dev eth136 ``` To allow doker to create the docker0 interface, you basically have to remove the last line. Currently we don't use any 192.168.0.0/16 network so it won't be an issue. ### Update of docker-compose To perform an update, add this parameter: `--extra-vars "docker_compose_update_now=true"` , *true* is case-sensitive since it's evaluated as a string in this case. This role will also update if this parameter is present: `--extra-vars "global_update_now=true"` , *true* is also case-sensitive since it's evaluated as a string in this case. The update will be skipped if you already have the latest version of the binary.