Сделать изображение докера в качестве основы для другого изображения - PullRequest
0 голосов
/ 25 марта 2019

Теперь я создал простой GET API для доступа к этой базе данных: https://github.com/ghusta/docker-postgres-world-db

Этот API-интерфейс будет получать код страны и получать полную запись о стране этой страны из базы данных.

Структура состоит в том, что API находится в отдельном образе докера, а база данных - в другом.

Так что, как только образ API пытается запуститься, мне нужно, чтобы он запустил образ базы данных раньше, а затем запустил сам себя на образе базы данных.

Так как это сделать?

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Наиболее вероятным решением было бы использование docker compose вместе со сторонним скриптом.

Например, ваш файл docker compose может выглядеть так:

services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres 

Где ./wait-for-it.sh - этосторонний скрипт, который вы можете получить из

https://github.com/vishnubob/wait-for-it

Вы также можете использовать этот скрипт из

https://github.com/Eficode/wait-for

Я быРекомендую настроить скрипт в соответствии с вашими потребностями, если вы хотите (я сделал это).

PS:

Проблема ожидания готовности базы данных (например), действительно простоподмножество гораздо более крупной проблемы распределенных систем.На производстве ваша база данных может стать недоступной или перенести хосты в любое время.Ваше приложение должно быть устойчивым к таким типам сбоев.

Чтобы справиться с этим, спроектируйте свое приложение, чтобы попытаться восстановить соединение с базой данных после сбоя.Если приложение повторяет соединение, оно может в конечном итоге соединиться с базой данных.

Лучшее решение - выполнить эту проверку в коде приложения как при запуске, так и в случае потери соединения по любой причине

2 голосов
/ 25 марта 2019

Вы можете использовать Docker Compose, в частности директиву depends_on.Это заставит Docker запустить все зависимости перед запуском изображения.

К сожалению, нет способа заставить его дождаться появления зависимости перед запуском каких-либо зависимостей.Вам придется управлять этим самостоятельно с помощью сценария ожидания или подобного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...