Buenos, lo que vengo a presentarles en esta ocasión es algo que yo uso hace años. Estuve pensando en quizá solo mostrarles algún ejemplo práctico, pero eso sería agrandar demasiado el artículo, así que este tutorial solo tendrá lo básico para montar a partir de allí lo que quieras y luego haré otros tutoriales que lo complementen o más bien usaré este tutorial para complementar a los otros.

Normalmente este tutorial tendría que iniciarlo explicando que es docker, pero lo veo innecesario ya que no solo es conocido, sino que cualquier puede leer el artículo de docker en wikipedia y con eso es suficiente para entenderlo.

Motivos para usar docker

Una gran ventaja de usar docker, es que puedes exportar esa imagen docker fácilmente entre tus ordenadores o cuando reinstales el sistema operativo y el proyecto seguirá funcionando, lo cual te permite tener una imagen portable de buena parte de tu entorno de trabajo, a esto podemos añadirle que igual es útil si vas a trabajar en equipo. No pocas veces sucede que en el ordenador de alguno de los programadores de un equipo, algo no le funcione a causa de una aplicación o configuración específica del mismo, con esto no sería el caso.

Otra ventaja es que puedes tener separado las cosas necesarias para ciertas tecnologías de otras, así como poder tener versiones distintas de las mismas, para así evitar estar reinstalando, con desorden o con problemas entre ellas. No es raro que un programador tenga de manera simultánea que revisar o realizar proyectos en, por ejemplo, NodeJS, PHP 7.0, PHP 7.2 y además tener que correr PHP 5.0, porque está actualizando un código a PHP 7.3 y necesita ver el sistema funcionando para ver como debe quedar una vez termine de migrarlo.

Todo esto seguro les recordará a algunos a Vagrant o directamente a usar una máquina virtual de toda la vida, pero recuerden que docker es bastante más óptimo que una máquina virtual al solo ser un contenedor aislado de aplicaciones y no todo un sistema operativo.

Desde luego, hasta donde tengo entendido, esto de ser mas óptimo solo vendría a aplicar para el caso de usar docker en GNU/Linux -como es mi caso-, pero aún así quedaría la ventaja de que luego puedes importar tu imagen docker directo a un VPS en Amazon, Vultr, DigitalOcean, etc. y tener tu aplicación corriendo online sin tener que reinstalar todo desde 0.

Ahora si, el tutorial

Paso 1: Instalar docker

Esto no lo voy a enseñar yo aquí, ya puedes instalarlo directamente desde los repositorios de tu distro o seguir los pasos de la documentación oficial de docker en donde hay instrucciones para cualquier distribución Linux, además de otros sistemas operativos.

Desde luego, si tienes dudas en este paso, recuerda que tienes los comentarios para preguntar cualquier cosa. Son comentarios anónimos, gratuitos y no muerden.

Paso 2: Crear tu primer contenedor docker

Ahora crearemos un contenedor, sería un símil de crear la máquina virtual donde vamos a trabajar. Para ello ejecutaremos el siguiente comando:

sudo docker run -it ubuntu

Con esto estaremos pidiendo que se cree un contenedor de ubuntu y como aún no tienes una imagen docker de ubuntu, el comando igual se encargará de descargarla desde los repositorios de docker.

Una vez termine de descargar y crear el contenedor, verás que en la terminal ya no mostrará al principio «[tu-usario]@[nombre-de-tumáquina]», sino que dirá algo como «root@xxxxx»:

docker run -it ubuntu

Esto es debido a que ya no te encuentras en la terminal de tu máquina, sino en la terminal del contenedor y todo lo que instales o modifiques en esta terminal, se aplicará al contenedor y no a tu ordenador.

Como nota importante: «cdd0273da8dd» es el ID del contenedor, anótenlo porque luego lo usarán. En caso de que se les olvide, solo deben poner en la terminal (una normal, no en la del contenedor):

sudo docker ps -a

Y podrán ver allí el ID. Si les parece complicado, pueden igual usar el nombre automático que le asigna docker, que en mi caso es «suspicious_allen»:

Paso 3: Instalar OpenSSH

Estando en la terminal del contenedor, ejecutamos:

apt update
apt install openssh-server

Si estuviéramos en un servidor normal, el servicio de ssh se habría iniciado, pero como esto es un contenedor docker, debemos iniciarlo nosotros mismos:

service ssh start

Ahora ya tenemos el servicio corriendo y listo para usarse. Puede que algunos mas experimentados con docker ahora mismo no le vean sentido al ssh, ya que a la terminal del docker siempre podemos acceder usando el parámetro «exec», pero tranquilos que más adelante le verán el sentido.

Paso 4: Crear usuario

Ahora crearemos un usuario para usar el SSH:

adduser usuario

Esto nos servirá para acceder tanto a la terminal por SSH, como para el paso 5.

Paso 5: Acceder a los archivos fácilmente

Cuando queramos programar, vamos a necesitar de nuestros archivos como si estuviera en una carpeta cualquiera de nuestro ordenador y no dentro de un contenedor/servidor que solo podemos controlar por terminal.

Primero abrimos el explorador de archivos y nos vamos a «Otras ubicaciones» y en el campo de texto inferior ponemos sftp:// seguido de la ip de nuestro docker, en este caso debería ser:

sftp://172.17.0.2

Por si no queda claro, aquí se los muestro en una imagen:

Conectar servidor con nautilusLuego presiones el botón de la esquina inferior derecha que dice «conectar» y saltará una ventana donde puede colocar el usuario y contraseña que pusimos en el paso 4. Con esto veremos que nos mostrará los archivos de dentro del docker y podremos editar normalmente con ello nuestros archivos.

Algunos editores tienen plugins para sincronizar por una carpeta local con la remota por ssh o ftp, pero considero mejor esta manera por ser  totalmente independiente de plugins y editores.

Nota: Aclaro que en mi caso, el explorador de archivos que estoy usando es es Nautilus, ya que uso el entorno de escritorio Gnome (el que viene por defecto en Debian, Ubuntu, Pop_OS!, etc.), pero puedes hacer lo mismo en cualquier otro explorador en de GNU/Linux, solo debes buscar donde está la opción de conectar a un servidor.

Paso 6: Iniciar los servicios desde un script

Una diferencia que tiene docker con una instalación normal, es que aquí los servicios no se inician solos. Por ello, cuando iniciemos nuestro contenedor, tendremos que ejecutar siempre los comandos para iniciar nuestros servicios y aunque ahora solo tenemos uno (ssh), más adelante tendremos más, por lo que no está demás preparar el terreno.

Dentro de nuestro docker, vamos a crear un comando personalizado. Primero crearemos el archivo  lo editaremos con nano:

nano /usr/local/bin/startServices

Dentro del archivo colocamos el siguiente código:

#!/bin/bash
service ssh start

Le damos permisos de ejecución:

chmod +x /usr/local/bin/startServices

Y listo, ahora cuando tengamos nuevos servicios que necesitemos iniciar, solo necesitamos agregar el comando a este archivo.

Paso 7: Detener y volver a iniciar el contenedor

Como paso final, vamos a ver como iniciar y detener nuestro contenedor mediante la terminal, ya que hasta ahora no lo hemos hecho (lo creamos, pero nunca lo paramos ni volvimos a iniciar).

Nota: recuerden cambiar «suspicious_allen» por el nombre que tenga su contenedor. En mi caso estoy usando ese nombre porque es el que obtuve en el paso 2.

Primero que nada vamos a detenerlo/apagarlo:

sudo docker stop suspicious_allen

En la terminal se mostrará el nombre del contenedor y podrán notar que la conexión en Nautilus que hicimos en el paso 5, se desconecta sola.

Ahora para volver a iniciarlo/encenderlo solo tendríamos que hacer:

sudo docker start suspicious_allen
sudo docker exec -it suspicious_allen startServices

Y eso es todo. El primer comando inicia el docker y con el segundo ejecutamos el comando personalizado que hicimos en el paso 6 para iniciar los servicios.

Si los comandos te parecen largos o difíciles de recordar, recuerda que siempre puedes usar mi tutorial de cómo crear comandos personalizados en Linux y así ahorrarte el trabajo de escribirlos cada vez.

Paso 8: Instalar todo lo que necessitemos

A partir del paso 7, ya tenemos todo lo básico y necesario para poder montar nuestro entorno de trabajo portátil. Yo por ej. tengo un docker con apache, mysql y php; otro con nodejs y mongodb; otro con nginx, varias versiones de PHP-FPM y mariadb, etc.

Estos contenedores puedo moverlos a gusto cuando reinstalo el ordenador y gracias a ello, actualmente estoy usando un contenedor que lo creé en debian, pasó por Ubuntu, luego instalé Pop_OS! y actualmente funciona en mi instalación de Arch.

De esta manera, si hoy día por algún problema tuviera que reinstalar o sencillamente quiero mover mi entorno de trabajo de mi ordenador de escritorio a un portátil, puedo hacerlo fácil y rápido, sin reconfigurar nada, solo exportar e importar el contenedor.

Realmente hay más cosas que podría mostrar, como el usar FUSE para acceder a los archivos del docker, pero el post ya es demasiado largo, así que mejor lo dejamos para una secuela posterior el día que me apetezca continuar este tutorial.

kj


Subscribe
Notify of
guest

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
N00B
N00B
3 years ago

es muy dificil actualizar php 5 al 7? saludos