mysql-client-wait-docker

El poner nombres no es mi fuerte, lo reconozco. Se trata de un contenedor Docker que trabaja como cliente MySQL y tiene la capacidad de esperar hasta que el servidor MySQL se encuentre activo, lo que lo hace muy atractivo a la hora de utilizarlo en un docker-compose.

¿Qué ofrece nuevo ésta imagen? Pues permite ejecutar directamente las sentencias SQL que se pasan a través del command line, lo que lo hace útil en escenarios dónde por ejemplo no se puede utilizar un volumen para inicializar la base de datos, como cuando queremos lanzar un docker-compose de forma remota.

version: '3'

services:
  mysql:
    image: mysql:5.6
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_DATABASE=test

  populate:
    image: fmulero/mysql-client-wait-docker
    container_name: populate
    environment:
      - DB_PASSWORD=1234
      - DB_NAME=test
      - DB_HOST=mysql
      - DB_USER=root
    depends_on:
      - mysql
    command: "DROP TABLE IF EXISTS TEST; CREATE TABLE TEST (CREATION_DATE DATETIME(6), MESSAGE LONGTEXT NOT NULL);"

El código fuente del contenedor se puede encontrar en github y la imagen ya está disponible en docker hub para ser usada

Anuncios

Docker, operación bikini

O cómo reducir el peso de nuestros contenedores con unos sencillos pasos.

Hace cuestión de unos días, revisando unos desarrollos comprobé como algunas de las imágenes que había creado para mis contenedores eran demasiado pesadas, por lo que comencé a investigar cómo reducirlas. Para ello encontré cinco sencillos pasos pasos.

1. Parte de una buena base

Parte de la imagen más pequeña que puedas y que se adecue a tus necesidades. Invierte unos minutos en buscar y determinar de qué imagen base partir. Existen distribuciones como Alpine o las versiones Slim de Debian que merecen la pena ser estudiadas

2. Instala lo justo

Incluye sólo lo que necesites, evita instalar herramientas de desarrollo y utiliza opciones como –no-install-recommends de apt o –no-recommends de zypper para evitar la instalación de paquetes recomendados que probablemente no necesites

3. Menos es más

Reduce el número de capas, cada una de ellas requiere un peaje, que aunque no es demasiado alto, puede suponer una diferencia sustancial entre una imagen y otra. Veamos el siguiente ejemplo

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y curl --no-install-recommends
RUN apt-get install -y wget --no-install-recommends
RUN apt-get install -y net-tools --no-install-recommends
RUN apt-get install -y inetutils-ping --no-install-recommends
RUN  rm -rf /var/lib/apt/lists/*

CMD ["echo", "Hello World!" ]
FROM ubuntu:latest
RUN apt-get update && \
apt-get install -y curl wget net-tools inetutils-ping \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*

CMD ["echo", "Hello World!" ]

Hay que reconocer que reducir el número de capas puede suponer un incordio a la hora de desarrollar, dado que dificulta en cierta medida la identificación de fallos y aumenta los tiempos a la hora de construir nuevas imágenes, dado que las capas será mayores.

4. Limpia

Elimina lo que ya no necesites, carpeta temporales, código fuente y ficheros intermedios de compilación, caché de herramientas como apt o apk, ficheros de log, historial de comandos, etc

5. fromlatest

Se trata de una herramienta muy útil que te ayudará a realizar un último repaso de tu fichero Dockerfile https://www.fromlatest.io/#/