Комментарии 11
Просьба, в начале или конце давать список с предыдущими частями, спасибо.
0
Как выглядит итоговый докер контейнер, его можно просто скопировать в другое место?
Что делать, если внутри контейнера нужно собрать программу из исходников?
Что делать, если внутри контейнера нужно собрать программу из исходников?
0
Как выглядит итоговый докер контейнер, его можно просто скопировать в другое место?
Если не вдаваться в подробности — как набор файлов в изолированной файловой системе. Скопировать можно либо используя команды docker export/import, либо, что делается чаще докер просто push`ится в хранилище контейнеров (тот же Gitlab имеет такое), и после pull`ится из него на целевой хост.
Что делать, если внутри контейнера нужно собрать программу из исходников?
Установить внутрь docker контейнера компилятор и зависимости и собрать программу.
Обычно для сборки программы и для запуска используются разные контейнеры. То есть один контейнер собирает программу из исходников, собирает пакет (deb/rpm/etc) и отправляет этот пакет в репозиторий. Из этого репозитория пакет устанавливается в другой docker контейнер (где нет компилятора и всего остального, что нужно только для сборки) и уже этот контейнер идет в тестинг/стейдж/прод
0
RUN apk update && apk upgrade && apk add bash
Кстати нюанс писать несколько команд через && крайне полезен. Он означает что вместо трех отдельных слоев будет создан лишь один, что заметно уменьшает и размер образа и скорость его разворачивания.
В некоторых случаях (тестирование, сборка), время на разворачивание образа может быть сравнимо со временем его использования, и «смержив» лишние слои в один, вы можете добиться увеличения производительности в разы.
+1
НЛО прилетело и опубликовало эту надпись здесь
Слои в итоговом образе создают только инструкции FROM, RUN, COPY, и ADD
Хочу поправить: каждая инструкция создает слой, другой вопрос, что размер 0 байт. Но, технически это слой со своим идентификатором.
docker history IMAGE_NAME
IMAGE CREATED CREATED BY SIZE COMMENT
b260ce07d157 40 hours ago /bin/sh -c #(nop) ENTRYPOINT ["/bin/bash" "… 0B
bc023bba0660 40 hours ago /bin/sh -c #(nop) EXPOSE 80 0B
00379739f45e 40 hours ago /bin/sh -c #(nop) COPY file:d02b4d459390bf78… 134B
+1
Прежде чем комментировать, конечно, полезно внимательно почитать документацию.
:)
Only the instructions RUN, COPY, ADD create layers. Other instructions create temporary intermediate images, and do not increase the size of the build.
:)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Изучаем Docker, часть 3: файлы Dockerfile