sql >> Database teknologi >  >> NoSQL >> Redis

Kommunikation mellem to Docker-containere på macOS 10.12

Hver container har sin egen lokale vært

Hver service kører i sin egen container. Set fra Ubuntu-beholderens perspektiv lytter redis ikke på localhost.

Brug Docker-netværk

For at få dine containere til at kommunikere, skal de være på det samme Docker-netværk. Dette består af tre trin:

  1. Opret et Docker-netværk
  2. Giv dine containere navne
  3. Vedhæft dine containere til det netværk, du har oprettet

Når dette er gjort, kan containerne tale med hinanden ved at bruge deres navne, som om de var værtsnavne.

Der er mere end én måde at flå denne kat på... Jeg vil se på to i dette svar, men der er sikkert et par andre måder at gøre det på, som jeg ikke er bekendt med (som f.eks. at bruge Kubernetes eller Swarm).

Gør det i hånden

Du kan oprette et netværk til denne applikation ved hjælp af docker network kommandoer.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

Når du kører redis-beholderen, skal du sørge for, at den har et navn og er på dette netværk. Du kan eksponere portene eksternt (til macOS), hvis du vil (ved hjælp af -p ), men det er ikke nødvendigt kun for andre containere at tale med redis.

docker run -d -p 6379:6379 --name redis_server --network my_redis_app <IMAGE ID>

Kør nu din Ubuntu-beholder. Du kan også navngive det, hvis du vil, men jeg gider ikke i dette eksempel, fordi denne ikke kører nogen tjenester.

docker run -it --network my_redis_app ubuntu bash

Nu inde fra Ubuntu-beholderen burde du være i stand til at nå redis ved at bruge navnet redis_server , som om det var et DNS-navn.

Gør det med Compose

Jeg har en tendens til at bygge opsætninger som denne ved hjælp af Compose, fordi det er nemmere at skrive det ind i en YAML-fil (IMO). Her er et eksempel på ovenstående, omskrevet i docker-compose.yml form:

version: '2'
services:
  redis:
    image: <IMAGE ID>
    networks:
      - my_redis_app
    ports: 6379:6379
  ubuntu:
    image: ubuntu:latest
    networks:
      - my_redis_app
networks:
  my_redis_app:
    driver: bridge

Med dette på plads kan du køre docker-compose up -d redis og få din redis-tjeneste online ved hjælp af et specifikt Docker-netværk. Compose vil oprette netværket for dig, hvis det ikke allerede eksisterer.

Det giver mindre mening at køre Ubuntu-beholderen på den måde... den er selvfølgelig interaktiv. Men jeg går ud fra, at når du har genoptaget, vil du tilføje en form for applikationscontainer og måske en webproxy som nginx... bare læg de andre under services også, og du kan administrere dem alle sammen.

Siden ubuntu er interaktiv, kan du køre den interaktivt:

# without -d, container is run interactively
docker-compose run ubuntu bash

Og nu i Ubuntu burde du være i stand til at oprette forbindelse til redis ved hjælp af dets navn, som i dette eksempel blot er redis .




  1. Importmetoderne for mongoimport

  2. Mongodb, find om en samling er tom, node.js

  3. Er Redis liste eller sæt pop metode tråd sikker?

  4. Sådan gemmer og henter du en ordbog med redis