Tabla de Contenidos

7. Despliegue básico en servidor

Introducción a Docker

Docker es similar a VirtualBox solo que se gestiona con la línea de órdenes y consume muchísimos menos recursos el crear cada máquina virtual.

En el entorno de Docker hay que diferenciar dos conceptos:

Mas información:

Datos de servidores

Instalación

Para instalar docker , lanzar las siguientes órdenes en Ubuntu:

snap remove docker
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates  curl   gnupg-agent    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Las instrucciones actualizadas están en Install Docker Engine on Ubuntu

Para comprobar que todo funciona , lanzar la siguiente orden:

sudo docker container run hello-world

Gestión de Imágenes

Las imágenes se descargan de una página llamada DockerHub. Es algo similar a GitHub pero para imágenes de Docker.

Orden Explicación
docker image pull Bajar una imagen de DockerHub
docker image rm Borrar una imagen en local
docker image ls Ver las imagenes que hay en local
docker image save Exportar una imagen a un fichero
docker image load Importan una imagen desde un fichero

docker image pull

Se usa para descargar una imagen de DockerHub en nuestra máquina.

Tiene un único parametro que es el nombre de la imagen a descargar. El nombre de la imagen tiene el siguiente formato: usuario/nombre de la imagen:tag de la imagen

Siendo:



docker image pull mysql/mysql-server:8.0.22

Proxy

Al igual que con otras herramientas, para clase habrá que configurar el proxy:

mkdir /etc/systemd/system/docker.service.d
echo "[Service]" >> /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"HTTP_PROXY=http://172.16.0.9:8080/\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf  
systemctl daemon-reload
systemctl show --property Environment docker

Mas información:

Gestión de Contenedores

Orden Explicación
docker container run Crear un nuevo contenedor y ejecutarlo a partir de una imagen
docker container start Iniciar un contenedor que está parado
docker container stop Parar un contenedor
docker container rm Borrar un contenedor que está parado
docker container ls Ver los contenedores que hay
docker container exec Ejecutar una orden en el contenedor. Normalmente es el Shell
docker container stats Mostrar uso de CPU,memoria,etc de los contenedores
docker container logs Muestra lo que sale por pantalla. Es decir lo que se llama en Linux stdout y stderr. Normalmente los contenedores van sacando por pantalla lo que hacen.

Las dos órdenes mas complejas e importantes para la gestión de los contenedores son:

docker container run

Pone en marcha la imagen creando un contenedor.Su forma mas sencilla de usar es docker run container nombre_imagen. Aunque prácticamente siempre se usan la mayoría de los siguientes parámetros:

Si usamos una carpeta real , deberá tener todos los permisos ya que el usuario que usa el contenedor es distinto al nuestro.
docker container run \
   -dit \
   --restart always \
   -v /opt/mariadb:/var/lib/mysql  \
   -e MYSQL_ROOT_PASSWORD=root  \
   -p 4000:3306  \
   --name  prueba_mariadb \
   --hostname prueba_mariadb \
   mariadb:10.1
Lo mas complicado de la orden docker container run son los parámetros -v y -p

Más opciones

Veamos ahora otras opciones de docker container exec

  docker container run \
     -dit \
     --restart always \
     --rm \
     -w /var/lib/mysql \
     -v /opt/mariadb:/var/lib/mysql  \
     -e MYSQL_ROOT_PASSWORD=root  \
     -p 4000:3306  \
     --name  prueba_mariadb \
     --hostname prueba_mariadb \
     mariadb:10.1

hemos añadido --rm para indicar que si el contenedor acaba y se para, que automáticamente también se borre. Y también hemos añadido -w /var/lib/mysql para estar en esa carpeta. Y así por ejemplo si lanzásemos docker container exec -it prueba_mariadb ls, se verían los ficheros de la carpeta /var/lib/mysql.

docker container exec

Permite lanzar órdenes dentro del contanedor. Podría verse como algo similar a conectarse por ssh al contenedor.

docker container exec -it nombre_container cat /etc/passwd
docker container exec -it nombre_container /bin/bash

Ejercicios

Para hacer estos ejercicios deberás tener instalado una máquina virtual de VirtualBox con Ubuntu Server 18.04.5. Aunque no es necesario si ya usas Linux en tu equipo.

Al instalar Ubuntu recuerda marcar el servidor de SSH cuando te pida el software a instalar.
Al instalar Ubuntu si estás en el centro recuerda también indicar el proxy

Ejercicio 1

Dada las siguientes dos imágenes:

Responde:

Indica las órdenes para realizar lo siguiente:

Ejercicio 2

Con la imagen de Jenkins que te has bajado, crea un contenedor con los siguientes datos:

Ahora vamos a configurar Jenkins:

Se deberá mostrar una imagen similar a la siguiente:

Ejercicio 3

Indica los siguientes comandos:

Navega a la página web del Jenkins y comprueba que ya está todo instalado. ¿Como es que no se ha borrado si hemos borrado el contenedor y vuelto a crearlo?

Ejercicio 4

Indica los siguientes comandos:

Haz lo siguiente:

Indica los siguientes comandos:

Haz lo siguiente:

Ejercicio 5

Indica los siguientes comandos:

Haz lo siguiente:

Indica los siguientes comandos:

Haz lo siguiente:

Ejercicio 6

Indica los siguientes comandos:

Crea el fichero index.php con el siguiente contenido

<?php
phpinfo();
?>

Cópialo de forma que navegando a "http://localhost:22322" se vea el resultado que ha generado la página en php. Será similar a lo siguiente:

Ejercicio 7