Отладка Dockerfile

При написании и отлаживании докерфайлов приходится постоянно пересобирать образы. В промежутках между сборками время улетает впустую и сильно отвлекаешься. Как Вы решаете этот вопрос?


Ответы (1 шт):

Автор решения: hedgehogues

Способ 1

Один из способов оптимизировать этот процесс -- использовать volume. Вы прокидываете volume из контейнера наружу и все изменения автоматически применяются как только Вы их вносите в код и стартуете контейнер. Конечно, после того как Вы откажитесь от volume, могут возникнуть side-эффекты. Но первые этапы написания dockerfile будут сильно ускорены.

Способ 2

Вторая оптимизация -- это написание компоузов, которые не требуют писать огромных строк с параметрами. Это удобнее читать и воспринимать. Пример:

version: '3'
services:
    service:
        VAULT_ENV=LOCAL
        env_file:
            - ../${VAULT_ENV_FILE}
        build:
            context: ..
            dockerfile: "deployments/Dockerfile"
        network_mode: host
        volumes:
          - ./:/app

После того, как основная часть dockerfile отлажена, можем сделать так:

version: '3'
services:
    grader-v2-student-ui:
        VAULT_ENV=LOCAL
        env_file:
            - ../${VAULT_ENV_FILE}
        build:
            context: ..
            dockerfile: "deployments/Dockerfile"
        network_mode: host

Способ 3

Не стоит забывать ещё про один инструмент. После того, как Вы собрали контейнер, в него можно зайти:

docker exec -it <docker-container-id> bash

Внутри можно увидеть Ваш проект и получить немного дополнительной информации

Способ 4

Просмотр логов

docker logs <container-id>

Данный способ хорошо работает в связке со способом 1.

Способ 5 (абстрактный)

Классический подход с локализацией ошибки. Локализуем ошибку и делаем минимальный воспроизводимый пример. При этом, лучше написать сначала простой пример и затем его усложнять до нужного Вам примера. В противном случае, Вы можете застопориться на каком-нибудь не очевидном моменте и долго на нём сидеть.

→ Ссылка