Ваш пример смешивает два шага: создание образа и запуск образа , который не может быть смешан таким образом (с Dockerfile
).
Создание изображения
A Dockerfile
используется для создания изображения.Давайте возьмем файл докера alpine3.8 в качестве минимального примера
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
Это базовое изображение, оно не основано на другом изображении, оно начинается FROM scratch
.Затем tar-файл копируется и распаковывается, см. ADD , а оболочка установлена в качестве команды запуска, см. CMD .Вы можете построить это с помощью
docker build -t test_image .
, выпущенной из той же папки, где находится Dockerfile
.Вам также понадобится rootfs.tar.xz
в этой папке, скопируйте его из вышеупомянутой альпийской ссылки.
Запуск контейнера
С этого test_image
теперь вы можете порождать контейнер с помощью
docker run -it test_image
Он запустится и даст вам оболочку внутри контейнера.
Docker Compose
Обычно нет необходимости собирать ваш images
снова и снова перед порождениемновый container
.Но если вам действительно нужно, вы можете сделать это с помощью docker-compose
. Docker Compose предназначен для определения и запуска стека служб, состоящего из нескольких контейнеров.Стек определен в файле docker-compose.yml
.
version: '3'
services:
alpine_test:
build: .
build: .
снова заботится о сборке image
перед запуском, но обычно достаточно просто image: <image_name>
и использоватьуже существующее изображение.