Вам нужно начать все сначала. Docker также не помнит команды, которые вы запускали внутри контейнера, поэтому у него нет способа восстановить Dockerfile. В любом случае, запуск docker build
всегда будет начинаться с чистой среды, поэтому полезно создать свой Dockerfile без нескольких ручных установок.
Для большинства языков вы, вероятно, можете легко найти образец Dockerfile, просто посмотрев для одного. Большинство из них - довольно обобщенная форма c: запустите FROM
соответствующий базовый образ, установите зависимости ОС, установите зависимости библиотеки, COPY
запустите приложение, соберите его и установите метаданные времени выполнения, например CMD
. Возможно, вы сможете использовать один немодифицированный для популярных платформ, поскольку немного необычно упоминать конкретные c файлы, отличные от того, в котором перечислены ваши зависимости (Node's package.json
, Python s requirements.txt
, ... ).
Вы также можете довольно легко создать Dockerfile вручную. Ваше секретное оружие здесь - Docker кэширование слоя: если вы перезапустите docker build
и ничего не изменилось вплоть до текущей строки, Docker пропустит ее и будет использовать результат из последней сборки. Вы можете довольно легко docker system prune
избавиться от лишних изображений, которые создавались в процессе сборки. Таким образом, более инкрементный процесс может выглядеть следующим образом:
- Запустить
FROM
соответствующий базовый образ - Если вы хотите выполнить какую-либо команду, добавьте строку
RUN
и перезапустите docker build
; не docker exec
и не пытайтесь изменить вещи на месте - Если это пошло не так очевидным образом, измените строку
RUN
и повторите команду docker build
- Если все пойдет не так неочевидным способом добавьте строки «debugging printf»
RUN ls -lrt
; или docker build
распечатывает 12-ди git шестнадцатеричные идентификаторы изображений по мере их продвижения, поэтому docker run --rm -it 0123456789ab /bin/sh
, чтобы заставить оболочку копаться вокруг результата данного шага - Когда вы закончите, подтвердите результирующий
Dockerfile
для управления исходным кодом
Это, вероятно, очень похоже на процесс, который вы уже сделали, за исключением того, что вместо docker exec
серии команд вы записываете их в Dockerfile
и построение изображений.