Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Komunikasi antara dua wadah Docker di macOS 10.12

Setiap wadah memiliki localhost sendiri

Setiap layanan berjalan dalam wadahnya sendiri. Dari perspektif wadah Ubuntu, redis tidak mendengarkan di localhost.

Gunakan jaringan Docker

Agar container Anda dapat berkomunikasi, container tersebut harus berada di jaringan Docker yang sama. Ini terdiri dari tiga langkah:

  1. Buat jaringan Docker
  2. Beri nama wadah Anda
  3. Lampirkan wadah Anda ke jaringan yang Anda buat

Dengan ini dilakukan, wadah dapat berbicara satu sama lain menggunakan nama mereka seolah-olah mereka adalah nama host.

Ada lebih dari satu cara untuk menguliti kucing ini... Saya akan melihat dua dalam jawaban ini, tetapi mungkin ada beberapa cara lain untuk melakukannya yang tidak saya ketahui (seperti menggunakan Kubernetes atau Swarm, misalnya).

Melakukannya dengan tangan

Anda dapat membuat jaringan untuk aplikasi ini menggunakan docker network perintah.

# Show the current list of networks
docker network ls

# Create a network for your app
docker network create my_redis_app

Saat Anda menjalankan penampung redis, pastikan penampung tersebut memiliki nama, dan berada di jaringan ini. Anda dapat mengekspos port secara eksternal (ke macOS) jika Anda mau (menggunakan -p ), tetapi itu tidak perlu hanya untuk wadah lain untuk berbicara dengan redis.

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

Sekarang jalankan wadah Ubuntu Anda. Anda dapat memberi nama juga jika Anda mau, tetapi saya tidak akan repot dalam contoh ini karena yang ini tidak menjalankan layanan apa pun.

docker run -it --network my_redis_app ubuntu bash

Sekarang dari dalam wadah Ubuntu, Anda harus dapat mencapai redis menggunakan nama redis_server , seolah-olah itu adalah nama DNS.

Melakukannya menggunakan Compose

Saya cenderung membuat pengaturan seperti ini menggunakan Compose, karena lebih mudah untuk menulisnya ke dalam file YAML (IMO). Berikut ini contoh di atas, ditulis ulang dalam bentuk 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

Dengan ini, Anda dapat menjalankan docker-compose up -d redis dan buat layanan redis Anda online menggunakan jaringan Docker tertentu. Compose akan membuatkan jaringan untuk Anda, jika belum ada.

Kurang masuk akal untuk menjalankan wadah Ubuntu seperti itu... tentu saja interaktif. Tapi saya berasumsi setelah Anda melakukan redis, Anda akan menambahkan semacam wadah aplikasi, dan mungkin proxy web seperti nginx... taruh saja yang lain di bawah services juga, dan Anda dapat mengelola semuanya bersama-sama.

Sejak ubuntu bersifat interaktif, Anda dapat menjalankannya secara interaktif:

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

Dan sekarang di Ubuntu, Anda seharusnya dapat terhubung ke redis menggunakan namanya, yang dalam contoh ini adalah redis .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DB relasional dalam memori?

  2. .NET Core menyuntikkan layanan singleton di layanan singleton lain

  3. Apa cara paling efisien waktu untuk membuat serial/deserialisasi DataTable ke/dari Redis?

  4. Bagaimana saya bisa mendapatkan nilai dari Redis dan memasukkannya ke dalam variabel di NGiNX?

  5. Apa cara termudah untuk menemukan objek terbesar di Redis?