Primeres passes a docker

Si has llegit algun dels meus posts o has remenat una mica en la informàtica, segurament t’hauràs trobat amb un programa anomenat Docker. En aquest post explicarem què és, quins usos té i algunes comandes bàsiques per poder trastejar una mica amb ell.

Docker és un programa de codi obert que permet executar programes dins de contenidors.

Aquests contenidors són com petites màquines virtuals, però més reduïdes i eficients, ja que en comptes de tenir un sistema operatiu sencer, comparteixen el nucli del sistema del host. Contenen també totes les biblioteques i dependències necessàries per poder executar l’aplicació.

Això proporciona una sèrie d’avantatges com:

  • Eficiència: Com hem comentat anteriorment, al compartir el nucli amb el sistema operatiu requereix molts menys recursos.

  • Portabilitat: Al tenir el programa amb les seves dependències, es pot desplegar en qualsevol entorn, ja que tot el necessari es troba dins el contenidor.

  • Escalabilitat: Es poden desplegar varies instàncies de manera ràpida i senzilla, facilitant molt la escalabilitat.

  • Aïllament: Els contenidors estan completament aïllats entre si i del sistema operatiu host, donant una capa de seguretat.

L’ús de Docker va des d’entorns de desenvolupament - gràcies a la seva portabilitat - a servidors, on es poden desplegar els serveis aïllats entre si.

Un exemple de comanda docker seria la següent:

docker

docker run -dp 3000:3000 \
     --network todo-app \
     -v /ruta/host:/ruta/docker
     -e MYSQL_HOST=mysql \
     -e MYSQL_USER=root \
     -e MYSQL_PASSWORD=secret \
     -e MYSQL_DB=todos \
     getting-started:v2

On:

  • run És la comanda per executar el contenidor.

  • -dp: Aquest paràmetre són dos junts: -d executa el contenidor en segon pla i -p és el port que exposa l’equip, seguit del port del contenidor al que es vol dirigir.

  • –network: Crea una xarxa on podrem afegir més contenidors perquè puguin comunicar-se entre ells.

  • -v: Directori del sistema que muntarem al contenidor. Això permet connectar un directori de la màquina host amb un dins el contenidor, fent les dades persistents independentment de si eliminem el contenidor.

  • -e: Aquest paràmetre és per afegir variables específiques d’entorn del contenidor, en aquest cas, variables de MYSQL.

Docker compose és una eina de Docker per desplegar contenidors amb un fitxer de text .yaml. Això facilita el desplegament i la configuració de contenidors. És útil per orquestrar diversos contenidors automàticament.

Com a exemple d’arxiu docker-compose.yaml, utilitzarem el de watchtower (un servei per actualitzar els contenidors automàticament):

docker

services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_INCLUDE_RESTARTING=true
      - WATCHTOWER_INCLUDE_STOPPED=true
      - WATCHTOWER_REVIVE_STOPPED=false
      - WATCHTOWER_NO_RESTART=false
      - WATCHTOWER_TIMEOUT=30s
      - WATCHTOWER_SCHEDULE=0 0 4 * * *
      - WATCHTOWER_DEBUG=false
      - TZ=Europe/Madrid
    network_mode: bridge

Alguns dels més importants són:

  • services: Sota aquest apartat afegirem tots els serveis.

  • image: Aquí posarem la font i la imatge que volem per al contenidor.

  • volumes: Aquí van els directoris que volem muntar al contenidor.

  • environment: En aquest apartat corresponen les variables d’entorn específiques del contenidor.

  • ports: Els ports del contenidor que volem exposar (si és el cas).

Un cop tenim l’arxiu creat, per desplegar els contenidors fem:

bash

docker compose up -d

I s’iniciaran tots els contenidors dins l’arxiu. (Si no tenim les imatges, primer les descarregarà).

Per descarregar una imatge, farem:

bash

$ docker pull NomImatge

Per veure les imatges que tenim descarregades, farem:

bash

$ docker images

I per eliminar-ne una:

bash

$ docker rmi ImageID

Per iniciar un contenidor, amb docker farem:

bash

$ docker run CONTENIDOR PARÀMETRES

I amb docker compose, per iniciar contenidors dins un arxiu (com explicat abans), ens situarem al directori on es trobi l’arxiu .yaml i farem:

bash

$ docker compose up -d

Per veure els contenidors actius:

bash

$ docker ps

Per arrencar un contenidor aturat:

bash

$ docker start IDContenidor

Per aturar un contenidor:

bash

$ docker stop IDContenidor

Per reiniciar un contenidor:

bash

$ docker restart IDContenidor

Per executar comandes en un contenidor

bash

$ docker exec paràmetres IDContenidor
# Si per exemple fem -it IDContenidor bash, executarem una bash interactiva dins el contenidor.

Per eliminar un contenidor:

bash

$ docker rm IDContenidor

Per veure els logs en temps real:

bash

$ docker logs -f IDContenidor

I fins aquí el post d’avui. Espero que t’hagi estat d’interés. Si t’ha estat útil o tens algun dubte, pots deixar un comentari i compartir-lo. Ens veiem al següent!