Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Giao tiếp giữa hai vùng chứa Docker trên macOS 10.12

Mỗi vùng chứa có máy chủ cục bộ riêng của nó

Mỗi dịch vụ chạy trong vùng chứa riêng của nó. Từ quan điểm của vùng chứa Ubuntu, redis không lắng nghe trên localhost.

Sử dụng mạng Docker

Để các vùng chứa của bạn giao tiếp với nhau, chúng phải ở trên cùng một mạng Docker. Điều này bao gồm ba bước:

  1. Tạo mạng Docker
  2. Đặt tên cho vùng chứa của bạn
  3. Đính kèm các vùng chứa của bạn vào mạng bạn đã tạo

Khi điều này được thực hiện, các vùng chứa có thể nói chuyện với nhau bằng cách sử dụng tên của chúng như thể chúng là tên máy chủ.

Có nhiều cách để lột da con mèo này ... Tôi sẽ xem xét hai cách trong câu trả lời này, nhưng có thể có một vài cách khác để làm điều đó mà tôi không quen thuộc (chẳng hạn như sử dụng Kubernetes hoặc Swarm).

Làm bằng tay

Bạn có thể tạo mạng cho ứng dụng này bằng docker network lệnh.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

Khi bạn chạy vùng chứa redis, hãy đảm bảo rằng nó có tên và nằm trên mạng này. Bạn có thể hiển thị các cổng ra bên ngoài (cho macOS) nếu bạn muốn (sử dụng -p ), nhưng điều đó không cần thiết chỉ để các vùng chứa khác nói chuyện với redis.

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

Bây giờ hãy chạy vùng chứa Ubuntu của bạn. Bạn có thể đặt tên cho nó nếu bạn muốn, nhưng tôi sẽ không bận tâm trong ví dụ này vì ví dụ này không chạy bất kỳ dịch vụ nào.

docker run -it --network my_redis_app ubuntu bash

Bây giờ từ bên trong vùng chứa Ubuntu, bạn sẽ có thể truy cập redis bằng tên redis_server , như thể đó là một tên DNS.

Làm điều đó bằng Soạn thư

Tôi có xu hướng xây dựng các thiết lập như thế này bằng cách sử dụng Soạn thư, vì việc ghi nó vào tệp YAML (IMO) dễ dàng hơn. Đây là một ví dụ về điều trên, được viết lại ở dạng docker-compost.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

Với điều này tại chỗ, bạn có thể chạy docker-compose up -d redis và có dịch vụ redis của bạn trực tuyến bằng một mạng Docker cụ thể. Soạn sẽ tạo mạng cho bạn, nếu nó chưa tồn tại.

Sẽ ít hợp lý hơn nếu chạy vùng chứa Ubuntu theo cách đó ... tất nhiên, nó có tính tương tác. Nhưng tôi cho rằng một khi bạn bắt đầu redis, bạn sẽ thêm một số loại vùng chứa ứng dụng và có lẽ một proxy web như nginx ... chỉ cần đặt những cái khác dưới services và bạn có thể quản lý tất cả chúng cùng nhau.

Kể từ ubuntu tương tác, bạn có thể chạy nó một cách tương tác:

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

Và bây giờ trong Ubuntu, bạn có thể kết nối với redis bằng cách sử dụng tên của nó, trong ví dụ này chỉ đơn giản là redis .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jedis Thay đổi ngữ nghĩa của Redis?

  2. Định cấu hình trạng thái phiên Redis trên Azure

  3. sự khác biệt trung bình giữa Nest và các viên ngọc không gian tên redis là gì khi chúng tôi sử dụng redis với rails / ruby

  4. làm thế nào để xử lý phiên hết hạn dựa trên redis?

  5. HSET nếu khóa tồn tại