Construcción Dockerfile utilizando el proceso de creación de reflejos y de construcción, la instrucción funcionamiento detallado

Construcción de los tres métodos de reflejo

Acoplable reflejo de la construcción de tres maneras, se basa en la construcción de espejo existente, construida sobre una plantilla para construir el local y basada Dockerfile.

En este artículo se trata principalmente de la construcción de espejos por Dockerfile.

¿Cuál es Dockerfile?

Dockerfile archivo de texto se utiliza para construir un espejo, el texto contiene instrucciones e instrucciones necesarias para construir una imagen del artículo, en el que cada instrucción correspondiente a un comando en Linux, el programa lee el estibador de generación de órdenes Dockerfile especifica una imagen.

Dockerfile estructura más o menos dividido en cuatro partes: la información de la imagen de base, realice un mantenimiento de información, instrucciones y contenedores de imagen de inicio de comando . Cada soporte de una fila de instrucciones Dockerfile, con cada instrucción puede ser una pluralidad de parámetros, apoya el uso de números que comienzan con # comentario.

A Dockerfile ejemplo:

#基于centos镜像
FROM centos

#维护人的信息
MAINTAINER The CentOS Project <[email protected]>

#安装httpd软件包
RUN yum -y update
RUN yum -y install httpd

#开启80端口
EXPOSE 80

#复制网站首页文件至镜像中web站点下
ADD index.html /var/www/html/index.html

#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh

#当启动容器时执行的脚本文件
CMD ["/run.sh"]

Operación de la instrucción del estibador

DE comando RUN y

DESDE : DESDE imagen personalizada se basa en un espejo, centos personalizada es necesaria imagen de base aquí. Las operaciones subsiguientes son centos base.

RUN : se utiliza para ejecutar los comandos de línea de comandos siguió. Hay dos formatos:

formato shell:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

Formato ejecutivo:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

Nota : la instrucción Dockerfile se ejecutará una vez por cada nueva capa en la ventana acoplable. Tanto la capa de sentido hará que la expansión de la imagen es demasiado grande. Por ejemplo:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"\
    && tar -xvf redis.tar.gz

En cuanto a la instrucción && enlace simbólico ejecutado después de esto, sólo para crear una capa de espejo.

Iniciar la construcción del espejo

En el archivo Dockerfile directorio de almacenamiento, ejecutar la acción de generación.

En el siguiente ejemplo, construido por un centos Dockerfile directorio: prueba (nombre de la imagen: Etiqueta de espejo).

Nota : final . En nombre de la ruta de contexto de ejecución.

docker build -t centos:test .

ruta de contexto

En uno, el último mencionado instrucciones. Es la ruta de contexto, entonces ¿cuál es el contexto de la ruta que?

docker build -t centos:test .

medios de recorrido contexto en la construcción de la imagen cargador de muelle, a veces quieren utilizar el archivo en la máquina (como copiar), comando ventana acoplable generación que este camino, todo el contenido será empaquetado en el camino.

Analítica : Desde el modo de operación de ventana acoplable es la C / S. Nuestra máquina es C, motor de ventana acoplable es S. El proceso de construcción actual se hace debajo del motor cargador de muelle, así que esta vez no podemos usar el archivo de la máquina. Esto tiene que ser empaquetado con los archivos en el directorio especificado a disposición de nuestro motor de ventana acoplable nativa.

Si el último argumento no especificado, la ruta de contexto por defecto es el lugar donde el Dockerfile.

Nota : No se ponga ruta de contexto archivos inútiles, como será empaquetado juntos para enviar motor de estibador, si hay demasiados archivos pueden causar proceso lento.

Las instrucciones detalladas

instrucción significado
desde el espejo Especifica la nueva imagen se basa en un espejo, la primera instrucción debe ser
nombre MAINTAINER La nueva información espejo mantenedor
comando RUN Ejecutado sobre la base del comando de simetría, y presentar al nuevo espejo
EXPONER número de puerto Especifique la nueva imagen para la carga cuando el número de puerto para abrir acoplable
los valores de variables variables de entorno ENV Establecer un valor de variable de entorno, se utilizará más adelante en RUN
Añadir fuente de archivo de destino archivo / directorio / directorio Copiar el archivo de origen en el archivo de destino, el archivo de origen en la ventana acoplable en el mismo directorio, o una URL
COPIA archivo de origen / destino de directorio de archivos / directorio Copiar el archivo de origen en el host / directorio local en el sitio de destino, los archivos de origen / directorios a estar en el mismo directorio bajo el Dockerfile
VOLUMEN [ "directorio"] Crear un punto de montaje en el contenedor
USUARIO nombre de usuario / UID Cuando el usuario ejecuta el contenedor especificado
ruta WORKDIR Para ejecución posterior, CMD, EntryPoint especificar el directorio de trabajo
comando ONBUILD

El comando especifica la imagen generada como base para ejecutar la duplicación

El CMD [ "programa para ser ejecutado", "parámetro 1", "2 parámetro"] Especificar un comando o secuencia de comandos para ejecutar en el contenedor de arranque, solamente un comando CMD, sólo la última se ejecuta cuando el número de

COPIAR

Copia de instrucciones, copiar el archivo desde el directorio de contexto o directorios especificados en la ruta de acceso al contenedor.

formato:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[--Chown = <usuario>: <Grupo>] : parámetros opcionales, cambie la copia de usuario para el propietario del recipiente y es un grupo de archivos.

<Ruta de origen> : archivo de origen o fuente de directorios, donde puede ser una expresión comodín que reglas comodín para cumplir con las normas filepath.Match Go. Por ejemplo:

COPY hom* /mydir/
COPY hom?.txt /mydir/

AÑADIR

comando ADD impresa y en formato consistente para el uso (la misma demanda, la copia recomendada oficial). Funcionan de forma similar, excepto por lo siguiente:

  • ADD ventajas de: realizar <origen> se comprime el archivo tar, formato de compresión, copiado y el extracto a <ruta de destino> para la próxima, y ​​donde xz de bzip2 gzip automáticamente.
  • Deficiencia de ADD: sin descompresión, los archivos tar comprimidos no se pueden copiar. Reflejado invalidación de caché hará que el edificio, lo que puede conducir a la creación de imagen se vuelve lento. Específicamente si se debe utilizar, se puede determinar de acuerdo a si la descompresión automática.

CMD

comando similar RUN para ejecutar programas, pero los dos diferentes puntos de tiempo de ejecución:

  • CMD ejecuta cuando es ejecutado ventana acoplable.
  • RUN es una acumulación ventana acoplable.

Papel : designado como el contenedor predeterminado comienza a ejecutar el programa, el final del programa, el contenedor será de más. comando CMD designa ejecución del programa cargador de muelle puede ser especificado en los parámetros de línea de comandos para ejecutar el programa cubierto.

Nota : Si Dockerfile Si hay más de comando CMD, sólo el último funcionará.

formato:

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

Se recomienda el segundo formato, el proceso de implementación es relativamente clara. El primer formato es en realidad la segunda pasada se convertirá automáticamente al formato durante la carrera, el archivo ejecutable y el valor predeterminado es sh.

PUNTO DE ENTRADA

comando CMD es similar, pero no va a ser estibador parámetro de línea de comando de arranque para especificar las instrucciones cubiertos, y estos parámetros de línea de comandos se especifica como un parámetro para el programa de instrucción de punto de entrada.

Sin embargo, usando la opción --entrypoint cuando se ejecuta plazo estibador, esta opción se puede utilizar como parámetros para ejecutar un programa que cubre las instrucciones del punto de entrada del programa especificados.

Ventaja : puede especificar los parámetros de punto de entrada requerido ejecutar en la implementación de la carrera ventana acoplable.

Nota : Si Dockerfile Si hay más de instrucción de punto de entrada, sólo la última funcionará.

formato:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

Con el comando CMD se puede utilizar: generalmente sólo uso se está convirtiendo en una referencia CMD, CMD equivale en este documento EntryPoint para pasar parámetros, se mencionarán los siguientes ejemplos.

Ejemplo:

Ha sido construido por el supuesto Dockerfile nginx: imagen de la prueba:

FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

1, no deje pasar parámetros a RUN

 docker run  nginx:test

Ejecute el siguiente comando por defecto en un recipiente en el proceso principal.

nginx -c /etc/nginx/nginx.conf

2, la operación paso de parámetros

docker run  nginx:test -c /etc/nginx/new.conf

Ejecute el siguiente comando por defecto en un recipiente en el proceso principal (/etc/nginx/new.conf: Este documento se ha asumido que el contenedor)

nginx -c /etc/nginx/new.conf

ENV

Establezca las variables de entorno, definir la variable de entorno, entonces la instrucción posterior, puede utilizar esta variable de entorno.

formato:

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

El siguiente ejemplo se proporciona NODE_VERSION = 7.2.0, en las instrucciones subsiguientes $ NODE_VERSION por referencia:

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

ARG

los parámetros de construcción, en consonancia con el papel ENV. Sin embargo, el alcance no es el mismo. ARG variables de entorno ajuste dentro Dockerfile sólo es válido, que sólo es eficaz en el proceso de acumulación ventana acoplable, construir esta variable de entorno no está presente en la imagen buena.

comando de generación ventana acoplable construcción puede ser utilizado --build-arg <nombre de parámetro> = <valor> cubierta.

formato:

ARG <参数名>[=<默认值>]

VOLUMEN

La definición de los volúmenes de datos anónimos. Olvide cuando se inicia un contenedor montado volúmenes de datos se montan automáticamente volúmenes anónimos.

papel:

  • Evitar los datos importantes, perdidos debido a la reanudación del contenedor, que es muy mortal.
  • Evitar que el recipiente se vuelve más y más grande.

formato:

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

Contenedores Döcker ejecutan en el arranque, podemos modificar el punto de montaje por el parámetro -v.

EXPONER

Sólo declarar puerto.

papel:

  • La duplicación de puertos para ayudar a los usuarios a entender el guardián de este servicios de imágenes para facilitar la asignación de configuración.
  • En tiempo de ejecución cuando se utiliza la asignación de puertos al azar, es decir, cuando estibador de ejecución -P, se va a proyectar automáticamente EXPONGA puerto aleatorio.

formato:

EXPOSE <端口1> [<端口2>...]

WORKDIR

Especificar el directorio de trabajo. WORKDIR trabajo con el directorio especificado existirá en cada edificio capa de espejo. (WORKDIR directorio especificado, se debe crear un avance bueno).

Construcción proceso de construcción espejo estibador, cada nueva capa es comando RUN. Sólo directorio será creado por WORKDIR siempre existió.

formato:

WORKDIR <工作目录路径>

USUARIO

Se utiliza para especificar los usuarios y grupos de usuarios ejecutar comandos posteriores, pero aquí la posterior cambio de usuario de comandos (usuarios y grupos de usuarios debe existir de antemano).

formato:

USER <用户名>[:<用户组>]

CHEQUEO DE SALUD

Se utiliza para especificar un programa o comando para controlar el estado servicios de contenedores ventana acoplable operacionales.

formato:

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

ONBUILD

Para retrasar la ejecución del edificio de mando. En pocas palabras, hay Dockerfile con ONBUILD comando especificado en el proceso de construcción de este espejo no se ejecutará (suponiendo que el espejo es prueba de acumulación). Cuando un nuevo uso Dockerfile reflejado por la construcción de pruebas y construcción antes, esta es la aplicación de la nueva imagen del tiempo Dockerfile para construir, llevará a cabo la prueba Dockerfile construyeron a partir de ONBUILD en el comando especificado.

formato:

ONBUILD <其它指令>

 

Publicados 109 artículos originales · ganado elogios 101 · vistas 360 000 +

Supongo que te gusta

Origin blog.csdn.net/Alen_xiaoxin/article/details/105120408
Recomendado
Clasificación