Usuario:ManuelRomero/Docker/dockerFile

De WikiEducator
Saltar a: navegación, buscar


DokerFile

  • Es un fichero de texto que va contener una serie de instrucciones a partir de las cuales vamos a crear una imagen.
  • El fichero tiene un formato concreto, con una serie de instrucciones que veremos a continuación. Al menos es necesario utilizar la instrucción FROM para especificar la imagen base a partir de la cual queremos construir nuestra imagen personalizada, que es el objetivo de la especificación de este fichero

(Comment.gif: La idea es que partiendo de una imagen, personalicemos la imagen que queremos crear, después, a partir de esta imagen, levantaremos el contenedor)


  • Una vez que tengamos el contenido del fichero construiremos la imagen a través del comando docker build [opciones] PATH|URK|-
El nombre del fichero
  • El nombre del fichero puede ser cualquiera, pero se recomienda que sea DockerFile, En caso de que se establezca otro nombre, habrá que especificarlo cuando se invoque a la instrucción build
docker build -f nombre_fichero .

Instrucciones

   FROM: Establece la imagen base a partir de la cual se va a construir la imagen personalizada.
   RUN: Ejecuta un comando en la imagen durante la construcción.
   CMD: Especifica el comando predeterminado que se ejecutará cuando se inicie un contenedor a partir de la imagen.
   LABEL: Añade metadatos a la imagen.
   EXPOSE: Especifica un puerto o puertos que deben abrirse en el contenedor cuando se ejecuta.
   ENV: Establece una variable de entorno en la imagen.
   ADD: Copia archivos desde el host a la imagen.
   COPY: Copia archivos desde el contexto de construcción a la imagen.
   ENTRYPOINT: Especifica el programa que se ejecutará cuando se inicie un contenedor a partir de la imagen.
   VOLUME: Crea un punto de montaje en el contenedor.
   USER: Especifica el usuario o el grupo de usuarios que se utilizarán para ejecutar los comandos en el contenedor.
   WORKDIR: Establece el directorio de trabajo predeterminado para los comandos RUN, CMD, ENTRYPOINT, COPY y ADD.
   ARG: Declara un argumento que puede pasarse a la imagen durante la construcción con el parámetro --build-arg.
FROM
  • Establece la imagen a partir de la cual partimos. Si por ejemplo, nuestro contenedor va a ejectuar un servidor web, deberíamos de partir de una imagen ngynx o http. conviene buscar la imagen de la que partamos en docker hub
 FROM ubuntu:latest
  • Esta instrucción es obligatoria y debe de ser la primera
  • Si creamos la imagen a partir de este fichero de especificación, crearemos una imagen a partir de ubuntu:latest. Para ejecutar las instrucciones del fichero docker file usamos el comando build como se ha comentado anteriormente

Comando build.png

  • Una vez que establecemos la imagen a partir de la cual queremos partir, con las instrucciones siguiente vamos a personalizar nuestra imagen.



RUN
  • Esta es una instrucción muy importante y muy utilizada. Con ella vamos a poder ejectutar acciones o instrucciones en la imagen durante su construcción
  • Es importante tener en cuenta que durante la construcción de la imagen, es posible que no se pueda interactuar mediante el teclado, por lo que si la acción requiere que facilitemos algún valor o seleccionemos alguna opción, hay que preverlo y establecerlo previamente.
  • Podremos ejecutar cualquier comando, siendo habituales:
1.-Instalar paquetes
 RUN apt-get update && apt-get  install -y  \
 git \
 zip \
 php

Se podrían poner varias instrucciones RUM como se muestra a continuación, pero es mucho menos eficitente y tardaría más tiempo. Se separan por espacios:

 RUN apt-get update
 RUN apt-get  install -y git
 RUN apt-get  install -y zip
 RUN apt-get  install -y php
  1. Ejecutar script, previamente creados
 RUN bash nombre_scrip.sh
  1. Ejecutar comandos de administración
 RUN mkdir -p /var/www/app && chown -R www-data:www-data /var/www/app
  1. Ejecutar comandos de instalación de paquetes específicos (p.e. de php con composer)
 RUN composer install --no-scripts --no-autoloader
  • Para evitar que las diferentes instrucciones soliciten información durante el proceso de ejecución podemos:
  • 1.- ;Establecer una variable de entorno que especifique que no queremos interactuar
 ENV DEBIAN_FRONTEND noninteractive
  • 2.-;Opción --non-interactive del comando apt-get
puedes utilizar la esta opción en el comando concreto para evitar que nos hagan preguntas
  • 3.-:Opciones para forzar que no haya preguntas o que responda una valor por defecto
Utilizar otras opciones del comando apt-get, como --force-confdef,--force-confold o --force-yes, para forzar la instalación de los paquetes sin mostrar mensajes o preguntas al usuario.
  • 4.-;Establecer el valor de la variable esperado.
    • Por ejemplo en la instalación de php, nos pide que establezcamos la zona horario, la podrías establecer previamente en este caso usando la variable --timezone
 RUN apt-get update && apt-get install -y 
    --no-install-recommends --no-install-suggests 
    --timezone Europe/Madrid php
CMD
LABEL
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ARG