Empezando a usar Docker en manjaro

14 de Febrero del 2021 - Escrito por Shadow Myst


Yo en mi computadora uso una distribución Linux llamada Manjaro y hace pocos días al poner actualizarla, paso la instalación de PHP 7 a PHP 8, lo cual desconfiguro toda la instalación en el servidor Apache y con ello, hizo que un proyecto con el que andaba trabajando dejara de funcionar completamente. Reconfigurar podría tomarme mi tiempo, pero si de todas formas lo tenía que reparar, preferí empezar a probar Docker.

En varios grupos de Telegram de programadores siempre me insistían que aprendiera a usar Docker, que una vez empezara a usarlo no lo dejaría por nada del mundo. La verdad es que solo lo he llegado a usar muy contadas veces, más que nada lo he usado para mi nodo Creary, criptomoneda donde soy witness, pero no me he atrevido a usarlo para más cosas. Voy a explicar un poco como es Docker para que le vayan entendiendo, pero avisando que yo también soy nuevo en el tema por lo que es bueno que investiguen en otra parte si quieren empaparse más del tema, sobre aviso no hay engaño

¿Qué es Docker?

Para los que nunca han oído hablar, en palabras burdas es como tener máquinas virtuales de forma muy liviana las cuales vienen guardadas en forma de contenedores, el plan es que puedas crear, desarrollar e implementar aplicaciones de software sin importar el sistema operativo en el que te encuentres.

Entonces sigamos el ejemplo de vida real que estoy pasando, digamos que quieres desarrollar una página web en PHP que se conectara a una base de datos, entonces tienes que tener instalado un LAMP (Linux con Apache, Mysql y PHP) más los archivos necesarios para trabajar ahí, pero de repente pasa como en mi caso, que se actualiza tu sistema operativo y se desconfigura tu instalación o que tienes que usar una nueva computadora donde tienes que reinstalar todo, bueno si tuvieras toda esa instalación en tu contenedor no importa los cambios que hagas de forma externa, funcionara como un sandbox y podrías trabajar dentro de tu contenedor sin problema alguno

Sé que dije que Docker es como tener una máquina virtual, pero hay una gran diferencia una con respecto a la otra, es que mientras en una máquina virtual necesitas instalarle un sistema operativo propio, Docker funciona utilizando el sistema operativo que ya tienes instalado en tu computadora, utilizando los recursos que en sí se comparten en todo sistema operativo y solo instalando los que necesitas para ejecutar tu aplicación, por ende, puedes tener muchos contenedores Docker ejecutándose sin que afecte el rendimiento de tu computadora como pasaría una máquina virtual.

Instalando y usando Docker en Manjaro

Para resolver mi problema primero tuve que instalar Docker en mi distribución Linux y esto se logra de forma fácil

  • Primero actualizamos nuestro sistema
    sudo pacman -Syu
    
  • Ahora instalamos Docker
    sudo pacman -S docker
    
  • Levantamos el servicio y de una vez activamos que se inicialice cada vez que reiniciemos nuestra computadora
    sudo systecmtl start docker.service
    sudo systemctl enable docker.service
    

    Después de hacer esto, puede que quieran ejecutar Docker y les genere un error, lo que pasa es que en estos momentos, solo funciona Docker para el usuario root, tenemos que agregarlo al usuario normal, para ello ejecutamos lo siguiente

    sudo usermod -a -G docker $USER
    

    y con esto ya debe funcionar, para probarlo simplemente ejecutamos

    docker run hello-world
    

Docker PHP con Apache

Bien ahora lo que necesito es poder configurar PHP, pero al mismo tiempo necesito configurarlo con un servidor apache (o nginx, según sea el uso que le des y como te acomodes con él), para ello tenemos que ir a Docker Hub donde se suben todos los contenedores, como un GitHub, pero de contenedores de Docker, en especial busque uno que me instalara PHP

Imagen Docker oficial de PHP
Imagen Docker oficial de PHP

Como se puede ver podemos simplemente conseguir la imagen de PHP condocker pull php o para empezarla a correr podemos usar docker run php sin embargo a mí me interesa que también se instale apache, para ello puedo mirar más abajo en la web y podemos encontrar muchas etiquetas con las que podemos descargar el contenedor PHP y la que termino interesándome es php:8.0.2-apache la cual al ejecutar me creara mi contenedor con PHP 8 y apache instalado.

Para ello solo tenemos que escribir docker run -p 80:80 php:8.0.2-apache donde -p 80:80 es para poder escuchar en nuestra computadora un puerto en cuestión, supongamos que ponemos -p 3000:80 entonces en nuestro navegador tendríamos que poner localhost:3000 para poder escuchar lo que el contenedor nos envía por el puerto 80.

Pero si queremos crear nuestro propio imagen Docker con los archivos de nuestro proyecto que funcionan con PHP, lo ideal es que creemos nuestro archivo llamado Dockerfile, en mi caso para mi proyecto uso el siguiente:

FROM php:8.0.2-apache
RUN docker-php-ext-install mysqli
RUN a2enmod rewrite
COPY src/ /var/www/html/
EXPOSE 80

Donde FROM es la imagen docker de la que nos vamos a basar para crear la nuestra, RUN son comandos que vamos a pedir que ejecuta al momento de la creación de la imagen, en este caso estoy pidiendo que instale la extensión de PHP mysqli para la conexión con MySQL y luego que habilite el mod rewrite de apache, estoy pidiendo que copie lo que está en mi carpeta src/ a la ruta /var/www/html/ del contenedor Docker que si han usado Linux/Ubuntu, es la ruta por default para visualizar las webs con apache y por último que exponga el puerto 80.

Termino ejecutando docker build . -t <nombreDeMiImagen> donde él . es porque mi carpeta src/ está en el mismo lugar donde se encuentra el Dockerfile y listo tendremos nuestra imagen.

Creación de nuestra imagen Docker
Creación de nuestra imagen Docker

Ahora podremos usar nuestra imagen ejecutando docker run -p 80:80 -dt --name contenedorweb miweb donde -dt estamos diciendo que mandaremos el proceso a segundo plano y --name contenedorweb es el nombre que le pondremos a nuestro contenedor de nuestra imagen Docker miweb

Esto es todo por esta ocasión, espero que les guste este post y como les mencione al principio estoy aprendiendo a usarlo apenas, por lo que aprendo junto a ustedes, sin embargo ya tengo más post pensados para escribirlos si tienen alguna duda déjenlo en los comentarios y buscaré la forma de resolverla

Publicado tambien en Hive