Andrew Rutter
Andrew Rutter

Reputation: 1297

How to configure dns entries for Docker Compose

I am setting up a Spring application to run using compose. The application needs to establish a connection to ActiveMQ either running locally for developers or to existing instances for staging/production.

I setup the following which is working great for local dev:

amq:
    image: rmohr/activemq:latest
    ports:
      - "61616:61616"
      - "8161:8161"
legacy-bridge:
    image:  myco/myservice
    links:
      - amq

and in the application configuration I am declaring the AMQ connection as

broker-url=tcp://amq:61616

Running docker-compose up is working great, activeMQ is fired up locally and my application constiner starts and connects to it.

Now I need to set this up for staging/production where the ActiveMQ instances are running on existing hardware within the infrastructure. My thoughts are to either use spring profiles to handle a different configurations in which case the application configuration entry for 'broker-url=tcp://amq:61616' would become something like broker-url=tcp://some.host.here:61616 or find some way to create a dns entry within my production docker-compose.yml which will point an amq dns entry to the associated staging or production queues.

What is the best approach here and if it is DNS, how to I set that up in compose?

Thanks!

Upvotes: 7

Views: 22348

Answers (1)

helmbert
helmbert

Reputation: 37994

Using the extra_hosts flag

First thing that comes to mind is using Compose's extra_hosts flag:

legacy-bridge:
  image:  myco/myservice
  extra_hosts:
    - "amq:1.2.3.4"

This will not create a DNS record, but an entry in the container's /etc/hosts file, effectively allowing you to continue using tcp://amq:61616 as your broker URL in your application.

Using an ambassador container

If you're not content with directly specifying the production broker's IP address and would like to leverage existing DNS records, you can use the ambassador pattern:

amq-ambassador:
  image: svendowideit/ambassador
  command: ["your-amq-dns-name", "61616"]
  ports:
    - 61616
legacy-bridge:
  image:  myco/myservice
  links:
    - "amq-ambassador:amq"

Upvotes: 12

Related Questions