Redis
 sql >> база данни >  >> NoSQL >> Redis

Комуникация между два Docker контейнера на macOS 10.12

Всеки контейнер има свой собствен локален хост

Всяка услуга работи в собствен контейнер. От гледна точка на контейнера Ubuntu, redis не слуша на localhost.

Използвайте Docker мрежи

За да накарате вашите контейнери да комуникират, те трябва да са в една и съща мрежа на Docker. Това се състои от три стъпки:

  1. Създайте мрежа на Docker
  2. Дайте имената на контейнерите си
  3. Прикачете вашите контейнери към мрежата, която сте създали

След това контейнерите могат да говорят помежду си, като използват имената си, сякаш са имена на хостове.

Има повече от един начин да одирате тази котка... Ще разгледам два в този отговор, но вероятно има няколко други начина да го направя, с които не съм запознат (като използването на Kubernetes или Swarm, например).

Правете го на ръка

Можете да създадете мрежа за това приложение с помощта на docker network команди.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

Когато стартирате контейнера redis, уверете се, че той има име и е в тази мрежа. Можете да изложите портовете външно (в macOS), ако искате (използвайки -p ), но това не е необходимо само за други контейнери, за да разговарят с redis.

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

Сега стартирайте вашия Ubuntu контейнер. Можете също да го наименувате, ако желаете, но няма да се занимавам с този пример, защото този не изпълнява никакви услуги.

docker run -it --network my_redis_app ubuntu bash

Сега от вътрешността на контейнера на Ubuntu трябва да можете да достигнете до redis, използвайки името redis_server , сякаш е DNS име.

Правете го с Compose

Склонен съм да създавам настройки като тази с помощта на Compose, защото е по-лесно да го запиша в YAML файл (IMO). Ето пример за горното, пренаписано във формата docker-compose.yml:

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

С това на място можете да стартирате docker-compose up -d redis и поддържайте услугата си Redis онлайн, като използвате конкретна мрежа на Docker. Compose ще създаде мрежата за вас, ако тя все още не съществува.

Няма смисъл да стартирате контейнера Ubuntu по този начин... той е интерактивен, разбира се. Но предполагам, че след като стартирате redis, ще добавите някакъв контейнер за приложения и може би уеб прокси като nginx... просто поставете другите под services също и можете да ги управлявате заедно.

От ubuntu е интерактивен, можете да го стартирате интерактивно:

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

И сега в Ubuntu трябва да можете да се свържете с redis, като използвате неговото име, което в този пример е просто redis .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Сравнение на производителността при използване на хешове на Redis спрямо много ключове

  2. Laravel :Redis Не може да се направи връзка :[tcp://127.0.0.1:6379]

  3. Предайте препратка към екземпляр на Redis към манипулатор на Gorilla/Mux

  4. Redis няма да извлича данни от кеша

  5. Как може Redis да сортира според два различни сортирани набора?