Создание многоконтейнерного образа докера на сервере с помощью docker-compose - PullRequest
0 голосов
/ 01 июня 2018

Я работаю над образом мультисервисного докера, который отлично работает локально, но не может создать его на стороне сервера (вероятно, пробел в знаниях).Один сервис выполняет мою базу данных mysql, в то время как другой является моим основным приложением (каждое со своим собственным Dockerfile, хотя я полагаю, что это дано), оба связаны через docker-compose и используют зависимость_ для запуска программы установки mysql и обеспечения ее работоспособности..

Я успешно создал и запустил образ локально и вытащил его на сервер после отправки в концентратор докеров, но не могу найти никаких советов о том, как правильно использовать мой docker-compose.ymlфайл в производстве.Мне потребовалось некоторое время, чтобы понять, что мне нужно загрузить файл docker-compose в производство отдельно, но теперь я озадачен настройками «сборки».

Локально, я использую docker-Файл compose.yml, похожий на приведенный ниже, с настройкой build, указывающей на папку db_config в каталоге проекта.

version: '2.1'
services:
    mysql:
        image: username/my_image:latest
        container_name: db
        build: ./db_config
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
            MYSQL_USER: "dbuser"
            MYSQL_PASSWORD: "12345"
            MYSQL_DATABASE: "my_db"
        healthcheck:
            test: "exit 0"

    my_app:
        container_name: app
        build: .
        depends_on:
            mysql:
                condition: service_healthy
        entrypoint:
            - /usr/local/bin/docker-entrypoint.sh
        ports:
            - "80:8080"

Попытка сборки (docker-compose build) с использованием этого файла в рабочей среде приводит к следующей ошибке (имена изменены):

путь сборки / home / user / my_app / db_configлибо не существует, либо недоступен, либо не является допустимым URL.

На что должен указывать «build» в производственной среде?Должен ли я как-то указывать на Dockerfile в самом образе Docker, или эта конфигурация должна полностью отличаться в рабочей среде?Нужно ли менять другие конфигурации?

1 Ответ

0 голосов
/ 01 июня 2018

Дело в том, что вы не должны создавать образ докера для производства.

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

Чтобы сохранить образ, вы можете использовать, например, реестр Docker.

Что касается ваших ошибок, они происходят, потому что на компьютере, на котором вы выполняете сборку docker-compose, у вас нет файла db_config.Аналогично необходимости загружать compose в производство, чтобы создать образ в рабочей среде, вам необходимо предоставить все необходимые файлы проекта, необходимые для сборки.

Если вы хотите, чтобы он был "чистым"«тогда правильный способ - это создать образ в среде сборки, перенести образ в реестр, а затем в производственную среду просто выполнить развертывание.

И да, для производственного развертывания необходим файл compose.Однако вам не нужно делать сборку.Если реестр докеров доступен, вы должны сначала остановить работающие контейнеры, а затем запустить их снова.

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

...