Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
info:libros:docker-sec-dev-ops:cap2 [29/01/2019 03:46] – [variables de entorno] mateinfo:libros:docker-sec-dev-ops:cap2 [31/01/2019 00:44] (actual) – [ARG] mate
Línia 19: Línia 19:
   * variables de entorno   * variables de entorno
   * ''ENV var=valor''   * ''ENV var=valor''
-  * ''ENV var=valor var2=valor2 var3=$var2''+  * ''ENV var=valor var2=valor2 var3=$var2'' <- produce una única capa de caché 
 +  * ''ENV var valor''
   * se referencian con el signo **$** o **${}**   * se referencian con el signo **$** o **${}**
   * funcionalidades tipo bash:   * funcionalidades tipo bash:
Línia 36: Línia 37:
     * VOLUME     * VOLUME
     * WORKDIR     * WORKDIR
 +  * son de tipo global (afecta a todas las imágenes que desciendan donde fueron definidas)
 +  * también llegan al contenedor
 +  * se pueden sobrescribir con el parámetro **--env** en **docker run**
  
 == .dockerignore == .dockerignore
Línia 99: Línia 103:
     * ENTRYPOINT comando param1 param2 <- comando ejecutado a través de la shell     * ENTRYPOINT comando param1 param2 <- comando ejecutado a través de la shell
   * es posible sobrescribir el ENTRYPOINT de una imagen a través del parámetro **%%--%%entrypoint** en **docker run**   * es posible sobrescribir el ENTRYPOINT de una imagen a través del parámetro **%%--%%entrypoint** en **docker run**
-    * ''docker run %%--%entrypoint "/bin/ls" debian -al /root''+    * ''docker run %%--%%entrypoint "/bin/ls" debian -al /root''
       * -al y /root son parámetros pasados al nuevo **entrypoint**       * -al y /root son parámetros pasados al nuevo **entrypoint**
   * importante que la última instrucción ejecutada por el ENTRYPOINT se convierta en en el proceso con PID 1 del contenedor (a través de la instrucción **exec**) para que reciba las señales Unix enviadas al contenedor.<code bash>   * importante que la última instrucción ejecutada por el ENTRYPOINT se convierta en en el proceso con PID 1 del contenedor (a través de la instrucción **exec**) para que reciba las señales Unix enviadas al contenedor.<code bash>
Línia 112: Línia 116:
 fi fi
 exec "$@"</code> exec "$@"</code>
 +
 +  * como regla general, debemos tener en cuenta:
 +    * cada Dockerfile debe tener definido un CMD o ENTRYPOINT
 +    * cuando queremos usar un contenedor como un fichero ejecutable, debemos usar ENTRYPOINT
 +    * CMD se debería usar para definir los parámetros por defecto para ENTRYPOINT o para ejecutar un comando de apoyo para la creación del contenedor, pero no el comando que ejecuta el proceso final del mismo
 +
 +== LABEL
 +añade metadatos a una imagen
 +  * ''LABEL key=value [key2=value2]''
 +  * se pueden crear varias etiquetas o una única separando valores
 +  * etiquetas con el mismo nombre, prevalece la última
 +
 +== EXPOSE
 +indica puertos y protocolos donde escuchará el contenedor
 +  * con **docker run** podemos mapear los puertos con:
 +    * ''-p host:contenedor''
 +    * ''-P'' : mapea los puertos indicados en EXPOSE a puertos no privilegiados aleatorios
 +    * los contenedores que comparten red, no necesitan mapear puertos, tienen acceso a todos ellos.
 +
 +== ADD
 +copia ficheros, directorios o ficheros remotos al directorio de destino en la imagen docker
 +   * ''ADD <src>... <dest>''
 +   * ''ADD ["<src>",... "<dest>"]'' : obligatorio en el caso de que algún elemento contenga espacios
 +   * origen puede ser absoluto o relativo al contexto
 +     * si es un directorio, copiará el contenido
 +   * destino puede ser absoluto o relativo al WORKDIR
 +     * si acaba en **%%/%%** copia el fichero origen con el mismo nombre
 +   * origen permite caracteres comodín usando las reglas de filepath.Match del lenguaje Go: **%%*%%**, **%%?%%**
 +   * si origen está en un formato de compresión reconocido (gzip,bzip,xz) se descomprime automáticamente en destino
 +     * si origen es una URL a un archivo comprimido, no se descomprime, solo se copia.
 +   * si se especifican múltiples orígenes o comodines, destino ha de ser directorio (y acabar en /)
 +   * si destino no existe, se creará, con los directorios intermedios necesarios
 +   * todos los ficheros y directorios serán creados con UID/GID 0
 +   * en caso de URLs a ficheros remotos, los permisos se establecen a 600
 +     * ADD no tiene sistema de autentificación implementado, se debería usar **RUN**
 +
 +== COPY
 +copiar ficheros y directorios
 +  * ''COPY <src>... <dest>''
 +  * ''COPY ["<src>"... "<dest>"]''
 +  * NO descomprime archivos
 +  * NO copia ficheros remotos
 +  * Permite copiar ficheros entre imágenes ([[info:libros:docker-sec-dev-ops:cap2#multistage|multistage]])
 +    * ''COPY --from=...''
 +
 +== VOLUME
 +crea un punto de montaje con el nombre dado
 +  * ''VOLUME <path> [<path>...]''
 +  * ''VOLUME ["<path>" [, "<path>"]]''
 +  * Los volúmenes se montan en tiempo de ejecución del contenedor
 +  * en ese momento se le puede indicar a Docker donde montarlo:
 +    * con el parámetro ''-v'' o ''--volume'' o ''--mount'' especificando un directorio local
 +    * sin parámetro, ubica el volumen en **/var/lib/docker/volumes/<nombre_volumen>/_data**
 +      * para averiguar el nombre del volumen asociado:<code bash>docker container inspect 76ce590930b0 --format "{{ .Mounts }}"</code>
 +      * en mac, el punto de montaje no está en la máquina Apple, si no en el sistema de ficheros de la máquina virtual que Docker usa por debajo
 +
 +== USER
 +establece el usuario (UID) y grupo (GID) del usuario que ejecuta los comandos de las instrucciones **RUN**, **CMD**, **ENTRYPOINT**
 +  * ''USER <user>''
 +  * ''USER <UID>''
 +  * ''USER <UID>[:<GID>]''
 +  * por defecto se ejecutan como **root**
 +  * se puede usar más de una vez en el mismo **Dockerfile**, aunque se recomienda minimizar su uso por su repercusión en las capas de la imagen
 +  * también se puede usar **sudo**, aunque se desaconseja su uso (por temas relacionados con el envío de señales y la emulación de termianles) -> recomendado **gosu**
 +  * también se puede especificar el usuario en el momento de ejecución del contenedor con el parámetro ''-u'' o ''--user''
 +
 +== WORKDIR
 +establece el directorio de trabajo para los comandos **RUN**, **CMD**, **ENTRYPOINT**, **COPY**, **ADD**
 +  * ''WORKDIR <path>'' <- sin %%/%% final
 +  * el directorio es creado inmediatemente
 +  * pueden ser absolutos (recomendado) o relativos (al último **WORKDIR**)
 +
 +== ARG
 +variables que el usuario puede usar durante el **build** de la imagen
 +  * ''BUILD var=valor''
 +  * también se pueden pasar como parámetro en **docker build** con ''--build-arg var=valor''
 +  * solo sobreviven //en la fase// en las que son definidas
 +  * ENV tiene preferencia sobre ARG
 +  * existe un conjunto de variables definidas:
 +    * HTTP_PROXY, http_proxy
 +    * HTTPS_PROXY, https_proxy
 +    * FTP_PROXY, ftp_proxy
 +    * NO_PROXY, no_proxy
 +    * que tienen las siguientes características:
 +      * se pueden pasar por parámetro al construir la imagen **--build-arg**
 +      * no se incluyen como parte del histórico de capas de la imagen, a menos que se defina explícitamente en **Dockerfile**
 +
 +== ONBUILD
 +trigger que se ejecuta cuando la imagen es usada como base para otra imagen
 +  * ''ONBUILD <instrucción>''
 +  * no se pueden anidar 2 ONBUILD
 +  * se pueden poner varios ONBUILD y serán ejecutados en el mismo orden
 +  * se aplica en el primer nivel "de herencia"
 +  * reutilización de una imagen "base"
 +
 +== STOPSIGNAL
 +define la señal que se enviará al contenedor cuando este se pare
 +
 +== HEALTHCHECK
 +comunicar el estado de un contenedor en tiempo de ejecución
 +  * ''HEALTHCHECK NONE'' : deshabilita **healthcheck** heredados
 +  * ''HEALTHCHECK [OPCIONES] CMD comando''
 +    * opciones:
 +      * ''--interval=ns'' : segundos con los que se ejecuta el comando de chequeo. 30s por defecto
 +      * ''--timeout=ns'' : tiempo de espera para la ejecución del chequeo. 30s por defecto.
 +      * ''--start-period=ns'' : tiempo que necesita el contenedor para arrancar. Los chequeos en este período no se consideran erróneos
 +      * ''--retries=N'' : número de reintentos antes de considerar el contenedor como fallido
 +    * comando:
 +      * comando de terminal o array JSON (como en CMD/ENTRYPOINT)
 +      * el código de salida indica el estado del contenedor:
 +        * 0 - success
 +        * 1 - unhealthy
 +        * 2 - reserved (no usar)
 +      * la salida del comando - en fase de depuración - se puede consultar a través de ''docker container inspect'' (4096 bytes)
 +  * solo puede haber 1 HEALTCHECK en el fichero **Dockerfile**, así que el último prevalece (permitiendo sobreescribir alguno heradado)
 +
 +== SHELL
 +indica que shell será usada por defecto
 +  * ''SHELL ["ejecutable","parámetros"]''
 +  * por defecto:
 +    * LINUX: ''SHELL ["/bin/sh","-c"]''
 +    * WINDOWS: ''SHELL ["cmd","/S","/C"]''
 +  * se puede usar varias veces en el **Dockerfile** y las instrucciones que precisen de un shell usarán el establecido en ese momento
 +  * afecta a **CMD**, **ENTRYPOINT**, **RUN**
  • info/libros/docker-sec-dev-ops/cap2.1548762397.txt.gz
  • Darrera modificació: 29/01/2019 03:46
  • per mate