Voici le résultat lorsque je tape docker ps
:
dans docker, j'ai 3 conteneurs, webapps, redis et rabbitmq, je ne comprends pas comment lier les webapps de conteneur à conteneur redis et conteneur rabbitmq? , dans les applications non fixes, mywebapps peut envoyer un message à rabbitmq et écrire/lire reddis. Je n'ai toujours aucune idée de la façon de relier ces 3 conteneurs, j'ai essayé d'utiliser une commande comme celle-ci
docker run --name rabbitmq -p 8080:80 --link webapps:nimmis/Apache-php7 -d rabbitmq
mais ça ne marche toujours pas
voici mon config.php sur webapps quand j'essaye d'envoyer des messages via rabbitmq
define('Host', 'localhost');
define('PORT', 5672);
j'ai essayé de changer de localhost avec hostname
define('Host', 'rabbitmq');
define('PORT', 5672);
messages d'erreur est la connexion refusée .... il semble que dans mes trois conteneurs doit configurer/mapper/lier le réseau dans la même adresse IP?
La liaison est une fonctionnalité héritée . Veuillez utiliser "réseaux définis par l'utilisateur":
Sudo docker network create mynetwork
Ensuite, réexécutez vos conteneurs en utilisant ce réseau:
Sudo docker run --name rabbitmq -p 8080:80 -d --network mynetwork rabbitmq
Faites de même pour les autres conteneurs que vous souhaitez connecter les uns aux autres.
En utilisant des "réseaux définis par l'utilisateur", vous disposez d'une "résolution de nom interne" (un peu comme la résolution de nom de domaine lors de la visite de sites Web). Vous pouvez utiliser les noms du conteneur auquel vous souhaitez faire référence, afin de résoudre les adresses IP des conteneurs, tant qu'ils s'exécutent sur le même "réseau défini par l'utilisateur". Avec cela, vous pouvez résoudre l'adresse IP du conteneur rabbitmq
avec son nom, au sein d'autres conteneurs, sur le même réseau.
Tous les participants du même "réseau défini par l'utilisateur" auront une connectivité réseau. Il n'y a pas besoin de "liens hérités".
Pour les dépendances et les liens entre les conteneurs, vous voudrez utiliser docker-compose
où vous pouvez définir les liens links entre les conteneurs.
Dans votre répertoire racine où vous stockez vos fichiers Docker, créez un nouveau fichier appelé docker-compose.yml
et définissez ici vos conteneurs en tant que services s'appuyant les uns sur les autres, comme suit:
version: '2'
services:
webapps:
build: .
links:
- "rabbitmq:rabmq"
- "redis"
rabbitmq:
image: rabbitmq
redis:
image: redis
dans la définition du service webapps
, vous voyez donc links
les deux autres services rabbitmq
et redis
. Cela signifie que lorsque le conteneur webapps
est construit, une entrée dans son fichier hosts
est créée de sorte que le nom de domaine redis
soit traduit en IP et le numéro de port du conteneur actuel.
Vous avez la possibilité de modifier le nom de l'adresse de ce conteneur à l'aide de la notation service:alias
, comme dans le cas de la définition de rabbitmq
en Utilisez l'alias rabmq
à l'intérieur du conteneur webapps
.
Pour maintenant construire et démarrer vos conteneurs en utilisant docker-compose
, tapez simplement:
docker-compose up -d
Donc, se connecter à un autre conteneur est aussi simple que d'utiliser cet alias comme nom de l'hôte.
Puisque vous utilisez docker-compose
dans ce cas, un réseau de docker est automatiquement créé pour connecter tous les conteneurs. Vous ne devriez donc pas avoir à vous en préoccuper. Mais pour plus d'informations, consultez la documentation: https://docs.docker.com/compose/networking/#/specifying-custom-networks
Vous devez lier rabbitmq et redis au conteneur de votre application Web et non l'inverse.
#run redis container docker run --name some-redis -d redis #run rabbitmq container docker run -d --hostname my-rabbit --name some-rabbit rabbitmq Contient #run webapps docker run --name webapps -p 8080: 80 --lien une-redis: redis - un peu lapin: rabbitmq nimmis/Apache-php7
Première utilisation des conteneurs redis et rabbitmq. Ensuite, exécutez le conteneur webapps avec des liens vers les 2 conteneurs.
Maintenant, il est facile de configurer Redis Host dans les applications Web. Vous pouvez simplement utiliser la variable env 'REDIS_PORT_6379_TCP_ADDR'. Parce qu'une fois qu'un conteneur est lié, vous obtenez ses variables env. et redis exporte cette variable .
En ce qui concerne l'hôte rabbitmq - vous pouvez obtenir l'adresse IP une fois le conteneur de lapin installé:
RABBITMQ_IP = $ (docker inspect --format '{{.NetworkSettings.IPAddress}}' un-lapin)puis transmettez-le dans --env lorsque vous exécutez le conteneur webapps .
D'après mon expérience de travail avec des déclaratives tels que docker-compose.yml, ça va, mais vous pouvez simplement utiliser
docker run -d -P -link nimmis/Apache-php7 rabbitmq redis
Vous pouvez définir vos services pour utiliser un réseau défini par l'utilisateur dans votre docker-compose.yml
version: "3"
services:
webapps:
image: nimmis/Apache-php7
ports:
- "80:8080"
networks:
- my-network
rabbitmq:
image: rabbitmq
networks:
- my-network
redis:
image: redis
networks:
- my-network
networks:
my-network:
driver: overlay
Alors fais:
docker swarm init
docker stack deploy -c docker-compose.yml my-stack
Découvrez l’exemple complet à l’adresse https://docs.docker.com/get-started/part3/