Най-доброто решение би било да използвате docker compose. С това ще създадете Redis контейнер, ще свържете към него, след което ще стартирате вашето приложение node.js. Първото нещо би било да инсталирате docker compose, описан подробно тук - (https://docs.docker.com/compose/install/).
След като го стартирате и стартирате, трябва да създадете docker-compose.yml в същата папка като dockerfile на вашето приложение. Той трябва да съдържа следното
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
След това redis ще бъде достъпен от вашето приложение node.js, но вместо localhost:6379
бихте използвали redis:6379
за достъп до екземпляра на redis.
За да стартирате приложението си, трябва да изпълните docker-compose up
, във вашия терминал. Най-добрата практика би била да използвате network
вместо links
но това е направено за простота.
Това също може да се направи по желание, като има и redis, и node.js на едно и също изображение, следният Dockerfile трябва да работи, той се основава на това, което е във въпроса:
FROM node:carbon
RUN wget http://download.redis.io/redis-stable.tar.gz && \
tar xvzf redis-stable.tar.gz && \
cd redis-stable && \
make && \
mv src/redis-server /usr/bin/ && \
cd .. && \
rm -r redis-stable && \
npm install -g concurrently
EXPOSE 6379
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 3011
EXPOSE 6379
CMD concurrently "/usr/bin/redis-server --bind '0.0.0.0'" "sleep 5s; node /app/src/server.js"
Този втори метод е наистина лоша практика и аз използвах едновременно вместо супервайзор или подобен инструмент за простота. Сънят в CMD е да позволи на redis да стартира преди действителното стартиране на приложението, трябва да го настроите според това, което ви подхожда най-добре. Надявам се това да ви помогне и да използвате първия метод, тъй като е много по-добра практика