Запуск фонового процесса в контейнере за один шаг в сборке Docker - PullRequest
0 голосов
/ 07 мая 2018

Я бы хотел запустить интеграционные тесты приложения во время docker build. Эти тесты требуют наличия сервера Redis.

Как я могу запустить redis-server и поддерживать его в фоновом режиме во время шага интеграционного теста, т.е. gradle build?

Вот суть моей Dockerfile:

FROM ubuntu:16.04

# apt-get install stuff
# ...
# install gradle
# build and install redis

WORKDIR /app
ADD . /app

# TODO: start redis-server

# run unit tests / integration tests of app
RUN /opt/gradle/gradle-4.6/bin/gradle build --info

# TODO: stop redis-server

# build app
RUN ./gradlew assemble

# start app with
# docker run
CMD ["java", "-jar", "my_app.jar"]

1 Ответ

0 голосов
/ 07 мая 2018

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' * '

Однако для полноты картины я все же хочу поделиться решением оригинального вопроса:

RUN nohup bash -c "redis-server &" && sleep 4 && /opt/gradle/gradle-4.6/bin/gradle build --info

Это работает redis-server только для этого одного слоя. sleep 4 как раз там, чтобы дать Redis достаточно времени для запуска.

Итак, Dockerfile выглядит следующим образом:

FROM ubuntu:16.04

# apt-get install stuff
# ...
# install gradle
# build and install redis

WORKDIR /app
ADD . /app

# run unit tests / integration tests of app
RUN nohup bash -c "redis-server &" && sleep 4 && /opt/gradle/gradle-4.6/bin/gradle build --info

# TODO: uninstall redis

# build app
RUN ./gradlew assemble

# start app with
# docker run
CMD ["java", "-jar", "my_app.jar"]
...