Создать DockerFile из репозитория - PullRequest
0 голосов
/ 14 февраля 2020

Я не знаю, возможно ли создать DockerFile из существующего частного репозитория. Я создал контейнер и установил сконфигурированный сервер (я не помню все команды), поэтому теперь я хочу, чтобы он синхронизировался с моей учетной записью GitHub, поэтому всякий раз, когда я пу sh в ветке, он также обновляет изменения в изображении. .
Для автоматических c сборок написано, что мне нужен DockerFile, но я его никогда не создавал. Есть ли возможность автоматического создания файла Docker из существующего изображения / контейнера. Использование команды docker history не очень помогает, потому что я выполнил настройки сервера, используя docker exe c.
Возможно ли это?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Вам нужно начать все сначала. 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 и построение изображений.

0 голосов
/ 14 февраля 2020

Я не уверен, что получаю точный вопрос, но вот пример для многоступенчатой ​​docker сборки (сборка сама по себе dockerized) + этап временной зависимости (улучшенная очистка слоя) для примера машинописного текста, основанного на существующих node.js картинки.

FROM node:12 AS build        # this could be ANY base image you want.
WORKDIR /app
COPY package*.json .npmrc ./
RUN npm i
COPY . .
RUN npm run build

FROM node:12 AS deps
WORKDIR /app
COPY .npmrc .
COPY package*.json ./
RUN npm install --only=production

FROM  node:12-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY --from=deps /app/node_modules/ ./node_modules/
COPY --from=build /app/package.json .
COPY --from=build /app/build/src/ ./
COPY --from=build /app/build/config/ ./config/
CMD [ "node", "app.js" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...