Primeros pasos con Docker

    En una Raspberry PI, instalaremos Docker

    apt update
    
    apt list --upgradable
    apt upgrade -y
    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    

    El proceso de instalación iniciará donde veremos:

    # Executing docker install script, commit: 6d9743e9656cc56f699a64800b098d5ea5a60020
    + sh -c apt-get update -qq >/dev/null
    + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
    + sh -c install -m 0755 -d /etc/apt/keyrings
    + sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" -o /etc/apt/keyrings/docker.asc
    + sh -c chmod a+r /etc/apt/keyrings/docker.asc
    + sh -c echo "deb [arch=armhf signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/raspbian buster stable" > /etc/apt/sources.list.d/docker.list
    + sh -c apt-get update -qq >/dev/null
    + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null
    + sh -c docker version
    Client: Docker Engine - Community
     Version:           26.1.3
     API version:       1.45
     Go version:        go1.21.10
     Git commit:        b72abbb
     Built:             Thu May 16 08:33:14 2024
     OS/Arch:           linux/arm
     Context:           default
    
    Server: Docker Engine - Community
     Engine:
      Version:          26.1.3
      API version:      1.45 (minimum version 1.24)
      Go version:       go1.21.10
      Git commit:       8e96db1
      Built:            Thu May 16 08:33:14 2024
      OS/Arch:          linux/arm
      Experimental:     false
     containerd:
      Version:          1.6.31
      GitCommit:        e377cd56a71523140ca6ae87e30244719194a521
     runc:
      Version:          1.1.12
      GitCommit:        v1.1.12-0-g51d5e94
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    

    Para finalizar, habilitaremos el servicio:

    usermod -aG docker pi
    systemctl enable docker
    systemctl start docker
    

    Ya lo tenemos instalado y podremos ver la versión e información relativa al mismo (vistas anteriormente)

    docker version
    docker info
    

    Ahora instalaremos Docker Compose para la personalización de los despliegues

    apt install -y libffi-dev libssl-dev python3-dev python3 python3-pip
    
    mkdir -p ~/.docker/cli-plugins/
    
    curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-armv6 -o ~/.docker/cli-plugins/docker-compose
    
    chmod +x ~/.docker/cli-plugins/docker-compose
    
    

    y validaremos la versión instalada

    Comandos básicos que nos pueden servir de interés:

    Realizar un registro a https://hub.docker.com para ver nuestros contenedores y realizar un login:

    Ahora, vamos a levantar un contenedor. Vamos a buscar una imagen del propio sistema:

    root@node01:/etc/apt/sources.list.d# docker search raspbian --filter stars=10
    NAME                      DESCRIPTION                                     STARS     OFFICIAL
    raspbian/stretch          Maintained, Usable, Minimal, Cross-compilabl…   64
    raspbian/jessie           Maintained, Usable, Minimal, Cross-compilabl…   21
    raspbian/desktop                                                          10
    navikey/raspbian-buster   Minimal image based on Raspbian Stretch Lite…   14
    

    Para tener un sistema Raspbian lo mas parecido al que ahora mismo tengo, usaremos la versión para Buster
    Lo ejecutamos del siguiente modo:

    docker run -it navikey/raspbian-buster  bash
    

    Lo descargará… y ya tenemos acceso al equipo via bash

    Es importante tener en cuenta que cualquier cambio (modificación) no se grabará en la imagen arrancada.
    Por ejemplo, si queremos actualizar la imagen e instalar algún producto para que sea persistente crearemos un fichero que contenga:

    FROM navikey/raspbian-buster
    MAINTAINER .
    ENV HOME /root
    RUN apt-get update
    RUN apt-get install net-tools

    root@node01:~# docker build -t raspiban .
    [+] Building 200.3s (7/7) FINISHED
     => [internal] load build definition from Dockerfile
     => => transferring dockerfile: 143B
     => [internal] load metadata for docker.io/navikey/raspbian-buster:latest
     => [internal] load .dockerignore
     => => transferring context: 2B
     => [1/3] FROM docker.io/navikey/raspbian-buster:latest
     => [2/3] RUN apt-get update
     => [3/3] RUN apt-get install net-tools
     => exporting to image
     => => exporting layers
     => => writing image sha256:0f9c33831b22470252ce13cd6991e544ba2a5362900d39e321f4bbc908ebf11c
     => => naming to docker.io/library/raspbian
    

    Lo arrancamos y validamos que efectivamente nos ha actualizado el sistema y ha instalado el paquete “net-tools” en una nueva imagen

    root@node01:~# docker run -it raspbianbash
    root@e8f29dd9def4:/# apt-cache policy net-tools
    net-tools:
      Installed: 1.60+git20180626.aebd88e-1
      Candidate: 1.60+git20180626.aebd88e-1
      Version table:
     *** 1.60+git20180626.aebd88e-1 500
            500 http://archive.raspbian.org/raspbian buster/main armhf Packages
            100 /var/lib/dpkg/status
    

    Ahora que tenemos la imagen actualizada, podemos eliminar la antigua. Basta con localizar su IMAGE ID y forzar su eliminación:

    root@node01:~# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    raspbian     latest    0f9c33831b22   3 hours ago   259MB
    navikey/raspbian-buster   latest    945ee0c40ad4   24 months ago   203MB
    

    root@node01:~# docker rmi -f 945ee0c40ad4
    Untagged: navikey/raspbian-buster:latest
    Untagged: navikey/raspbian-buster@sha256:e966cdb354444f1eb9fbb333df56bd63cc18b965254818173a1ec3cba63a2e81
    Deleted: sha256:945ee0c40ad4cd0ba72a78a3e57222614be57fddff88ccc262df1edc3b3799e6
    

    Ahora salimos presionando la sequencia Ctrl+p y Ctrl+q. Esto hace que salgamos del contenedor, pero no lo para. Si escribimos “exit”, saldriamos del contenedor.

    Para volver a conectar, localizaremos el CONTAINER ID:

    root@node01:~# docker ps
    CONTAINER ID   IMAGE      COMMAND   CREATED         STATUS         PORTS     NAMES
    79686fdb706b   raspbian   "bash"    2 minutes ago   Up 2 minutes             vibrant_haibt
    

    y volveremos a estar dentro:

    root@node01:~# docker attach 79686fdb706b
    root@79686fdb706b:/#
    

    Eliminamos todos los contenedores y arrancamos un contenedor nuevo para que localmente escuche por el 444 y dentro del contenedor el 443:

    root@node01:~# docker container prune -f
    root@node01:~# docker run -d -i -t --name apache -h apache -p 444:443 -v /var/www/html_docker:/var/www/html raspiban /bin/bash
    

    Importante el tener creado el directorio local y que veremos dentro del contenedor de forma persistente

    mkdir -p /var/www/html_docker
    chown www-data:www-data /var/www/html_docker
    

    En este punto, instalaremos apache ya estando dentro del contenedor y configuraremos una página estática.

    root@apache:/# apt-get install apache2 -y
    root@apache:/# a2enmod ssl
    root@apache:/# apt-get install php  -y
    root@apache:/# echo '<?php echo gethostname() . " connected"; ?>' > /var/www/html/node.php
    root@apache:/# service apache2 restart
    

    Lo probamos accediendo a http://10.0.1.71:444/ y ya accederemos al nodo:

    Leave a Reply

    Your email address will not be published. Required fields are marked *