Najlepszym rozwiązaniem byłoby użycie docker compose. Dzięki temu utworzysz kontener redis, połączysz się z nim, a następnie uruchomisz aplikację node.js. Pierwszą rzeczą byłoby zainstalowanie docker compose szczegółowo opisane tutaj - (https://docs.docker.com/compose/install/).
Po uruchomieniu i uruchomieniu należy utworzyć plik docker-compose.yml w tym samym folderze, co plik docker aplikacji. Powinien zawierać następujące
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Wtedy redis będzie dostępny z Twojej aplikacji node.js, ale zamiast localhost:6379
użyjesz redis:6379
aby uzyskać dostęp do instancji redis.
Aby uruchomić aplikację, uruchom docker-compose up
, w terminalu. Najlepszą praktyką byłoby użycie network
zamiast links
ale to zostało stworzone dla prostoty.
Można to również zrobić w razie potrzeby, mając zarówno redis, jak i node.js na tym samym obrazie, następujący plik Dockerfile powinien działać, oparty na tym, co jest w pytaniu:
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"
Ta druga metoda jest naprawdę złą praktyką i dla uproszczenia używałem jednocześnie zamiast superwizora lub podobnego narzędzia. Sen w CMD ma pozwolić na uruchomienie redis przed faktycznym uruchomieniem aplikacji, należy dostosować go do tego, co najbardziej Ci odpowiada. Mam nadzieję, że to pomoże i że użyjesz pierwszej metody, ponieważ jest to znacznie lepsza praktyka