DOCKER: Instalación - primeros pasos - Apache


¿Qué es Docker?

captura logo docker

Docker es un sistema de virtualización de aplicaciones mediante contenedores, creado por Solomon Hykes y otros ingenieros. En 2013 se convirtió en un proyecto de software libre (licencia Apache) en el que participan cada vez más empresas. La versión 1.0 se publicó en junio de 2014 y ha tenido un desarrollo muy rápido. En marzo de 2017, Docker pasó a publicar una nueva versión cada mes y cambió su numeración al formato AA.MM (año y mes). Estas versiones se mantienen solamente durante un mes, aunque hay una versión trimestral que se mantiene durante cuatro meses (la primera fue Docker 17.03). Docker ofrece una versión Enterprise (de pago) y una versión Community (gratuita). La diferencia radica en el nivel de soporte y certificación que proporciona Docker a la versión Enterprise.

Los contenedores se distinguen de las máquinas virtuales en que las máquinas virtuales emulan un ordenador físico en el que se instala un sistema operativo completo, mientras que los contenedores usan el kernel del sistema operativo anfitrión pero contienen las capas superiores (sistema de ficheros, utilidades, aplicaciones). Al ahorrarse la emulación del ordenador y el sistema operativo de la máquina virtual, los contenedores son más pequeños y rápidos que las máquinas virtuales. Pero al incluir el resto de capas de software, se consigue el aislamiento e independencia entre contenedores que se busca con las máquinas virtuales.

Los contenedores son útiles en los servidores, pero también para pruebas de software, ya que incluyen todos los elementos que necesitan las aplicaciones, lo que facilita la instalación y elimina los problemas de incompatibilidad de versiones en bibliotecas y aplicaciones auxiliares.

Docker empezó estando disponible solamente para distribuciones GNU/Linux, pero desde junio de 2016 también está disponible como aplicación nativa en Windows Server 2016 y Windows 10, utiliza la virtualización ofrecida por el sistema operativo. En el caso de Windows 10,eso significa que para usar Docker de forma nativa hay que activar Hyper-V que, por desgracia, es incompatible con VirtualBox. Para poder utilizar Docker en Windows 7 o en Windows 10 sin Hyper-V, Docker ofrece desde agosto de 2015 Docker Toolbox, que relamente es una máquina virtual (que se ejecuta en VirtualBox) que contiene Docker.

El componente básico de Docker es el Docker Engine, pero Docker ofrece también una serie de herramientas para administrar, distribuir e instalar contenedores: Docker Compose, Docker Machine, etc.

Aunque un contenedor puede incluir cualquier número de aplicaciones, lo habitual es que un contenedor contenga una sola aplicación (y los programas necesarios para ponerse en marcha). Por ejemplo, si una aplicación web guarda la información en una base de datos, en vez de incluir la aplicación y la base de datos en el mismo contenedor, se suelen crear dos contenedores: uno con la aplicación web y otro con la base de datos. Por supuesto, en el contenedor de la aplicación web sí que se incluiría un servidor web.

Para que varios contenedores puedan comunicarse entre sí, Docker permite la creación de redes virtuales privadas en la que se incluyen los contenedores.

Nota: Cuando varios contenedores contienen aplicaciones web, los servidores web de cada contenedor en principio entrarían en conflicto puesto que todos atienden al puerto 80. Ese problema se presenta siempre que contenedores distintos incluyen aplicaciones que atienden a través de los mismos puertos (base de datos, etc.). Para resolver este problema, Docker permite que los contenedores escuchen por un puerto cualquiera, aunque internamente el servidor sigue utilizando su puerto habitual. En estos casos se debe utilizar un proxy inverso que redirija las peticiones exteriores al puerto correspondiente.

El proceso de creación de un contenedor incluye varias fases:

No es necesario realizar todas estas fases para crear un contenedor, pues en Internet se pueden encontrar imágenes ya preparadas por los creadores de las aplicaciones o por terceros (como Bitnami).

Instalación de Docker en Raspbian

Para comenzar con Docker CE en Debian o Raspbian, hay que asegurarse de cumplir con los requisitos previos y luego instalar Docker.

Para instalar Docker CE, se necesita la versión de 64 bits de una de estas versiones de Debian o Raspbian, Docker CE es compatible con las arquitecturas x86_64 (o amd64) y armhf para Jessie y Stretch.

  1. Desinstalar versiones antiguas:

    Las versiones anteriores de Docker se llamaban docker o docker-engine. Si estas versiones están instaladas hay que desinstalarlas:

    $ sudo apt-get remove docker docker-engine docker.io

    Si es la primera vez que se instala Docker, apt-get informa que ninguno de estos paquetes está instalado. Si hubiera alguno instalado, los contenidos de /var/lib/docker/, incluyendo imágenes, contenedores, volúmenes y redes, se conservan. El paquete Docker CE ahora se llama docker-ce.

  2. Instalar Docker CE:

    Puede instalar Docker CE de diferentes formas, según las necesidades:

  3. Instalar Docker CE mediante script para Raspbian.

    Docker proporciona scripts de conveniencia en get.docker.com y test.docker.com para la instalación de versiones edge y testing de Docker CE en entornos de desarrollo de forma rápida y no interactiva. El código fuente para los scripts se encuentra en el repositorio de docker-install.

    ¡¡¡ No se recomienda el uso de estos scripts para entornos de producción, y se debe comprender los riesgos potenciales antes de usarlos !!!

    Una vez dicho todo esto, se puede ejecutar el siguiente comando para la instalación de docker en Raspbian: $ sudo curl -sSL https://get.docker.com | sh

    captura actualizando sistema

    captura instalando docker

    Al finalizar la instalación, el propio script dice que se puede añadir al grupo docker el usuario pi, para evitar el uso de sudo con los comandos de docker, ejecutando la siguiente orden:$ sudo usermod -aG docker pi y se reinicia el sistema:

    captura añadiendo usuario a docker

    Con la opción $ docker -v, muestra la versión de docker:

    captura versión docker

  4. Instalar Docker Compose para Raspbian.

    Se puede instalar Docker Compose usando pip, ejecutando $ sudo pip install docker-compose

    captura instalación docker-compose

    Hypriot proporciona un binario de Docker-Compose para Raspbian. Puede que no siempre esté actualizado, pero si el espacio es escaso, puede resultar útil. Para usarlo, primero hay que seguir las instrucciones de Hypriot para configurar el repositorio y luego ejecutar el siguiente comando:sudo apt-get install docker-compose

  5. Probando Docker.

    Para probar docker se ejecuta el siguiente comando:$ docker run hello-world, y docker contesta diciendo que no ha podido encontrar la imagen "hello-world:latest" en la máquina local, la busca en hub.docker.com, la descarga y la ejecuta mostrando el siguiente mensaje:

    captura probando docker

Docker: Primeros pasos

Nota: Este apartado ha sido copiado íntegramente de la Web mclibre, aunque en nuestro caso no va a ser necesario usar sudo porque se ha añadido el usurario pi al grupo docker.

ALGUNOS COMANDOS DE DOCKER

IMÁGENES

En los comandos siguientes REPOSITORIO es el nombre del repositorio en el que se encuentra la imagen (por ejemplo bitnami/phpmyadmin) e IMAGEN es el nombre de la imagen descargada. Realmente, las imágenes descargadas se llaman igual que los repositorios de donde se han descargado, pero he distinguido los nombres para dejar claro cuándo nos estamos haciendo referencia a la imagen del repositiorio y cuándo a la imagen local.

CONTENEDORES

En los comandos siguientes CONTENEDOR es el nombre del contenedor, que podemos elegir al crearlo, y RED es el nombre de una red ya existente.

Instalación de Apache en Docker

Una vez instalado Docker, se puede continuar eligiendo una de las siguientes posibilidades:

Cosas importantes a saber antes de crear un contenedor Docker:

Por defecto, y como se ha mostrado anteriormente, la instalación de Docker crea un contenedor llamado hello-world. Para ver las imágenes que hay descargadas se ejecuta $ docker images

Para comenzar con la creación del contenedor, se ha elegido una imagen de Debian, sería el mismo proceso para Ubuntu y demás, se descarga la imagen de Debian mediante el comando $ docker pull debian. Por defecto descarga la última versión disponible, si se desea descargar una en concreto se utilizaría docker pull debian:12.04 por ejemplo. Si se obsevan las imágenes descargadas con docker images se ve que debian está disponible y ocupa solo 84´99 MB

captura 1 instalar Apache en docker

captura 2 instalar Apache en docker

Lo siguiente es crear el contenedor, para ello se usará la imagen de debian, ejecutando el siguiente comando: $ docker run -i -t -- name=DEBRASP debian /bin/bash

captura 3 instalar Apache en docker

Al ejecutar el comando anterior, se accede automáticamente al contenedor y lo primero será descargar los repositorios de Debian mediante el comando $ apt-get update. Una vez estan los repositorios de debian, se instalan los paquetes que hacen falta, Apache2 como servidor web y nano como editor de texto para editar el archivo index.html

captura 4 instalar Apache en docker

Una vez está todo instalado, se edita el archivo index.html, para poder comprobar después que realmente funciona y se reinicia Apache $ service apache2 restart

captura 5 instalar Apache en docker

captura 6 instalar Apache en docker

IMPORTANTE: El paso de ahora es muy importante, pues no se puede salir del contenedor con exit. Para salir y dejar el contenedor abierto se hará con una combinación de teclas, ctrl q + p. Una vez pulsadas se pueden ver los contenedores activos con $ docker ps

captura 6 instalar Apache en docker

Docker le asigna el nombre DEBRASP al contenedor, que es el que se le ha asignado anteriormente con el argumento "--name=". Si se cierra y se vuelve a abrir el contenedor y no le asignamos nombre, asignará un nombre aleatorio, pero mientras permanezca activo utilizará ese. Si por lo que sea se quiere volver a acceder a ese contenedor se haría con el comando: $ docker attach DEBRASP, Esto se podría hacer con un contenedor que esté abierto, si se lanza un contenedor y se le asigna un puerto y está cerrado se bloquea la máquina y habrá que apagarla por la fuerza.

Volviendo al contenedor, como está abierto, todavia se puede perder la información. Para que esto no suceda hay que guardar el contenedor. Para guardar el contenedor hay que asignarle un nombre distinto, ya que no se pueden sobreescribir contenedores. Esto implica que cada cambio que se haga de un contenedor ya creado se tiene que guardar como otro contenedor. Para guardarlo se ejecuta la siguiente orden: $ docker commit DEBRASP apache. Una vez guardado este contenedor (se le ha asignado el nombre apache), si se revisan las imagenes con $ docker images se ve que se encuentra disponible y ocupa 204 MB.

captura 7 instalar Apache en docker

Para modificar ese contenedor se haría igual que debian, $ docker run -i -t apache /bin/bash. Bueno, lo que queda es lanzar el contenedor apache y asignarle un puerto. Para ello se utilizará la orden: $ docker run -d -p 81:80 apache /usr/sbin/apache2ctl -D FOREGROUND. Con esto se lanza el contenedor con puerto 81 al exterior, 80 interno y se ejecuta el servicio apache2 en segundo plano.

captura 8 instalar Apache en docker

Como se ve en la imagen anterior, hay dos contenedores lanzados, el de apache con el puerto asignado, y el de debian que se ha quedado abierto, este último se puede parar con la orden: $ docker stop DEBRASP

captura 9 instalar Apache en docker

Ya por último se comprueba si funciona el contenedor con apache que se ha creado. para ello se accede desde un navegador a la dirección ip de la máquina que contiene docker y se añade el puerto 81 en este caso 192.168.1.21:81

captura 10 instalar Apache en docker


Esta página forma parte del proyecto Mini servidor para prácticas ASIR por Nacho López, que se distribuye bajo una Licencia Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional (CC BY-SA 4.0).