Comments 12
Просьба, в начале или конце давать список с предыдущими частями, спасибо.
Как выглядит итоговый докер контейнер, его можно просто скопировать в другое место?
Что делать, если внутри контейнера нужно собрать программу из исходников?
Что делать, если внутри контейнера нужно собрать программу из исходников?
Как выглядит итоговый докер контейнер, его можно просто скопировать в другое место?
Если не вдаваться в подробности — как набор файлов в изолированной файловой системе. Скопировать можно либо используя команды docker export/import, либо, что делается чаще докер просто push`ится в хранилище контейнеров (тот же Gitlab имеет такое), и после pull`ится из него на целевой хост.
Что делать, если внутри контейнера нужно собрать программу из исходников?
Установить внутрь docker контейнера компилятор и зависимости и собрать программу.
Обычно для сборки программы и для запуска используются разные контейнеры. То есть один контейнер собирает программу из исходников, собирает пакет (deb/rpm/etc) и отправляет этот пакет в репозиторий. Из этого репозитория пакет устанавливается в другой docker контейнер (где нет компилятора и всего остального, что нужно только для сборки) и уже этот контейнер идет в тестинг/стейдж/прод
RUN apk update && apk upgrade && apk add bash
Кстати нюанс писать несколько команд через && крайне полезен. Он означает что вместо трех отдельных слоев будет создан лишь один, что заметно уменьшает и размер образа и скорость его разворачивания.
В некоторых случаях (тестирование, сборка), время на разворачивание образа может быть сравнимо со временем его использования, и «смержив» лишние слои в один, вы можете добиться увеличения производительности в разы.
UFO just landed and posted this here
Слои в итоговом образе создают только инструкции 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
Прежде чем комментировать, конечно, полезно внимательно почитать документацию.
:)
Only the instructions RUN, COPY, ADD create layers. Other instructions create temporary intermediate images, and do not increase the size of the build.
:)
Я из 2024 года. Если бы за эту статью ещё можно было голосовать, поставил бы лайк.
Sign up to leave a comment.
Изучаем Docker, часть 3: файлы Dockerfile