Skip to content

Latest commit

 

History

History
91 lines (59 loc) · 7.02 KB

File metadata and controls

91 lines (59 loc) · 7.02 KB

Создание базового изображения

Источник: Создание базового изображения

Большинство Dockerfiles начинаются с родительского образа. Если вам необходимо полностью контролировать содержимое вашего изображения, вам может потребоваться создать базовое изображение. Вот разница:

  • Родительское изображение - это изображение, на котором основано ваше изображение. Это относится к содержанию директивы FROM в Dockerfile. Каждое последующее объявление в Dockerfile изменяет этот родительский образ. Большинство файлов Docker начинаются с родительского изображения, а не с базового изображения. Однако термины иногда используются взаимозаменяемо.

  • Базовое изображение либо не имеет строки FROM в своем Dockerfile, либо имеет FROM scratch.

В этом разделе показано несколько способов создания базового изображения. Конкретный процесс будет сильно зависеть от дистрибутива Linux, который вы хотите упаковать. У нас есть несколько примеров ниже, и вам предлагается отправлять запросы на добавление новых.

Создать полное изображение, используя tar

В общем, начните с работающей машины, на которой выполняется дистрибутив, который вы хотели бы упаковать как родительский образ, хотя это не требуется для некоторых инструментов, таких как Debian Debootstrap, который вы также можете использовать для создания образов Ubuntu.

Создать родительский образ Ubuntu очень просто:

$ sudo debootstrap xenial xenial > /dev/null
$ sudo tar -C xenial -c . | docker import - xenial

a29c15f1bf7a

$ docker run xenial cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"

Еще несколько примеров сценариев для создания родительских изображений в Docker GitHub Repo:

Создать простое родительское изображение с помощью scratch

Вы можете использовать зарезервированное минимальное изображение Docker scratch, в качестве отправной точки для построения контейнеров. Использование «scratch» «image» сигнализирует процессу сборки, что следующая команда в Dockerfile должна быть первым слоем файловой системы в вашем изображении.

Пока в хранилище Docker на концентраторе появляется scratch, вы не можете вытащить его, запустить или пометить любое изображение с именем scratch. Вместо этого вы можете обратиться к нему в вашем Dockerfile. Например, чтобы создать минимальный контейнер, используя scratch:

FROM scratch
ADD hello /
CMD ["/hello"]

Предполагая, что вы создали исполняемый пример «hello», следуя инструкциям на https://github.com/docker-library/hello-world/, и вы скомпилировали его с флагом -static, вы можете создать этот образ Docker с помощью команды docker build:

docker build --tag hello .

Не забывайте символ . в конце, который устанавливает контекст сборки для текущего каталога.

Note : Because Docker Desktop for Mac and Docker Desktop for Windows use a Linux VM, you need a Linux binary, rather than a Mac or Windows binary. You can use a Docker container to build it:

$ docker run --rm -it -v $PWD:/build ubuntu:16.04

container# apt-get update && apt-get install build-essential
container# cd /build
container# gcc -o hello -static -nostartfiles hello.c

Чтобы запустить новый образ, используйте команду docker run:

docker run --rm hello

В этом примере создается изображение hello-world, используемое в руководствах. Если вы хотите проверить это, вы можете клонировать репозиторий.

Больше ресурсов

Есть много других доступных ресурсов, которые помогут вам написать свой Dockerfile.


docker Dockerfile