Docker, лекция 5. Docker OnBuild

Docker, лекция 5. Docker OnBuild

В этом сценарии мы рассмотрим, как можно оптимизировать Dockerfile, используя OnBuild инструкции.

Среда лекции настроена с помощью примера приложения Node.js, однако подходы могут быть применены к любому изображению. Имя компьютера, на котором запущен Docker, называется Docker. Если нужно получить доступ к какой-либо из служб, тогда используйте docker вместо localhost или 0.0.0.0.

Об OnBuild

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

В результате вы можете отложить выполнение, чтобы оно зависело от приложения, которое вы создаете, например, от файла package.json приложения.

Ниже приведен файл Docker Node.js OnBuild. В отличие от сценария предыдущей лекции команды приложения имеют префикс ONBUILD.

FROM node:7
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ONBUILD COPY package.json /usr/src/app/
ONBUILD RUN npm install
ONBUILD COPY . /usr/src/app
CMD [ "npm", "start" ]

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

Пример

Мы имеем всю логику для копирования кода, установки зависимостей и запуска приложения. Для примера добавим ещё один элемент — откроем порт.

Преимущество создания образов OnBuild состоит в том, что наш Dockerfile теперь намного проще и может легко использоваться повторно в нескольких проектах без необходимости повторного выполнения одних и тех же шагов, что сокращает время сборки.

Пример такого dockerfile:

FROM node:7-onbuild
EXPOSE 3000

Сборка и запуск контейнера

Для начала — сборка первого контейнера из базового docker образа.

docker build -t my-nodejs-app .

Теперь выполним команду сборки встроенного образа, который основан на предыдущем:

docker run -d --name my-running-app -p 3000:3000 my-nodejs-app

Сборка первого контейнера заняла около 2 минут при наличии хорошего интернета. Сборка второго контейнера заняла пару секунд.

Как обычно можно проверить доступность сервиса в контейнере командой:

curl http://docker:3000

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *