DockerFile z Rabbitmq

0

Cześć wszystkim!
Nie mogę poradzić sobie z napisaniem Dockerfile. Case brzmi tak: Muszę postawić dwa kontenery python, które skomunikuję za pomocą RabbitMQ.
Mam parę pytań:

  1. W pierwszej linii FROM, powinienem się odwołać do obrazu pythona czy samego rabbita?
  2. Jak poprawnie umieścić Rabbita w moim obrazie?

Podrzucam "kod", którym starałem się to zrobić, domyślam się, że cały jest do przerobienia.

FROM python:3

COPY emit_log.py .
CMD ["docker", "pull", "rabbitmq"]
CMD  ["docker", "run", "-it", "--rm", "--name", "rabbitmq", "-p", "5672:5672", "-p", "15672:15672", "rabbitmq:3-management"]
CMD ["python3", "emit_log.py"]

Z góry dzięki za wszystkie odpowiedzi!

2

Docker powstał w myśl 1 kontener = 1 aplikacja - w Twojej sytuacji mógłbyś np. stworzyć docker-compose.yml z konfiguracją trzech osobnych kontenerów.

0

Zasadniczo jak napisał przedmówca:

  • zrób sobie kontener rabbita, na którym stoi serwer i który ma otwarty port dla rabbita
  • zrób sobie kontenery pythona, które mają tą samą sieć i otwarte porty do rabbita
  • docker-compose to przyjemna nakładka na dockera, bo zarządzasz całym tym swoim inwentarzem przy pomocy jednego pliku yml zamiast odpalać docker run w 15 liniach...
1

Coś takiego, raczej nie zadziała ci od strzała, bo pisałem z palca, ale możesz się wzorować.

version: '3.4'
services:
  emiter:
    image: python:3.8-alpine3.11
    command: python costam.py
    depends_on:
      - broker

  receiver:
    image: python:3.8-alpine3.11
    command: python costam.py
    depends_on:
      - emiter
      - broker

  broker:
    image: rabbitmq:3.7-alpine
    ports:
      - "5672:5672"
    environment:
      - RABBITMQ_DEFAULT_VHOST=yourvhostktoregouzyjeszdopolaczeniazrabbitem

domyślne wjazdy do rabbita masz w dokumentacji na docker hubie

Pewnie możesz chcieć podmontować sobie swój folder z kodem, więc do composa dorzucamy ( do emitera i receivera)

    volumes:
      - .:/app/

ta sama wysokość wcięcia co image czy command

1

@grski: Dodałbym jeszcze małą uwagę odnośnie depends_on, który zapewnia tylko że dany obraz (serwis) wstał ale nie koniecznie musi być już gotowy do pracy: https://docs.docker.com/compose/startup-order/

Dlatego warto zainteresować się jeszcze: https://github.com/vishnubob/wait-for-it

1 użytkowników online, w tym zalogowanych: 0, gości: 1