‫Esta sección se centrará exclusivamente en Docker Compose, que es una combinación de una herramienta
‫de línea de comandos y un archivo de configuración. Los requisitos para esta sección son que realmente
‫necesita conocer muchos de los fundamentos de las últimas secciones sobre imágenes y contenedores.
‫A medida que avancemos en este curso, es probable que comiences a escucharme emocionarme
‫más y más porque las cosas mejoran cada vez más.
‫¿Derecha?
‫A medida que aprendes un componente, piensas, 'hombre, unir monturas y volúmenes son realmente geniales. Eso me va a ahorrar algo
‫de tiempo. Me puedo imaginar cómo voy a usar eso. Bla bla bla bla.
‫Luego, voy a venir con lo siguiente que va a ser incluso mejor de lo que acabas de aprender.
‫En este caso, no podría ser más cierto.
‫Docker Compose. ¿Así que qué es lo? Y ¿por qué nos preocupamos? Muy pocos servicios de software son realmente independientes.
‫Cuando piensas en tus contenedores, son una solución de proceso única, y rara vez vamos a usar
‫solo un contenedor para resolver un problema o brindar un servicio a nuestros clientes.
‫Nuestros contenedores a menudo requieren otros contenedores como SQL o un valor clave. Y otras aplicaciones que tendremos que ejecutar en
‫contenedores, como servidores proxy o web front-end o trabajadores de back-end, y así sucesivamente.
‫exponer al público? puertos, y luego girarlos hacia arriba y derribarlos con un comando.
‫¿Qué pasaría si tuviéramos una forma de conectar todas esas piezas de nuestra solución juntas, donde no necesitáramos
‫recordar todas nuestras opciones de ejecución de portón, y luego ponerlas en redes virtuales discretas con relaciones entre ellas,
‫y solo
‫Bueno, eso es Docker Compose.
‫Antes de sumergirnos, tenemos que aclarar que
‫Docker Compose tiene dos partes. La primera parte es el archivo YAML y es súper simple de entender.
‫Está escrito en YAML, y si nunca ha tratado con YAML, ese es un lenguaje de configuración muy fácil.
‫Es casi tan fácil como sería un archivo INI.
‫De hecho, creo que es más fácil porque muestra una jerarquía.
‫Nos sumergiremos en eso. Ese archivo es donde debe especificar todos los contenedores
‫que necesita ejecutar, las redes que necesita, cualquier volumen que pueda necesitar, variables de entorno, imágenes y todo tipo de otras
‫opciones de configuración.
‫Luego, la segunda parte de Docker Compose es una herramienta CLI, que es Docker -compose,
‫que usamos normalmente para solo desarrollo local y prueba, usando ese archivo YAML que creamos para simplificar nuestros comandos Docker.
‫Hablemos de ese archivo Docker Compose.
‫En realidad, hay versiones de las cosas que puedes poner en el archivo de composición. realidad se llamaba "Fig" y se asumió la versión 1.
‫Entonces, cuando Docker Compose se creó hace años, en En realidad, ni siquiera incluyó
‫una versión en el archivo. A medida que se madura y agrega nuevas características
‫a lo que el archivo puede tener, como redes y volúmenes, han creado la declaración de la versión, que
‫en realidad es la primera línea del archivo. Este archivo se puede usar con una CLI Docker Compose, de la que hablaremos
‫en un minuto.
‫Esto es, una vez más, principalmente para la administración de desarrollo local y simplemente facilitando el desplazamiento
‫en sus entornos en su máquina local.
‫Ahora, comenzando a principios de 2017, tenemos la versión 1. pueden usar directamente con la línea de comandos del docker en producción con swarm.
‫13 y cualquier cosa más allá de eso, estos archivos ahora se Por supuesto, hay una gran ayuda en
‫la línea de comandos con --help.
‫Cuando analicemos algunos de los ejemplos, sepa que el archivo Docker Compose es un nombre predeterminado, pero puede
‫usar cualquier nombre de archivo que desee, siempre que sea el YAML adecuado y que use la opción -f para especificar qué archivo
‫desea ' Estoy tratando de usar.
‫Si abro mi editor y miro la plantilla aquí, solo quería mostrar algo del esquema de cómo se
‫supone que debe verse.
‫Tenemos el valor de la versión al principio.
‫La versión más nueva en el primer trimestre de 2017 es 3. 1.
‫Pero siempre lo hago, al menos, la versión 2. Si no agrega esa línea allí, siempre se supone que es la versión
‫1.
‫Pero no lo recomiendo porque pierdes muchas de las características.
‫Así que normalmente comienzo con la versión 2. Entonces, si necesito funciones específicas de la versión 3 y 3. 1, termino escribiendo
‫el número de versión allí. Verá que las otras tres secciones principales
‫son servicios, volúmenes y redes, ¿no?
‫Entonces, esto es jerárquico.
‫En los servicios, todo puede ser de dos o cuatro espacios, pero debe ser coherente.
‫Si solo busca YAML en Internet, encontrará algunos sitios que lo guiarán con los detalles de
‫cómo formatear este archivo.
‫Si está utilizando un editor moderno, en realidad hablará el lenguaje YAML y sabrá cómo manejar
‫estos archivos y su formato.
‫Por lo general, aquí tienes, como mínimo, servicios, que en realidad son solo contenedores.
‫La razón por la que realmente los llaman servicios es porque cada contenedor que creas aquí, en
‫realidad puedes tener varios de esos contenedores para redundancia. necesitaban encontrar una palabra diferente.
‫Entonces
‫Creo que los servicios son geniales porque eso es básicamente lo que estás haciendo. ¿Derecha?
‫Cada contenedor, o contenedores, que son idénticos, que está utilizando generalmente le brindan un servicio
‫a algo.
‫Debajo del nombre del servicio, y nuevamente puedes llamarlo como quieras.
‫No tiene que ser el nombre de la imagen o no tiene que ser nada relacionado.
‫Podría ser Barney para el nombre del servicio, pero será el nombre DNS, que veremos más adelante, que
‫se usa dentro de sus redes Docker.
‫Similar a cuando le das el comando --name to docker run.
‫Aquí, he demostrado que opcionalmente podemos especificar la imagen. Podemos especificar el comando
‫alternativo para ejecutar. Si queremos sobrescribir el comando real que se especificó en la imagen cuando
‫lo ejecutamos, podemos hacer eso aquí.
‫Básicamente, todas las cosas que hacemos desde el docker ejecutan el comando, podemos guardarlas aquí. Porque de eso se trata, se
‫está tomando todo el trabajo de recordar todas las cosas diferentes en el comando docker
‫run para aquellas cosas que está ejecutando constantemente.
‫desarrollo o sus propias herramientas, probablemente no desee escribir esos comandos una y otra vez.
‫Si tiene sus propios entornos de Y los scripts de shell solo pueden hacer mucho.
‫¿Derecha?
‫Por lo tanto, este archivo reemplazaría un script de shell que automatizaría los comandos de ejecución de su buzón.
‫Esta es una forma mucho mejor de hacerlo.
‫Es más fácil de leer y está mejor documentado.
‫Notarás que los espacios aquí están permitidos.
‫Puede tener espacios en los comentarios donde lo desee.
‫Si tenía varios servicios, solo necesita asegurarse de que sean nombres únicos.
‫Entonces, las otras partes que especificamos son volúmenes y redes. Y nuevamente, estos son opcionales también.
‫Básicamente son las mismas reglas que cuando se ejecuta desde la línea de comando.
‫Si alguna vez necesitaras usar el docker volume create o la red de docker crear comandos, y nuevamente,
‫no siempre tienes que hacerlo.
‫Solo depende de tu situación.
‫Puedes ponerlos aquí también.
‫Miremos un mundo real, un ejemplo simple.
‫última sección, tuvimos una conferencia donde usamos Jekyll muy rápido para hacer un ejemplo de montaje de enlace.
‫Recuerdas en la
‫Así que este es el aspecto que tendría el archivo redactado para el comando docker run, y verá que
‫he especificado la imagen aquí.
‫Lo he llamado Jekyll.
‫Le di un volumen. Notarás que en lugar de usar el pwd, Compose realmente entiende el punto, lo que
‫significa que este es el directorio de trabajo actual en el que estoy.
‫Solo use este directorio desde el que estoy ejecutando el archivo de composición. Luego, los puertos o la opción -p.
‫imagen para cada servicio, generalmente sería una clave y un formato de valor como este.
‫Notarás algunas pequeñas cosas sobre YAML, donde cuando algo solo tiene una opción, como si solo hubiera una
‫Si va a ser una lista de elementos, como volúmenes y puertos donde puede tener múltiples, notará que
‫el archivo de composición generalmente tiene un plural. En lugar de volumen, son los volúmenes. Y en lugar de puerto, son puertos.
‫Y luego habrá un formato de lista con un -.
‫Si saltamos a otro ejemplo muy rápido.
‫Verá que en esta, en realidad es
‫una configuración de ejemplo de WordPress donde tiene aquí el servicio de base de datos que ejecuta un
‫contenedor de base de datos.
‫Y luego el contenedor del servidor web de WordPress arriba.
‫Notarás que una pequeña diferencia con respecto a esto es que estamos usando variables de entorno,
‫que serían las mismas que -e en la línea de comando. Pero en lugar de un formato de lista donde
‫tenemos un -, esto
‫es, de nuevo, otra clave y declaración de valor.
‫En este formato, no usamos -, solo enumeramos la clave y el valor.
‫Si tuviera que agregar otro, lo haría aquí. Todos estos se pasarán al contenedor, cuando
‫se ejecute, utilizando la línea de comandos de redacción.
‫Entonces, por último, tenemos un ejemplo más. Este es un poco más complicado. Es uno en el que
‫estuve trabajando recientemente para configurar un clúster de servidores de tres bases de datos detrás de un servidor web Ghost.
‫Ghost es en realidad un sistema de blog similar a WordPress. Verás que tengo múltiples variables de
‫entorno para cada uno de estos contenedores.
‫Así que tengo mi contenedor Ghost arriba. Entonces, en realidad, tengo este hecho conocido como Proxy SQL,
‫que se ubica frente a los servidores MySQL y actúa como una solución de balanceo de carga y conmutación por error.
‫Luego tengo cada uno de mis dos servidores MySQL. Notarás otra opción aquí abajo que dice "depende
‫de" y depende de que es bastante común.
‫Básicamente ayuda a Compose a entender la relación entre estos servicios. Sabe que si necesito comenzar
‫mi Ghost uno, entonces también necesito comenzar otros también.
‫Puedes ver aquí que mi Fantasma realmente depende de estos. Vamos a entrar en los detalles de
‫cómo funciona esto en conferencias posteriores.
‫Pero por ahora, esto es probablemente mucho para digerir, y todos estos comandos diferentes y todo eso, pero confíe
‫en que Docker tiene una gran documentación en su sitio web. Si solo busca el archivo Docker Compose en
‫Google, probablemente lo encuentre con los primeros dos hits.
‫Va a estar debajo de los documentos. estibador. y la opción de valor que tiene.
‫com sitio web, como de costumbre, y va a ser la documentación sobre cada pequeña llave
‫Verás el depende de lo que acabo de mencionar. Verá el entorno aquí donde muestra diferentes formas de
‫poner variables de entorno. Lo bueno de esta documentación es que
‫te da muchos ejemplos.
‫Personalmente, estoy en este sitio todos los días, al igual que estoy en la página de opciones de comando de la ventana acoplable o en la página de
‫opciones de comandos de redacción.
‫Constantemente estoy haciendo referencia a estos porque, francamente, hay tantas características hoy en día que no puedo
‫recordarlos a todos.
‫Así que los mantengo cerca en mis marcadores.
‫Ahora que tenemos una idea general de cómo se vería el formato del archivo de composición, pasemos a
‫la línea de comandos y aprendamos sobre la herramienta Docker Compose CLI.