Esta publicación ilustra tres métodos para vincular contenedores Docker.
Exponer puertos y vinculación de puertos
Exponer puertos
Este método se usa dentro de la misma red o el host de la ventana acoplable. Los contenedores en la misma red pueden comunicarse entre sí a través de sus puertos expuestos y usted puede exponer los puertos mediante uno de los siguientes métodos.
– Coloque EXPOSE 80 (o cualquier puerto que desee) en su Dockerfile que le indicará a Docker que el servicio de su contenedor se puede conectar al puerto 80.
– Exponga un puerto usando '–expose [número de puerto]' desde el contenedor docker por 'ejecutar – exponer [número de puerto]':
# docker run --expose=[port number] test
Asociación de puertos
Este método se utiliza para fuera de la misma red. Para permitir la comunicación a través de los puertos definidos con contenedores fuera de la misma red, debe publicar los puertos usando el indicador -p en Docker Run para publicar y asignar uno o más puertos, o el indicador -P para publicar todos los puertos expuestos y asignar a puertos de alto orden. Puede realizar la portabilidad a través de una de las siguientes formas:
-Exponer un puerto a través de Dockerfile mediante –expose y publicarlo con el -P bandera. Vinculará el puerto expuesto al host de Docker en un puerto aleatorio.
-Exponga un puerto a través de Dockerfile mediante –expose y publicarlo con el -p 21:21 marca, esto vinculará el puerto de exposición al host Docker en cierto puerto 21 con el invitado 21.
– Vincule el puerto mediante el comando de ejecución del contenedor docker:
# docker run -p [port number on docker host]:[port number on container]/tcp -p [port number on docker host]:[port number on container]/udp test
Ejemplo:
# docker run -p 80:80/tcp -p 500:500/udp test
Socket de dominio Unix dentro de un solo host
Para comunicarse entre contenedores dentro de un solo host, puede usar mecanismos IPC en Linux usando el mismo socket. Inicie las dos ventanas acoplables desde el host de la ventana acoplable compartiendo un volumen que debe crearse en la máquina host:
# docker run -d -it --name dvc1 -v /var/tmp:/host oraclelinux:7 /bin/bash # docker run -d -it --name dvc2 -v /var/tmp:/host oraclelinux:7 /bin/bash
Después del comando anterior, el contenedor dvc1 y dvc2 pueden usar sockets como /var/tmp/SocketX a la interconexión.
Utilice el mecanismo de enlace de Docker para configurar un enlace entre contenedores
Docker puede crear un túnel entre dos contenedores mediante el uso de variables de entorno para pasar información del contenedor principal al contenedor secundario. Para crear un enlace, utiliza el –link bandera:
# docker run -itd --name=[child container] --link [parent container] [child container image] /bin/bash
Ejemplo:
-Comprobar la red del contenedor principal:
# docker ps|grep dvc 7d5ad19de678 j_web:v1 "/bin/sh -c '/usr/bi…" 2 days ago Up 5 hours dvc1
# docker exec -it dvc1 /bin/bash # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
-Enlazar los dos nuevos contenedores con el contenedor padre:
# docker run -it --name dvc1_dup1 --rm --link dvc1 j_web:v1 /bin/bash
-Inspeccionar el contenedor vinculado:
# docker inspect -f "{{ .HostConfig.Links }}" dvc1_dup1 [/dvc1:/dvc1_dup1/dvc1]
-Verifique el archivo host del nuevo contenedor, tiene la información del contenedor principal:
# docker exec -it dvc1_dup1 /bin/bash
[root@b56d465976bc /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.4 dvc1 7d5ad19de678 172.17.0.5 b56d465976bc [root@b56d465976bc /]#Advertencia :el indicador –link es una función heredada de Docker. Eventualmente puede ser eliminado. A menos que necesite absolutamente continuar usándolo, le recomendamos que use redes definidas por el usuario para facilitar la comunicación entre dos contenedores en lugar de usar –link. Una característica que las redes definidas por el usuario no admiten y que puede hacer con –link es compartir variables de entorno entre contenedores. Sin embargo, puede usar otros mecanismos como volúmenes para compartir variables de entorno entre contenedores de una manera más controlada.