Tabla de contenido
Introducción
Compose es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Con Compose, usa un archivo Compose para configurar los servicios de su aplicación. Luego, con un solo comando, crea e inicia todos los servicios desde su configuración.
Compose es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Con la combinación, puede utilizar el archivo de combinación para configurar los servicios de la aplicación. Luego, use un solo comando para crear e iniciar todos los servicios desde la configuración.
Podemos logo
ver por lo anterior que, para decirlo sin rodeos, esta cosa es una herramienta (zhang) para administrar contenedores (yu), podemos usarla convenientemente para administrar nuestros docker
contenedores, lo que puede simplificar enormemente las complejas operaciones de la línea de comando.
1. Empiece rápidamente
Si es Mac
o el Windows
usuario usa la versión de escritorio de la Docker
aplicación, se instalará por defecto docker-compose
(reemplazada con dc a continuación), si es así centos
, puede usar el comando para que yum -y install docker-compose
sea demasiado simple y no para explicar demasiado.
Verifique la versión, se puede mostrar para demostrar que la instalación es exitosa
lianying@lianyingdeiMac ~ % docker-compose version
docker-compose version 1.27.2, build 18f557f9
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020
A continuación, tenemos una necesidad, ejecutar un service-a
montaje en /usr/local
, asignar un puerto como 8082
y agregar una servicehost
intranet de asignación de nombres de dominio ip
, muchas personas pueden pensar que debería ser un docker
comando largo
docker run -idt -p 8082:8082 -v /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar --name service-a java sh -c "echo 192.168.1.126 servicehost >> /etc/hosts && java -jar /usr/local/service-a.jar"
Entonces, un gran bulto, parece muy inconveniente, entonces estamos acostumbrados docker-compose
a optimizar el aspecto.
Primero crea un docker-compose.yml
archivo llamado
lianying@lianyingdeiMac SpringBoot01 % touch docker-compose.yml
lianying@lianyingdeiMac SpringBoot01 % ls
docker-compose.yml
Luego, ábralo con un editor de texto y escriba lo siguiente
version: '2'
services:
service-a:
image: java
volumes:
- /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
ports:
- 8082:8082
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-a.jar
¿Esto parece ser mucho más claro? Ejecútelo a continuación.
lianying@lianyingdeiMac SpringBoot01 % docker-compose up -d
Starting springboot01_service-a_1 ... done
-d
Ejecutar en segundo plano; de lo contrario, el registro de ejecución aparecerá en su pantalla. . .
Luego verifique el estado de ejecución
zhangyideMacBook-Pro:jar objcat$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
jar_service- /bin/sh -c echo Up 0.0.0.0:8082->8082/tcp
a_1_5827fa3204e8 192.168.1. ...
Podemos ver que el servicio está en funcionamiento, intentemos visitar
http: // localhost: 8082 / hello
Éxito, esta parte llega a su fin.
2. Ejecute varios servicios
Algunas personas pueden preguntar, ¿cómo funcionan los servicios múltiples? Es muy simple, hagámoslo aquí.
Ahora tengo que hacer es abrir los tres servicios service-a
, service-b
, service-eureka
, respectivamente, dos y un servicio de registro.
Vamos a mejorarlodocker-compose.yml
version: '2'
services:
service-eureka:
image: java
volumes:
- /Users/objcat/jar/service-eureka.jar:/usr/local/service-eureka.jar
ports:
- 8081:8081
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-eureka.jar
service-a:
image: java
volumes:
- /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
ports:
- 8082:8082
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-a.jar
service-b:
image: java
volumes:
- /Users/objcat/jar/service-b.jar:/usr/local/service-b.jar
ports:
- 8083:8083
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-b.jar
Vamos a ejecutarlo
zhangyideMacBook-Pro:jar objcat$ docker-compose up -d
jar_service-a_1_5827fa3204e8 is up-to-date
Creating jar_service-b_1_f7d01c317fab ... done
Creating jar_service-eureka_1_57bb1a079e9b ... done
zhangyideMacBook-Pro:jar objcat$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------
jar_service-a_1_5827fa3204e8 /bin/sh -c echo 192.168.1. ... Up 0.0.0.0:8082->8082/tcp
jar_service-b_1_be87c0458e53 /bin/sh -c echo 192.168.1. ... Up 0.0.0.0:8083->8083/tcp
jar_service-eureka_1_933d5a60af31 /bin/sh -c echo 192.168.1. ... Up 0.0.0.0:8081->8081/tcp
zhangyideMacBook-Pro:jar objcat$
Registro
Visite el servicio-a
Visita servicio-b
¡En este punto ya podemos ejecutar múltiples servicios! ! ! ! Fin de clases--
Expansión de mando
Fuera de servicio
zhangyideMacBook-Pro:jar objcat$ docker-compose stop
Stopping jar_service-eureka_1_933d5a60af31 ... done
Stopping jar_service-b_1_be87c0458e53 ... done
Stopping jar_service-a_1_5827fa3204e8 ... done
Detener un solo servicio
zhangyideMacBook-Pro:jar objcat$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94c3472638c8 java "/bin/sh -c 'echo 19…" 16 minutes ago Up 6 seconds 0.0.0.0:8081->8081/tcp jar_service-eureka_1_933d5a60af31
8d1dfa0ec642 java "/bin/sh -c 'echo 19…" 16 minutes ago Up 6 seconds 0.0.0.0:8083->8083/tcp jar_service-b_1_be87c0458e53
6be5f9d8f423 java "/bin/sh -c 'echo 19…" 33 minutes ago Up 6 seconds 0.0.0.0:8082->8082/tcp jar_service-a_1_5827fa3204e8
zhangyideMacBook-Pro:jar objcat$ docker stop 6be5f9d8f423
6be5f9d8f423
Vuelva a ejecutar el servicio
zhangyideMacBook-Pro:jar objcat$ docker-compose up -d
jar_service-b_1_be87c0458e53 is up-to-date
Starting jar_service-a_1_5827fa3204e8 ...
Starting jar_service-a_1_5827fa3204e8 ... done
zhangyideMacBook-Pro:jar objcat$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94c3472638c8 java "/bin/sh -c 'echo 19…" 19 minutes ago Up 3 minutes 0.0.0.0:8081->8081/tcp jar_service-eureka_1_933d5a60af31
8d1dfa0ec642 java "/bin/sh -c 'echo 19…" 19 minutes ago Up 3 minutes 0.0.0.0:8083->8083/tcp jar_service-b_1_be87c0458e53
6be5f9d8f423 java "/bin/sh -c 'echo 19…" 36 minutes ago Up 13 seconds 0.0.0.0:8082->8082/tcp jar_service-a_1_5827fa3204e8
Podemos ver que docker-compose
reconocerá automáticamente el estado abierto del contenedor y abrirá el que debe abrirse para nosotros.
3. Suplemento de contenido
1. Quizás mucha gente echo 192.168.1.126 servicehost >> /etc/hosts
no me entiende muy bien
Permítanme hablar de ello aquí. El significado de este comando es agregar el servicehost
nombre de dominio al hosts
archivo. El propósito es dejarme eureka
descubrir mi servicio, no escribir la dirección en el archivo de configuración. El servicio correspondiente a este comando se configura como
server:
#服务端口号
port: 8082
spring:
application:
#服务名称 - 服务之间使用名称进行通讯
name: service-objcat-a
eureka:
client:
service-url:
#填写注册中心服务器地址
defaultZone: http://servicehost:8081/eureka
#是否需要将自己注册到注册中心
register-with-eureka: true
#是否需要搜索服务信息
fetch-registry: true
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
management:
endpoints:
web:
exposure:
include: "*"