Buscar..


Parámetros

Parámetro Detalles
--Halar Asegura que la imagen base ( FROM ) esté actualizada antes de construir el resto del Dockerfile.

Construyendo una imagen desde un Dockerfile

Una vez que tenga un Dockerfile, puede construir una imagen a partir de él utilizando la docker build . La forma básica de este comando es:

docker build -t image-name path

Si su Dockerfile no se nombra Dockerfile , se puede utilizar el -f pabellón que suministre el nombre de la Dockerfile para construir.

docker build -t image-name -f Dockerfile2 .

Por ejemplo, para crear una imagen llamada dockerbuild-example:1.0.0 partir de un Dockerfile en el directorio de trabajo actual:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .

Consulte la documentación de uso de docker build la docker build para obtener más opciones y configuraciones.

Un error común es crear un Dockerfile en el directorio de inicio del usuario ( ~ ). Esta es una mala idea porque durante la docker build -t mytag . Este mensaje aparecerá durante mucho tiempo:

Cargando contexto

La causa es que el demonio docker intenta copiar todos los archivos del usuario (tanto el directorio de inicio como sus subdirectorios). Evite esto especificando siempre un directorio para el Dockerfile.

Agregar un archivo .dockerignore al directorio de compilación es una buena práctica . Su sintaxis es similar a los archivos .gitignore y se asegurará de que solo los archivos y directorios deseados se carguen como contexto de la compilación.

Un simple Dockerfile

FROM node:5

La directiva FROM especifica una imagen para comenzar. Se puede utilizar cualquier referencia de imagen válida.

WORKDIR /usr/src/app

La directiva WORKDIR establece el directorio de trabajo actual dentro del contenedor, equivalente a ejecutar cd dentro del contenedor. (Nota: RUN cd no cambiará el directorio de trabajo actual.)

RUN npm install cowsay knock-knock-jokes

RUN ejecuta el comando dado dentro del contenedor.

COPY cowsay-knockknock.js ./

COPY copia el archivo o directorio especificado en el primer argumento del contexto de construcción (la path pasó a docker build path ) a la ubicación en el contenedor especificado por el segundo argumento.

CMD node cowsay-knockknock.js

CMD especifica un comando para ejecutar cuando la imagen se ejecuta y no se da ningún comando. Puede anularse pasando un comando a la docker run .

Hay muchas otras instrucciones y opciones; vea la referencia de Dockerfile para una lista completa.

Diferencia entre ENTRYPOINT y CMD

Hay dos directivas de Dockerfile para especificar qué comando se ejecutará de forma predeterminada en las imágenes integradas. Si solo especifica CMD , la ENTRYPOINT acoplable ejecutará ese comando usando el ENTRYPOINT predeterminado, que es /bin/sh -c . Puede anular cualquiera de los puntos de entrada y / o el comando al iniciar la imagen construida. Si especifica ambos, entonces ENTRYPOINT especifica el ejecutable de su proceso contenedor, y CMD se suministrará como los parámetros de ese ejecutable.

Por ejemplo, si su Dockerfile contiene

FROM ubuntu:16.04
CMD ["/bin/date"]

Entonces está utilizando la directiva predeterminada ENTRYPOINT de /bin/sh -c , y ejecutando /bin/date con ese punto de entrada predeterminado. El comando de su proceso contenedor será /bin/sh -c /bin/date . Una vez que ejecute esta imagen, por defecto imprimirá la fecha actual

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

Puede anular CMD en la línea de comando, en cuyo caso ejecutará el comando que ha especificado.

$ docker run test /bin/hostname
bf0274ec8820

Si especifica una directiva ENTRYPOINT , Docker usará ese ejecutable, y la directiva CMD especifica los parámetros predeterminados del comando. Así que si tu Dockerfile contiene:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

Entonces ejecutarlo producirá

$ docker build -t test .
$ docker run test
Hello

Puede proporcionar diferentes parámetros si lo desea, pero todos se ejecutarán /bin/echo

$ docker run test Hi
Hi

Si desea anular el punto de entrada listado en su Dockerfile (es decir, si desea ejecutar un comando diferente al echo en este contenedor), debe especificar el parámetro --entrypoint en la línea de comandos:

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

Por lo general, usa la directiva ENTRYPOINT para apuntar a la aplicación principal que desea ejecutar y CMD a los parámetros predeterminados.

Exponiendo un puerto en el Dockerfile

EXPOSE <port> [<port>...]

De la documentación de Docker:

La instrucción EXPOSE informa a Docker que el contenedor escucha en los puertos de red especificados en tiempo de ejecución. EXPOSE no hace que los puertos del contenedor sean accesibles para el host. Para hacerlo, debe usar el indicador -p para publicar un rango de puertos o el indicador -P para publicar todos los puertos expuestos. Puede exponer un número de puerto y publicarlo externamente bajo otro número.

Ejemplo:

Dentro de tu Dockerfile:

EXPOSE 8765

Para acceder a este puerto desde la máquina host, incluya este argumento en su comando de docker run :

-p 8765:8765

ENTRYPOINT y CMD vistos como verbo y parámetro

Supongamos que tiene un archivo Docker que termina con

ENTRYPOINT [ "nethogs"] CMD ["wlan0"]

Si construyes esta imagen con una

docker built -t inspector .

inicie la imagen creada con un archivo Docker con un comando como

docker run -it --net=host --rm inspector

, nethogs monitoreará la interfaz llamada wlan0

Ahora, si quieres monitorear la interfaz eth0 (o wlan1, o ra1 ...), harás algo como

docker run -it --net=host --rm inspector eth0

o

docker run -it --net=host --rm inspector wlan1

Empujando y tirando de una imagen a Docker Hub u otro registro

Las imágenes creadas localmente se pueden enviar a Docker Hub o cualquier otro host de repo docker, conocido como registro. Utilice el docker login de docker login para docker login sesión en una cuenta de concentrador de la ventana acoplable existente.

docker login

Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: cjsimon
Password:
Login Succeeded

Se puede utilizar un registro de ventana acoplable diferente especificando un nombre de servidor. Esto también funciona para registros privados o auto alojados. Además, es posible utilizar un almacén de credenciales externo para la seguridad.

docker login quay.io

A continuación, puede etiquetar y enviar imágenes al registro en el que ha iniciado sesión. Su repositorio debe especificarse como server/username/reponame:tag Omitir el servidor actualmente por defecto a Docker Hub. (El registro predeterminado no se puede cambiar a otro proveedor, y no hay planes para implementar esta función).

docker tag mynginx quay.io/cjsimon/mynginx:latest

Se pueden usar diferentes etiquetas para representar diferentes versiones, o ramas, de la misma imagen. Una imagen con múltiples etiquetas diferentes mostrará cada etiqueta en el mismo repositorio.

Use las docker images para ver una lista de las imágenes instaladas instaladas en su máquina local, incluida la imagen recién etiquetada. Luego, presione push para cargarlo en el registro y tire para descargar la imagen.

docker push quay.io/cjsimon/mynginx:latest

Todas las etiquetas de una imagen se pueden extraer especificando la opción -a

docker pull quay.io/cjsimon/mynginx:latest

Construyendo usando un proxy

A menudo, al crear una imagen de Docker, el Dockerfile contiene instrucciones que ejecutan programas para obtener recursos de Internet (por ejemplo, wget para extraer un programa binario construido en GitHub).

Es posible instruir a Docker para que pase las variables de entorno del conjunto establecido para que dichos programas realicen esas recuperaciones a través de un proxy:

$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
               --build-arg https_proxy=http://myproxy.example.com:3128 \
               --build-arg no_proxy=internal.example.com \
               -t test .

build-arg son variables de entorno que están disponibles solo en tiempo de compilación.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow