Como instalar Docker y Docker compose

Instalar Docker no es complicado, pero añadir docker compose puede ser un poco rebuscado dependiendo de como te lo montes, en este post te voy a enseñar como yo lo instalo, hay otras formas de hacerlo, pero para mí esta es la más cómoda.

Fecha: 24th Aug 2022 Autor: Aleix Soler

Índice

Instalación de Docker

Hay 3 métodos diferentes para instalar Docker, nosotros lo haremos utilizando el repositorio.
Al final los pasos que te escribo en esta sección son el resumen de la guía oficial, así que tu mismo, sigue mis pasos o los de la guía oficial para instalar Docker.

Primero de todo abre el terminal en caso de que estés usando un sistema operativo con GUI, y sigue los siguientes pasos con orden:

  1. Borrar las dependencias anteriores en caso de que tengas, para empezar limpios y sin problemas:
    sudo apt-get remove docker docker-engine docker.io containerd runc
  2. Instalar las herramientas para permitir la conexión del repositorio de forma segura HTTPS:
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg lsb-release
  3. Añadir la clave GPG oficial:
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  4. Establecer el repositorio estable:
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. Instalar el engine de Docker:
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
Listo, en este momento ya tienes Docker instalado.

Permitir a los usuarios sin privilegio usar comandos de Docker

Por defecto no podemos usar comandos de Docker sin ser root, para activar el rootles mode sigue los siguientes pasos:

  1. Crear un nuevo grupo nombrado docker:
    sudo groupadd docker
  2. Añadir nuestro usuario a el grupo docker creado en el punto anterior:
    sudo usermod -aG docker $USER
  3. Iniciar sesión en el grupo docker:
    newgrp docker
  4. Si con el punto anterior no se ha activado el rootles mode cerrar la sesión del sistema y volver a entrar.

Testear la instalación de Docker

La forma más simple de testear si nuestra instalación de Docker ha sido satisfactoria es ejecutar una imagen, y para ello que mejor que la imagen de hello-world.

Abre la terminal y ejecuta:
sudo docker run hello-world
Este comando descargará la imagen de hello-world (si no la tienes ya instalada) y se ejecutará.

Si te sale en el terminal el mensaje subrayado, significa que todo está correcto:

        Unable to find image 'hello-world:latest' locally
        latest: Pulling from library/hello-world
        93288797bd35: Pull complete
        Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
        Status: Downloaded newer image for hello-world:latest

        Hello from Docker!
        This message shows that your installation appears to be working correctly.
        To generate this message, Docker took the following steps:
         1. The Docker client contacted the Docker daemon.
         2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
            (arm64v8)
         3. The Docker daemon created a new container from that image which runs the
            executable that produces the output you are currently reading.
         4. The Docker daemon streamed that output to the Docker client, which sent it
            to your terminal.

        To try something more ambitious, you can run an Ubuntu container with:
         $ docker run -it ubuntu bash

        Share images, automate workflows, and more with a free Docker ID:
         https://hub.docker.com/

        For more examples and ideas, visit:
         https://docs.docker.com/get-started/

    

Instalación de docker-compose

De la misma manera que Docker, existen varios métodos diferentes para instalar docker-compose, para ver más formas de instalarlo ve a la guía oficial.

Para usar docker-compose hay un requisito, tener instalado el docker engine, si no lo tienes instalado, mírate la sección de Instalación de docker.
Si quieres usarlo con usuarios non-root tendrás que permitir a los usuarios sin privilegios correr comandos de Docker.

Instalación en arquitectura soportada

Sigue los puntos paso a paso:

  1. Descargar la versión estable actual de Docker compose:
    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. Damos permisos de ejecución al binario descargado en el punto anterior:
    chmod +x /usr/local/bin/docker-compose

Test Docker compose(arquitectura soportada)

Muy simple, vamos a pedir la versión instalada
docker-compose --version
Si todo está correcto la respuesta debería ser algo parecido a:

docker-compose version 1.27.4, build unknown

Instalación en arquitectura NO soportada

En este caso tendremos que instalar docker-compose utilizando pip
Sigue los puntos paso a paso:

  1. Instalar python3 y pip:
    sudo apt-get install libffi-dev libssl-dev
    sudo apt install python3-dev
    sudo apt-get install -y python3 python3-pip
  2. Instalar docker-compose:
    sudo pip3 install docker-compose
  3. Permitir que el sistema inicie los contendores al abrir el servidor. (Los contenedores que estén configurados para inicial como tal):
    sudo systemctl enable docker

Test Docker compose(arquitectura NO soportada)

Para testear vamos a crear un fichero .yml que vamos a usar para ejecutar usando docker-compose y verificar que todo funciona.

Crea un fichero con el nombre y extension docker-compose.yml y como contenido añade:

    version: '2'
    services:
        hello_world:
            image: ubuntu
            command: [/bin/echo, 'Hello world']
    
Ahora en la terminal ejecuta docker-compose up tienes que asegurarte que estás en la misma carpeta donde has creado el fichero.
Como resultado te debería salir algo parecido a esto, pero para verificar que todo está correcto debería salirte lo que te he subrayado:
        Creating network "descargas_default" with the default driver
        Pulling hello_world (ubuntu:)...
        latest: Pulling from library/ubuntu
        d19f32bd9e41: Pull complete
        Digest: sha256:34fea4f31bf187bc915536831fd0afc9d214755bf700b5cdb1336c82516d154e
        Status: Downloaded newer image for ubuntu:latest
        Creating descargas_hello_world_1 ... done
        Attaching to descargas_hello_world_1
        hello_world_1  | Hello world
        descargas_hello_world_1 exited with code 0

    

Si te sale un error como este al ejecutar docker-compose up:
    ERROR: yaml.scanner.ScannerError: while scanning for the next token
    found character '\t' that cannot start any token
    in "./docker-compose.yml", line 3, column 1
    
Quiere decir que en el contenido del ficher docker-compose.yml has usado el tabulador para separar las secciones, modifícalo de tabulador a espacios y te va a funcionar.
El tabulador no está permitido para las especificaciones de YAML