Prácticas con Docker
Laboratorio de Administración y Gestión de Redes y Sistemas
Grado en Ingeniería Telemática, 2018-2019
Escuela Técnica Superior de Ingeniería de Telecomunicación
Universidad Rey Juan Carlos


Formato de la memoria de prácticas

La memoria de estas prácticas debes escribirla en un fichero en formato de texto plano. El fichero estará en tu cuenta del laboratorio. El dia del examen, recogeremos automáticamente tus prácticas.

  1. Es imprescindible que respetes al pie de la letra los nombres de los ficheros especificados en el guión. Una letra mal puesta equivale a una práctica no presentada (o un examen no presentado). Si bien dispondrás de un script que verificará que has usado los nombres correctos

  2. Redacta la memoria describiendo escuetamente todo lo que haces. Esta memoria te será muy útil para preparar el examen práctico (recuerda que podrás llevarla al examen).

    No merece la pena que te preocupes de tener una redacción muy cuidada: copia y pega órdenes y resultados, describe telegráficamente lo que haces. Vete preparando la memoria a la vez que trabajas, no lo dejes para el final.

    1. Cuando un paso del guión te pida una orden de shell o similar, es recomendable que primero ejecutes la orden y luego copies y pegues en la memoria. Si resulta algún texto, pégalo también.

    2. Cuando el guión pida que escribas o edites un fichero, basta con que lo modifiques en su sitio. No es necesario que copies y pegues en la memoria.

Práctica 1.1. Directorios de las prácticas

  1. Crea el directorio ~/lagrs. Aquí guardarás la mayoría de tu trabajo de prácticas en la asignatura

  2. Ponle permisos rwx------

    Debes mantenerlo así todo el curso. Recuerda que debes ser autor del 100% de tus prácticas y no permitir que ningún compañero tuyo tenga acceso a ningún fragmento.

  3. Crea el directorio

    ~/lagrs/practica01

  4. Crea el fichero

    ~/lagrs/practica01.txt

    Observa que el nombre de este fichero no es

    ~/lagrs/practica01/practica01.txt # ¡Este no es el nombre correcto!

    Por el momento déjalo vacío.

  5. Seguiremos este convenio en todas las prácticas, un directorio para cada práctica y un fichero de texto plano para cada práctica, fichero que cuelga de ~/lagrs

Práctica 1.2. Uso básico de vi

El objetivo de esta práctica es que sepas usar al menos las órdenes elementales de vi. Si no te gusta este editor, podrás usar algún otro editor sencillo en modo texto. Pero para poder instalar un editor nuevo, necesitas usar vi.

  1. Usando vi, crea el fichero ~/lagrs/practica01/ejemplo.txt y escribe en él 4 titulares de cualquier periódico de hoy. Escribe 3 o 4 faltas de ortografía, intencionadamente. Guárdalo.

  2. Vuelva a abrirlo y corrige las faltas.

Práctica 1.3. Uso de un editor sin gráficos

Escribe la memoria de este apartado y de todos los apartados siguientes de esta práctica en ~/lagrs/practica01.txt

Es necesario que manejes con soltura funciones al menos intermedias de algún editor de texto sin gráficos. La recomendación es vi/vim, pero puedes elegir otro.

  1. Lee las transparencias sobre . Arranca al menos una vez los editores en modo texto presentados (vim, mcedit, emacs, joe y nano). Elige uno, para usar en esta asignatura. ¿Cuál has elegido? ¿por qué?. Puedes cambiar de opinión mas adelante, pero en tal caso, indícalo (recuerda que estas prácticas las recogeremos el día del examen).

  2. Es muy conveniente conocer atajos de teclado. Es mucho más eficaz memorizar, por ejemplo, 2 al día durante 5 días que intentar retener 10 atajos 1 día. Aprende unos cuantos de esta forma, al menos media docena, e indícalo aquí. Ejemplo:

    2015.09.24
    Elijo vi porque es el más potente. Practico el copy-paste con yy p
    2015.09.28
    Me coloco en una palabra y pulso asterisco para buscar esa misma palabra
    en el texto. n minúscula para repetir la búsqueda hacia adelante y N mayúscula
    para buscar hacia atrás.
    2015.09.30
    Practico ma, mb, mc para poner las marcas a, b y c en un texto. Vuelvo
    a las marcas con 'a 'b 'c

Práctica 1.4. Uso básico de imágenes

En este apartado empezarás a usar los contenedores. Mientras el enunciado no especifique lo contrario, usa imágenes basadas en Ubuntu.

Para poder usar Docker en el laboratorio, es necesario que ejecutes el script lagrs-docker. Esto configura tu cuenta, basta con que lo hagas una vez en todo el curso.

  1. Crea un contenedor interactivo. No le pongas nombre. Ejecuta alguna orden básica de la shell. Indica alguna orden básica que esté disponible y alguna otra que no.

  2. No detengas el contenedor. Abre un nuevo terminal. Crea otro contenedor interactivo, poniéndole el nombre xxxxc01, donde xxxx son las primeras 4 letras de tu nombre de usuario en el laboratorio. Para jperez, sería jperc01.

  3. En un nuevo terminal, usa las ordenes de docker listar contenedores e imágenes. Explica lo que estás viendo.

  4. Termina la ejecución de los contedores y observa el estado de las imágenes y de los contenedores detenidos.

  5. Comprueba que el sistema de ficheros dentro del contenedor no es persistente.

Práctica 1.5. Creación de una imagen de un contenedor

  1. Crea una cuenta en docker hub.

  2. Prepara la imagen test/banner descrita en las transparencias, pero llámala tulogin/banner siendo tulogin tu nombre de usuario en docker hub

  3. Lanza un contenedor con esa imagen.

  4. Modifica la imagen para que una vez lanzada, no solo muestre el banner sino que abra una shell

  5. Lanza un contenedor con la imagen para comprobar que puedes ejecutar la shell

  6. Sube la imagen a docker hub

Práctica 1.6. Creación de una imagen personalizada

En este apartado prepararás una imagen sencilla de un contenedor. Se llamará <TULOGIN>/cal, y lo único que hará será invocar a la orden de shell cal

para mostrar el calendario del mes actual y concluir.

Vamos a establecer los siguientes convenios, que mantendremos el resto de las prácticas:

Atendiendo a estos convenios,

  1. Prepara la imagen del contenedor solicitado. La utilidad cal está en el paquete bsdmainutils.

  2. Prepara el script lanza_jpercal01.sh y lánzalo.

  3. Prepara el script lanza_jpercal02.sh y lánzalo.

  4. Ejecuta docker ps -a y docker images, y observa que, naturalmente, se puede comprobar que ambos contenedores están basados en la misma imagen.

Práctica 1.7. Montaje bind

En este ejercio prepararás una imagen que cree un contenedor que haga un montaje de tipo bind. En este ejercicio, usarás un único contendor. Siguiendo el criterio establecido en el apartado anterior, y suponiendo que tu usuario sea jperez

Funcionamiento del contenedor:

Prueba del contenedor:

  1. Lanza el contenedor y escribe en el directorio montado un fichero vacío con nombre hola_jperez

  2. Comprueba que es persistente. Esto es, sal del contenedor, vuelve a lanzarlo y observa que el fichero hola_jperez sigue en su sitio.

Práctica 1.8. Puesta en marcha de la máquina virtual

Para que dispongas de una máquina nueva, sin configurar, donde puedas usar órdenes reservadas al superusuario, pondremos en marcha una máquina virtual

Realiza los siguientes apartados:

  1. En el directorio /var/lib/vms/ubuntu.18.04.v01 encontrarás la imágen de una máquina virtual y un fichero leeme.txt. Comprueba, mediante la orden md5sum, que su hash md5 es el mismo que indica el fichero leeme.txt

  2. Crea una máquina virtual llamada pc01 a partir de esta imagen.

  3. Comprueba que puedes abrir una sesión.

  4. Comprueba que desde el guest puedes hacer ping al host.

    Para copiar el resultado de este ping en la memoria de prácticas, llévalo a un fichero de texto dentro del guest y luego usa scp para copiarlo al host.

  5. Haz que la máquina se llame pc01, no solo vista desde fuera, desde VirtualBox, sino también desde dentro de la propia máquina

Práctica 1.9. Montaje de tu directorio del laboratorio mediante sshfs

Ahora configurarás la máquina virtual para que tenga acceso a tu cuenta del laboratorio

  1. Crea en la máquina virtual un usuario con el mismo nombre que tu login en el laboratorio. En lo sucesivo, nos referiremos a tu login (mgarcia, jperez, etc) como tulogin.

  2. Haz que el usuario tulogin tenga privilegios para instalar paquetes en la máquina virtual.

  3. Instala sshfs en la máquina virtual, usando la cuenta tulogin.

    Este paquete no está incluido en el repositorio main, que es el único incluido en el fichero /etc/apt/sources.list de la máquina virtual. Añade el resto de repositorios para tener disponible el paquete sshfs.

  4. Usando privilegios de superusuario, monta tu home del laboratorio en el directorio /home/tulogin de la máquina virtual.

    Hazlo con sudo su. Con sudo sshfs debería funcionar pero por algún motivo, da problemas.

  5. Si no tienes un directorio ~/bin/ en tu host, créalo.

    Comprueba que el directorio ~/bin/ es el mismo en la máquina virtual que en el host (verificando que si escribes un fichero en uno, se ve en el otro).

  6. Ahora crea un usuario en la máquina virtual que no tenga privilegios de root. Llámalo noroot.

  7. Haz que noroot monte el directorio /tmp/ de la máquina remota en el directorio /tmp/remoto de la máquina virtual.

Práctica 1.10. Docker en la máquina virtual

Instala docker en la máquina virtual y pruébalo con un holamundo.

Ejecuta la orden docker images y guarda su resultado

Práctica 1.11. Servidor de contenedores

Haz los ajustes necesario para que el docker de la máquina virtual use el servidor de contenedores de dockerserver.aulas.gsyc.urjc.es.

Necesitarás estar familiarizado con la invocación de la shell, es recomendable que hayas hecho la práctica 2.1.

  1. Toma las credenciales para el dockerserver de tu host del laboratorio.

  2. Para comprobar que estás usando el servidor de contenedores de dockerserver y no el de tu máquina virtual, usa la orden docker images y comprueba que el resultado es el esperado (el mismo que si lanzas esta orden en tu puesto del laboratorio, distinto al resultado del apartado anterior)

  3. Lanza un contenedor cualquiera de los disponibles en dockerserver (que no esté disponible en tu máquina virtual)

Práctica 1.12. Contenedor con fichero hosts

En este apartado prepararás un contenedor preparado para hacer ping y ssh a las máquinas del laboratorio, usando solo el nombre de host, no el FQDN (Fully Qualified Domain Name)

Los puestos físicos del laboratorio a los que se puede acceder por ssh los numerados entre 01 y 05.

Esta imagen se llamará <TULOGIN>/caa (contenedor aa).

Siguiendo el convenio descrito en el apartado anterior:

Para conseguir que los contenedores conozcan las direcciones IP de las máquinas del laboratorio, tendrás que añadir al fichero /etc/hosts de cada imagen las entradas correspondientes al laboratorio, que encontrarás en el fichero /etc/hosts de cualquier puesto.

Para ello

Comprueba que una vez lanzado el contenedor, puedes hacer ping o entrar por ssh en cualquier puesto sin necesidad de escribir el FQDN, esto es, sin añadir al nombre el dominio aulas.gsyc.urjc.es.

Prueba el contenedor también en la máquina virtual.

Práctica 1.13. Conectividad entre contenedores

En este apartado instalarás sshd en un contenedor y probarás la red bridge de Docker.

  1. El nombre de la imagen que crearás será <TULOGIN>/cab

    Como en la práctica anterior, al nombre de cada contenedor le añadirás como prefijo las primeras 4 letras de tu usuario, y como sufijo, un número de dos dígitos.

  2. Al igual que en la práctica 1.12, desde este contenedor debe ser posible acceder por ssh a los puestos del laboratorio sin usar su FQDN. También hacer ping e usar ifconfig.

  3. Lanzarás dos contenedores con esta imagen.

    Por tanto, los nombres de los ficheros necesarios serán:

    ~/lagrs/cab/context/Dockerfile

    ~/lagrs/cab/context/entrypoint.sh

    ~/lagrs/cab/construye.sh

    ~/lagrs/cab/lanza_jpercab01.sh

    ~/lagrs/cab/lanza_jpercab02.sh

  4. Prepara la imagen de forma que el contenedor que la ejecute tenga lanzado el demonio servidor de ssh.

  5. Averigua la dirección IP de cada contenedor

  6. Haz ping entre ambos

  7. Añade un usuario a jpercab01

    Hazlo de forma interactiva, esto es, desde la shell. Elige el nombre y contraseña que quieras.

  8. Abre una sesión desde jpercab02 hasta jpercab01

Revisión de los nombres

Ejecuta el script ~mortuno/revisa practicas lagrs para comprobar que los nombres de los ficheros son correctos.