1 de marzo de 2025

Docker: comandos básicos

Gestión de Imágenes:

  • docker pull <nombre_de_la_imagen>[:<etiqueta>]:
    • Descarga una imagen desde un registro (como Docker Hub).
    • Ejemplo: docker pull ubuntu:latest
  • docker images:
    • Lista todas las imágenes de Docker almacenadas localmente.
  • docker rmi <ID_de_la_imagen>:
    • Elimina una imagen de Docker.
    • Precaución: esta acción no se puede deshacer.

Gestión de Contenedores:

  • docker run [opciones] <nombre_de_la_imagen>[:<etiqueta>] [comando]:
    • Crea e inicia un contenedor a partir de una imagen.
    • Opciones clave:
      • docker run -d: Ejecuta el contenedor en modo "detached" (en segundo plano).
      • docker run -p <puerto_del_host>:<puerto_del_contenedor>: Asigna puertos entre el host y el contenedor.
      • docker run -v <ruta_del_host>:<ruta_del_contenedor>: Monta un volumen.
      • docker run --name <nombre_del_contenedor>: Asigna un nombre al contenedor.
    • Ejemplo: docker run -d -p 8080:80 nginx
  • docker ps:
    • Lista los contenedores en ejecución.
    • docker ps -a: lista todos los contenedores.
  • docker stop <ID_del_contenedor> o <nombre_del_contenedor>:
    • Detiene un contenedor en ejecución.
  • docker start <ID_del_contenedor> o <nombre_del_contenedor>:
    • Inicia un contenedor detenido.
  • docker restart <ID_del_contenedor> o <nombre_del_contenedor>:
    • reinicia un contenedor.
  • docker rm <ID_del_contenedor> o <nombre_del_contenedor>:
    • Elimina un contenedor detenido.
  • docker exec -it <ID_del_contenedor> o <nombre_del_contenedor> [comando]:
    • Ejecuta un comando dentro de un contenedor en ejecución.
    • -it proporciona una terminal interactiva.
    • Ejemplo: docker exec -it mi_contenedor bash
  • docker logs <ID_del_contenedor> o <nombre_del_contenedor>:
    • Muestra los registros de un contenedor.

Otros Comandos Útiles:

  • docker search <término>:
    • Busca imágenes en Docker Hub.
  • docker version:
    • Muestra la información de la versión de Docker.
  • docker info:
    • Muestra información general sobre la instalación de docker.

Conceptos Clave:

  • Imágenes: Plantillas de solo lectura utilizadas para crear contenedores.
  • Contenedores: Instancias en ejecución de imágenes.
  • Docker Hub: Un registro público de imágenes de Docker.

Con estos comandos básicos, podrás empezar a utilizar Docker de manera efectiva.

Instalar WireGuard con Docker en Raspberry Pi

  1.  Instalar Docker en tu máquina:

    • Si utilizas un sistema operativo basado en Linux, puedes utilizar el siguiente comando en la terminal:
    curl -sSL https://get.docker.com | sh
    
  2. Añadir tu usuario actual al grupo "docker":

    • Esto te permitirá detener e iniciar el contenedor Docker de WireGuard sin necesidad de utilizar el superusuario.
    sudo usermod -aG docker $USER
    
  3. Cerrar sesión y volver a iniciarla o reiniciar tu máquina:

    • Los cambios en los usuarios de Linux requieren que cierres sesión y vuelvas a iniciarla. Si utilizas SSH para conectarte a tu máquina, puedes cerrar sesión fácilmente con el siguiente comando:
    logout
    
    • Alternativamente, puedes reiniciar tu máquina ejecutando el siguiente comando:
    sudo reboot
    
  4. Preparar WireGuard:

    • Debes tener tu dispositivo accesible desde fuera de tu red. Esto significa que debes reenviar el puerto en una red doméstica y asegurarte de que tu dispositivo tenga una dirección IP estática. Para acceder a tu VPN de WireGuard desde fuera de tu red, debes abrir el puerto "51820". Si necesitas especificar el protocolo, utiliza "UDP".
  5. Crear un directorio para almacenar el archivo Compose:

    • También es la misma ubicación donde almacenaremos todos los archivos de configuración de Wireguard. Puedes crear un directorio en "/opt/stacks/wireguard" utilizando el comando mkdir.
    sudo mkdir -p /opt/stacks/wireguard
    
    • Al utilizar la opción "-p", nos aseguramos de que este comando cree toda la ruta, en lugar de simplemente intentar crear la ruta final.
  6. Cambiar al directorio:

    cd /opt/stacks/wireguard
    
  7. Generar un hash de contraseña:

    • Antes de configurar el archivo Compose para WireGuard, necesitaremos generar un hash rápido para la contraseña que pretendes utilizar. Afortunadamente, el contenedor Docker tiene un script fácil que podemos ejecutar. Dentro de la terminal, ejecuta el siguiente comando. Al escribir este comando, asegúrate de reemplazar "<PASSWORD>" con la contraseña que pretendes utilizar para acceder a la interfaz web de WG-Easy.
     docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw '<PASSWORD>'
    
    • Por ejemplo, para generar un hash para la contraseña "pimylifeup", ejecutaríamos el siguiente comando.
    docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'pimylifeup'
    
  8. Modificar el hash de la contraseña:

    • Antes de utilizar esta línea en el archivo Docker Compose, requiere algunas modificaciones.
    PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'
    
    • Antes de escribir este valor de hash de contraseña, elimina las dos comillas simples (') y añade un signo de dólar ($) adicional después de cada signo de dólar. Por ejemplo, nuestra línea anterior se convertiría en la siguiente
    PASSWORD_HASH=$$2b$$12$$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW
    
  9. Escribir un archivo Docker Compose para Wireguard:

    • Ejecuta el siguiente comando para comenzar a escribir este archivo utilizando el editor de texto nano.
    sudo nano compose.yaml
    
    • Dentro de este archivo, querrás escribir las siguientes líneas.
    <PASSWORD_HASH> : Reemplaza este marcador de posición con el valor que obtuviste anteriormente en esta guía. La contraseña que se generó para este hash es la que utilizarás para iniciar sesión en la interfaz web de WG-Easy. Esta interfaz web es la que utilizarás para crear y gestionar clientes para tu VPN de WireGuard fácilmente.
    
    Esta línea terminará pareciéndose un poco a lo que hemos mostrado a continuación. El hash debería diferir ya que tu contraseña y "sal" serán diferentes.
    
    - PASSWORD_HASH=$$2b$$12$$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW
    
    <IPADDRESS> : A continuación, especifica la dirección IP o el nombre de dominio donde se puede acceder a tu VPN. La dirección IP debe ser tu dirección IP externa y no local. Además, si utilizas un nombre de dominio, querrás asegurarte de que esté apuntando a donde está alojada tu VPN de WireGuard.
    services:
      wg-easy:
        container_name: wg-easy
        image: ghcr.io/wg-easy/wg-easy
        environment:
          - <PASSWORD_HASH>
          - WG_HOST=<IPADDRESS>
        volumes:
          - ./config:/etc/wireguard
          - /lib/modules:/lib/modules
        ports:
          - "51820:51820/udp"
          - "51821:51821/tcp"
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
          - SYS_MODULE
        sysctls:
          - net.ipv4.ip_forward=1
          - net.ipv4.conf.all.src_valid_mark=1
    
  10. Guardar y salir del archivo:

    • Después de escribir las líneas anteriores, puedes guardar y salir presionando CTRL + X, Y y, finalmente, la tecla ENTER.
  11. Iniciar el stack de Docker de Wireguard:

    • Con el archivo Compose escrito, iniciar WireGuard utilizando Docker es increíblemente sencillo. Para poner en marcha nuestra VPN, necesitamos utilizar el siguiente comando.
    docker compose up -d
    
    • Al utilizar la opción "-d", le estamos diciendo a Docker que se desconecte de la terminal una vez que haya iniciado nuestro contenedor WireGuard.
  12. Acceder a la interfaz web del contenedor Docker de Wireguard:

    • Antes de que puedas empezar a utilizar tu nueva VPN, necesitarás crear un nuevo cliente. Normalmente, esto puede ser un poco complicado, pero el contenedor que estamos utilizando viene con una interfaz web súper fácil de usar. Para acceder a esta interfaz web, necesitarás conocer la dirección IP local de tu dispositivo. Puedes obtener esta IP fácilmente utilizando el comando hostname.
    hostname -I
    
  13. Ir a la siguiente dirección para acceder a la interfaz web de WG-Easy:

    http://<IPADDRESS>:51821
    
  14. Utilizar WG-Easy para gestionar tu contenedor Docker de Wireguard:

    • Ahora deberías ver la siguiente pantalla pidiéndote que inicies sesión en la interfaz web de WG-Easy. Primero, debes escribir la contraseña que estableciste anteriormente en esta guía (1.). Después de escribir tu contraseña, simplemente haz clic en el botón "Sign In" (2.) para acceder a la interfaz web.
  15. Crear tu primer cliente:

    • Una vez que hayas iniciado sesión, puedes crear tu primer cliente para tu contenedor Docker de VPN de WireGuard. Para comenzar este proceso, haz clic en el botón "+ NEW" o "+ New Client".
  16. Nombrar tu nuevo cliente:

    • En esta pantalla, ahora querrás dar un nombre a tu nuevo cliente (1.). Nombra esto algo para que sepas dónde se está utilizando este cliente. Después de escribir un nombre, haz clic en el botón "Create" (2.).
  17. Descargar los detalles de tu cliente:

    • En este punto, finalmente tienes WireGuard en funcionamiento utilizando un contenedor Docker. Ahora puedes descargar los detalles de tu cliente y conectarte a tu VPN. La interfaz web de WG-Easy que estamos utilizando te permite generar un código QR (2.) para añadir fácilmente tu cliente. También puedes descargar los archivos de configuración si tu cliente no admite el escaneo de códigos QR (3.). Si quieres evitar que un cliente acceda a tu VPN de WireGuard, puedes hacer clic en el interruptor (1.).

Siguiendo estos pasos, deberías poder instalar y configurar WireGuard en tu Raspberry Pi utilizando Docker.

Ref:
https://pimylifeup.com/wireguard-docker/
https://gemini.google.com