Maison  >  Article  >  Opération et maintenance  >  Docker et Linux : Comment implémenter la communication réseau entre conteneurs ?

Docker et Linux : Comment implémenter la communication réseau entre conteneurs ?

WBOY
WBOYoriginal
2023-07-28 23:38:091750parcourir

Docker et Linux : Comment implémenter la communication réseau entre conteneurs ?

Citation :
La technologie des conteneurs joue un rôle important dans le développement et le déploiement d'applications modernes. En utilisant la technologie des conteneurs, nous pouvons regrouper l'application et ses dépendances dans un conteneur indépendant, garantissant ainsi la portabilité et la cohérence de l'application. Cependant, lorsque nous devons connecter plusieurs conteneurs pour permettre la communication réseau, la configuration de la communication réseau entre les conteneurs devient très importante. Cet article explique comment implémenter la communication réseau entre les conteneurs dans les environnements Docker et Linux.

  1. Modes réseau dans Docker
    Docker propose quatre modes réseau différents pour prendre en charge la communication réseau du conteneur, à savoir :
  2. Mode pont (bridge) : dans le mode par défaut, le conteneur se connecte au réseau hôte via un pont virtuel.
  3. Mode hôte (hôte) : Le conteneur utilise directement le réseau hôte sans isolation réseau.
  4. mode aucun : Le conteneur n’a pas d’interface réseau et est complètement isolé du réseau externe.
  5. Mode conteneur (conteneur) : les conteneurs partagent un espace de noms réseau et peuvent accéder directement à d'autres conteneurs.
  6. Exemple de communication réseau entre conteneurs
    Ensuite, nous utiliserons un exemple simple pour démontrer comment implémenter une communication réseau entre conteneurs dans des environnements Docker et Linux. Supposons que nous ayons deux conteneurs, l'un est un conteneur Web et l'autre est un conteneur de base de données. Nous espérons que le conteneur Web pourra accéder à la base de données fournie par le conteneur de base de données.

Tout d'abord, nous devons créer un réseau de communication entre les conteneurs. Nous pouvons créer un réseau pont nommé my_network à l'aide de la commande suivante :

$ docker network create my_network

Ensuite, nous devons créer et exécuter le conteneur Web pour fournir des services Web. Nous pouvons utiliser la commande suivante pour créer un conteneur nommé web_container et le connecter au réseau my_network :

$ docker run -d --name web_container --network my_network web_image

Où, web_image est l'image du conteneur Web que nous avons nous-mêmes construite.

Ensuite, nous devons créer et exécuter le conteneur de base de données pour fournir des services de base de données. Nous pouvons utiliser la commande suivante pour créer un conteneur nommé db_container et le connecter au réseau my_network :

$ docker run -d --name db_container --network my_network db_image

Parmi eux, db_image est l'image du conteneur db que nous avons nous-mêmes construite.

Maintenant, nous avons créé deux conteneurs et les avons connectés au même réseau. Ensuite, nous devons nous assurer que le conteneur Web peut accéder à la base de données fournie par le conteneur de base de données.

Dans le conteneur web, nous pouvons utiliser le nom de db_container pour y accéder. Par exemple, nous pouvons utiliser la chaîne de connexion suivante dans le code du conteneur Web pour nous connecter à la base de données :

jdbc:mysql://db_container:3306/my_database

Dans cette chaîne de connexion, db_container est le nom du conteneur de base de données, 3306 est le numéro de port par défaut de la base de données, et my_database est le nom de la base de données.

Grâce aux étapes ci-dessus, nous avons réussi à implémenter la communication réseau entre le conteneur Web et le conteneur de base de données. Le conteneur Web peut accéder au service de base de données fourni par le conteneur de base de données via le nom du conteneur.

Conclusion :
Dans les environnements Docker et Linux, nous pouvons réaliser une communication réseau entre les conteneurs en configurant le mode réseau et en créant un réseau. En configurant correctement les connexions réseau, nous pouvons établir des canaux de communication entre les conteneurs, permettant un déploiement multi-conteneurs et une architecture distribuée des applications.

Exemple de code :

Dockerfile pour le conteneur Web :

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y apache2
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]

Dockerfile pour le conteneur de base de données :

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y mysql-server
EXPOSE 3306
CMD ["mysqld"]

Exemple de code Java dans le conteneur Web :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:mysql://db_container:3306/my_database";
        String user = "root";
        String password = "password";
        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {
            String query = "SELECT * FROM my_table";
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()) {
                System.out.println(rs.getString("column1"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Ce qui précède explique comment implémenter la communication réseau entre les conteneurs dans les environnements Docker et Linux Introduction et des exemples. Avec une configuration réseau et des paramètres de connexion appropriés, nous pouvons facilement communiquer entre les conteneurs et créer des architectures d'applications plus flexibles et évolutives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn