Makefile и Docker прикрепить.Как выполнить из задачи другого Makefile? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть Makefile:

attach:
    docker run --rm \
        -it \
        alpine:3.8

run-inside: attach
    uname -a

Я могу запустить make attach и набрать uname -a руками

uname -a, просто для примера

Я хочу, чтобы run-inside запустил контейнер, подключился к нему, выполнил команду и остановил контейнер.Можно ли сделать это?Мне это нужно, потому что я настраиваю CI для своего проекта, и мне нужно знать, как работать без копирования / вставки

Я знаю, что могу сделать это:

run:
    docker run --rm \
        alpine:3.8 uname -a

Но этокак я дублирую команду Docker

1 Ответ

0 голосов
/ 27 декабря 2018

Возможное решение состоит в использовании опции -d (--detach) docker run вместе с командой docker exec .

Например,:

Makefile

IMAGE ?= alpine:3.8
NAME ?= foobar
RUN = docker exec $(NAME)

all: start run-inside stop

start:
    docker run -d -i --name=$(NAME) --rm --init $(IMAGE)

run-inside:
    $(RUN) cat /etc/os-release
    $(RUN) uname -a

stop:
    docker stop $(NAME)

.PHONY: all start run-inside stop

Относительно параметров, переданных в docker run:

  • -d предписывает Docker Engine запуститьконтейнер в фоновом режиме;
  • -i необходим для поддержания работы контейнера (в то время как -t здесь бесполезен);
  • --name указывает имя контейнера;
  • --rm запускает удаление контейнера, как только он остановлен (здесь, с docker stop);
  • --init является необязательным (это особенно удобно, когда точка входа являетсяоболочки, так что сигнал, отправленный docker stop, может быть немедленно обработан процессом tini , запущенным как PID 1).

В стороне, опираясь на Makefileможет быть ненужным при настройке DoI на основе Docker: он может работать хорошо, но вместо этого вы можете:

  • встроить docker команд на карту непосредственно в .travis.yml или .gitlab-ci.yml или около того;
  • используйте файл docker-compose.yml и заранее установите docker-compose.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...