‫Vamos a sumergirnos en el Dockerfile, que en realidad es una receta para crear tu imagen.
‫Hasta el momento, todas las imágenes de Docker que hemos estado utilizando se crearon a partir de archivos Dockerfiles, donde puedes
‫verlas en Docker Hub.
‫Si ha clonado mi repositorio de los recursos enumerados en la primera sección, debería ver un directorio de archivo de
‫muestra docker 1, y allí deberíamos tener solo un archivo. Un archivo Docker.
‫Vamos a ir línea por línea y hablar sobre estas diferentes estrofas. Un archivo Docker parece un script de
‫shell, pero no lo es.
‫No es un archivo por lotes, no es un script de shell. nombre predeterminado es Dockerfile con una D. mayúscula.
‫Es un lenguaje de archivo totalmente diferente que es exclusivo de Docker y el
‫Pero, desde la línea de comandos, siempre que necesite tratar con un Dockerfile utilizando
‫el comando docker, puede usar el guión f. Lo cual es realmente común entre muchas herramientas con Docker,
‫puedes usar dash f para especificar un archivo diferente al predeterminado.
‫Entonces, primero es el comando desde. El comando from está en cada Dockerfile. Se requiere estar allí.
‫Normalmente es una distribución mínima.
‫En este caso es Debian.
‫Pero muchas veces hoy va a ser Alpine.
‫Y realmente, la razón por la que usarías esto es para ahorrarte tiempo y dolor. Porque estas distribuciones mínimas son mucho más
‫pequeñas que los CD que usarías para instalar una máquina virtual.
‫Por ejemplo, el Ubuntu uno ni siquiera tiene cURL, mientras que, obviamente, si instaló una instalación completa
‫de Ubuntu en una máquina virtual, tendría cURL y una gran cantidad de otros comandos ya instalados.
‫Debido a que todas estas distribuciones son imágenes oficiales, significa que siempre estarán actualizadas con
‫los últimos parches de seguridad y usted puede confiar y confiar en ellas.
‫Y uno de los principales beneficios de usarlos en contenedores es utilizar sus sistemas de distribución de paquetes para
‫instalar el software que necesita en su paquete.
‫En este caso, en realidad estamos usando la versión de Jessie, que es lo que está después del colon.
‫Y, como recuerdas de nuestra conversación de Docker Hub, hay muchas opciones diferentes que puedes especificar
‫aquí para el repositorio de Debian.
‫A continuación, tenemos la estrofa ENV y ENV es para variables de entorno.
‫Es una forma de establecer variables de entorno, que en realidad son muy importantes en los contenedores
‫porque son la principal forma en que establecemos las claves y los valores para la construcción de contenedores y para el manejo de contenedores.
‫En este caso, en realidad está configurando la versión de Nginx que nos gustaría que instalemos y esta
‫variable de entorno se configurará para que cualquier línea subsiguiente pueda usarla.
‫Ahora, como recordatorio de conferencias previas, cada una de estas estrofas es una capa real en nuestra
‫imagen Docker.
‫Entonces, el orden de ellos realmente importa, porque funciona de arriba hacia abajo.
‫Como verá por este comando de ejecución relativamente larga aquí para el próximo. Verás que parece un
‫comando largo.
‫Lo que hace es simplemente ejecutar comandos de shell dentro de este contenedor mientras lo está
‫construyendo.
‫repositorio de paquetes, o necesite realizar alguna descompresión o algunas ediciones de archivos dentro del propio contenedor.
‫Por lo general, verá los comandos de ejecución cuando necesite instalar software con un
‫Los comandos de ejecución también pueden ejecutar scripts de shell que haya copiado anteriormente en el archivo o cualquier comando
‫al que pueda acceder desde el
‫contenedor en ese momento en el archivo.
‫Como venimos de Debian, este comando de ejecución tiene acceso a todos los comandos y binarios que
‫se habrían instalado con esa versión.
‫Y en este caso para Nginx, esta lista de comandos agrega más o menos una clave al repositorio
‫donde puede obtener el paquete para instalar el último Nginx del repositorio oficial de Nginx.
‫Hay algunas cosas aquí que son realmente clave para hacer buenos archivos de Docker y hablaremos de
‫esto más en una sección posterior donde hablamos sobre las mejores prácticas.
‫Pero dos cosas para notar
‫La razón por la que estamos agregando todos estos comandos con el doble ampersand aquí, para que
‫estén encadenados uno detrás de otro, es porque, si lo recuerdas, cada estrofa es su propia capa.
‫Lo que hace es asegurar que todos estos comandos se ajustan en una sola capa.
‫Nos ahorra un poco de tiempo.
‫Nos ahorra espacio Y es tan común que probablemente lo veas en cada Dockerfile en Docker Hub.
‫De acuerdo, en la línea 27 tenemos otro comando de ejecución.
‫Esta es una cuestión de señalar nuestros archivos de registro a la
‫stdout y al stderr.
‫Veremos más adelante, la forma correcta de iniciar sesión dentro de un contenedor es no iniciar sesión en un archivo de registro. Y no hay syslogd ni ningún
‫otro servicio syslog dentro de
‫un contenedor. Docker realmente maneja todos nuestros registros para nosotros. Todo lo que tenemos que hacer
‫dentro del contenedor es asegurarnos de que todo lo que queremos que se capture en los registros se escupe a
‫stdout y stderr y docker se encargarán del resto.
‫De hecho, hay controladores de registro que podemos usar en el propio Docker Engine para controlar todos los registros
‫de todos los contenedores en nuestro host.
‫Y eso es realmente lo que quieres hacer con ellos.
‫Agrega más complejidad a su aplicación si su aplicación realmente está haciendo el registro.
‫Y luego, si tiene que ocuparse de los archivos en cada contenedor, ahora tiene un
‫problema de cómo sacar esos archivos, buscarlos y acceder a ellos. Aquí, tomamos los registros de Nginx predeterminados y en realidad
‫los estamos vinculando a la salida estándar.
‫Para que Docker pueda capturarlos.
‫También tenemos un comando de exposición.
‫De manera predeterminada, no hay puertos TCP o UDP
‫abiertos dentro de un contenedor. No expone nada del contenedor a una red virtual a menos que
‫lo listemos aquí.
‫Y, por supuesto, como se trata de un servidor web y proxy, expondrá 80 y 443.
‫Ahora, este comando de exposición no significa que estos puertos se abrirán automáticamente en nuestro host.
‫Eso es lo que es el comando P del tablero cuando utilizamos la ejecución de Docker.
‫Por último, tenemos el CMD aquí. imagen, o cada vez que reinicie un contenedor detenido.
‫El CMD es un parámetro obligatorio que es el comando final que se ejecutará cada vez que ejecute un nuevo contenedor desde la
‫Existe documentación realmente excelente sobre todas estas estrofas, y mucho más, que veremos más adelante, en el sitio web
‫de documentación Docker en Docs. estibador. com, que
‫puedes encontrar en los recursos de esta conferencia.
‫De acuerdo, entonces estos son los conceptos básicos, ¿verdad? Estas cinco estrofas diferentes son bastante normales en cada archivo Docker.
‫Algunos de ellos son obligatorios
‫Algunos de ellos, como la ejecución y el ENV, y la exposición, son opcionales, pero son bastante típicos para la mayoría de
‫los contenedores para los que creará imágenes.