post

Docker, sus manías y encantos.

Esta entrada será dedicada a docker uno de los contenedores más utilizados en el mercado. Tiene sus ventajas, en una ocasión alguien me había comentado sobre los contenedores y lo maravilloso que había permitido crear un ambiente de desarrollo. La verdad siempre me abstuve de usarlo hasta ahora.

Regularmente siempre se es partidario de instalar todo directamente en el equipo, a lo mucho virtualizar un window por cuestiones de ofimática en donde no exista alguna compatibilidad con las diversas alternativas.

Sin embargo cuando un cliente te solicita crear el ambiente clásico de desarrollo en una macbook air con chip M1 y su actualización 12 del sistema operativo, te sueles topar en que muchas cosas cambian y que lo mejor en todo caso es correr o emular (en el mejor de los términos) el ambiente dentro de la M1. Y es ahí donde entra docker.

Después de varias horas invertidas en el aprendizaje de conceptos y demás utilidades. Se pudo montar un ambiente clásico web. Lo que se puede apreciar es que cuenta con una aplicación de escritorio para poder descargar imágenes, montar los contenedores y hacer uso de microservicios (claro en la aplicación que se vaya a crear).

Y lo que más agrado, fue que se puede hacer lo mismo desde una terminal, me gusto que se puede emular las partes básicas de un sistema operativo (alpine, debian, ubuntu entre otros). Otra cosa cosa que encanto fue la fácil que llega ser montar, crear tu propia imagen, usarla, eliminarla; y como en su momento me lo comentaron “el consumo de recurso” es mínimo.

Al calce dejo el script con el que se monto el ambiente clásico, (claro por clásico se hace referencia a un servidor web -apache- un lenguaje de programación -php- el gestor de base de datos -mariadb- y no puede faltar la interfaz gráfica -phpmyadmin-).

version: "2"
services:
    www:
        container_name: www
        image: php:7.2-apache
        restart: always
        ports:
            - "80:80"
        volumes:
            - ../public/:/var/www/html
        links:
            - db:db
        networks:
            - default
    db:
        container_name: db
        image: mariadb:latest
        restart: always
        ports:
            - "3307:3306"
        volumes:
           - db-data:/var/lib/mysql
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
            
    phpmyadmin:
        container_name: phpmyadmin
        image: phpmyadmin/phpmyadmin
        restart: always
        links:
            - db:db
        ports:
            - 81:80
volumes:
    db-data:

¿Qué es lo que hace?

Bueno, pues crea tres contenedores uno web, donde esta apache y php, llamado www. Otro contenedor llamado db donde estará la instancia de mariadb y la contraseña del root estará vacía. El contenedor número tres tiene de nombre phpmyadmin y si en él se encuentra solamente la interfaz gráfica que gestiona todo en maria db, esté estará disponible desde el puerto 81 del localhost y esta vinculado con el contenedor db. Y se crea un volumen llamada db-data donde todos los contenedores estarán convergiendo.

¿Cómo funciona?

Primero el código anterior debe de estar guardado en un fichero con nombre “docker-compose.yml“, se copia tal cual y luego se debe de ejecutar el comando:

% docker-compose up -d

Después ya solo escribes en el navegador localhost:81 y se mostrará la página de acceso de phpmyadmin. Si escribes localhost se mostrará la página de apache. Y lo interesante es que se crea una carpeta con el nombre de public y dentro de ella es donde se colocarán todos los proyectos que se quieran hacer usando la tecnología clásica apache + php + mariadb + docker.

¿Qué se puede hacer?

Aún no se si pueda ser posible emular de tal grado una ofimática de Microsoft en docker aunque solo sería para los que usamos distribuciones basadas en linux. Aun falta por aprender más cosas. como construir tu propia imagen de docker, la ventaja es que si formateas llevas esa misma imagen a otro equipo la “instalas” y se tiene de nuevo el ambiente creado para desarrollar.

Leave a Reply

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