Para los que empiezan: crear y ejecutar una imagen propia en un contenedor Docker (1/2)

El tema de Docker ha salido ya varias veces por aquí. Y lo sabemos, la primera vez, como todo, es complicado. Así que, antes de seguir leyendo este post, si eres nuevo en el tema, te recomiendo que te leas anteriores post por aquí escritos, familiarizarte con Docker y la terminología, para entender lo que os voy a explicar a continuación.

 
Vamos a ello. Este es un post eminentemente práctico, así que para empezar si no tienes Docker instalado vete haciéndolo, te dejo los links a la instalación para cada uno de los Sistemas Operativos (yo he usado mac):

En esta serie de dos post, os voy a explicar cómo construir una imagen en base a otra que nos proporciona Docker para así crear una versión mejor de esa imagen (una imagen es por decirlo de alguna manera como una captura del estado de un contenedor).

Ejecutar una imagen de Docker

Como vamos a construir una imagen sobre otra ya creada, vamos primero a ejecutar la imagen creada para conocer el funcionamiento. La imagen sobre la que vamos a trabajar se llama a Whalesay (puedes encontrar esta imagen aquí) y es una imagen creada por Docker para tutoriales que se basa en una distribución Linux llamada Ubuntu.
En el Docker Quickstart Terminal, que es el terminal de Docker, tienes que ejecutar el siguiente comando  $docker run Docker/whalesay cowsay boo
En la siguiente imagen podéis ver el resultado de ejecutar este comando.
Captura de pantalla 2015-10-10 a las 22.08.08
La primera vez que se ejecuta una imagen, el comando Docker la busca en el sistema local. Si la imagen no está en local, la obtiene de Docker Hub (de manera muy sintetizada es un repositorio de imágenes), como es este caso.
Como véis en la imagen anterior, nos muestra un ballena con un bocadillo con la palabra boo (la que nosotros hemos puesto en la línea de comandos).
En la siguiente imagen se puede ver una breve explicación de este comando:
Captura de pantalla 2015-10-30 a las 14.10.49
La imagen Whalesay que proporciona Docker, puede ser mejorada. Vamos a construir una nueva versión de esta imagen que “habla por sí sola”. Con la versión mejorada tendremos una ballena mucho más inteligente, dirá sus propias frases (en vez de la que nosotros escribamos por comando) y además la línea de comandos para ejecutar la imagen será más corta.  Así que vamos con ello:

Crear un Dockerfile

Lo primero de todo para crear una imagen, es crearnos un Dockerfile. Un Dockerfile es un archivo de configuración que describe el software que se tiene en una imagen y los distintos comandos para instalar las herramientas necesarias.
Comenzamos creándonos un directorio escribiendo $mkdir mydockerbuild. Este directorio va a contener lo todo lo que necesitamos para construir nuestra imagen.
Captura de pantalla 2015-10-10 a las 22.37.35
Accedemos a este directorio mediante $cd mydockerbuild  y que de momento está vacío.
Vamos a crear un archivo Dockerfile en este directorio escribiendo por línea de comando $touch Dockerfile.
Captura de pantalla 2015-10-10 a las 22.46.31
Este comando lo que hace es crear el Dockerfile en el directorio actual. Ejecutando  el comando $ls podemos verlo.
Ahora, vamos a abrir el fichero usando el comando $open –e Dockerfile, de esta manera abrimos el fichero con el programa TextEdit de Mac. Al abrirlo, vemos que está vacío.
Captura de pantalla 2015-10-10 a las 22.47.50
Escribe en el archivo Dockerfile las siguientes líneas:

  • FROM Docker/whalesay:latest La palabra clave FROM junto al resto de la sentencia, le dice a Docker que nuestra imagen está basada en una suya, que estamos creando nuestra imagen sobre la imagen Whalesay ya existente. Es decir, configura la imagen base que vamos a usar para para crear la nuestra. Con latest, le decimos que use la última versión de la imagen.

 

  • Ahora vamos a añadir el programa “fortunes” a la imagen añadiendo la siguiente línea al Dockerfile: RUN apt-get –y update && apt-get install –y fortunes. El programa “fortunes” tiene un comando que imprime dichos sabios. Así, el primer paso es instalarlo. Esta línea que hemos añadido instala el programa mediante apt –get. El comando RUN ejecuta toda la sentencia instalando así el software que necesitamos.

 

  • Una vez que la imagen tiene el software que necesita, se le indicará el software a ejecutar cuando la imagen sea cargada. Para ello añadimos al Dockerfile la siguiente línea: CMD /usr/games/fortune –a | cowsay. El comando CMD configura comandos por defecto para ser ejecutados. Esta línea le indica al programa “fortunes” dónde enviar sus dichos, en este caso al programa cowsay.

Si quieres saber más sobre los comandos básicos de Docker, te dejo este enlace.
El fichero debe quedar como se muestra en la siguiente imagen.
Captura de pantalla 2015-10-10 a las 23.01.08
En este punto, ya tenemos todo lo necesario, por lo que ya estamos listos para construir nuestra nueva imagen, pero seguiremos en la segunda parte del post.
En la segunda parte del post, os mostraré cómo construir nuestra nueva imagen en base al Dockerfile que hemos creado en este post y cómo ejecutarla.

Javier Garzás

0 comentarios en “Para los que empiezan: crear y ejecutar una imagen propia en un contenedor Docker (1/2)”

  1. Hay un pequeño error en el texto
    «En el Docker Quickstart Terminal, que es el terminal de Docker, tienes que ejecutar el siguiente comando
    $docker run Docker/whalesay cowsay boo»
    El comando correcto es:
    $docker run docker/whalesay cowsay boo
    con la ‘d’ minúscula

  2. Sí, en el texto se me ha escapado la D mayúscula, pero si te das cuenta en la imagen cuando ejecuto docker, está bien escrito.
    No obstante, gracias por el comentario.
    Un saludo

  3. Hola María
    No sé si lo he entendido bien, perdona
    En los equipos cliente tengo instalado un cliente de oracle y un motor de base de datos Delphi. Puede el docker permitirme empaquetarlo para que los usen todos los clientes a la vez

  4. Hola María
    No sé si lo he entendido bien, perdona
    En los equipos cliente tengo instalado un cliente de oracle y un motor de base de datos Delphi. Puede el docker permitirme empaquetarlo para que los usen todos los clientes a la vez
    Gracias

  5. Una consulta,
    yo me baje un ubuntu 16.04, con pull y luego corri la imagen con run.
    Ahora bien, le agregue, git, node, npm, etc.
    Si yo quiero hacer esa imagen publica, un ejemplo seria, o bien guardarla en docker para poder usarla cuando quiera, y probar cosas, que es lo que tengo que hacer, que no entendi bien ?

    1. Hola Alayn, yo he seguido los pasos tal cual en windows, con la excepción de cambiar este comando «open –e Dockerfile» por «notepad.exe dockerfile»

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir arriba