Nejlepším řešením by bylo použít docker compose. Pomocí toho byste vytvořili kontejner redis, propojili se s ním a spustili aplikaci node.js. První věcí by bylo nainstalovat docker compose podrobně zde - (https://docs.docker.com/compose/install/).
Jakmile to budete mít v provozu, měli byste vytvořit docker-compose.yml ve stejné složce jako dockerfile vaší aplikace. Měl by obsahovat následující
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Poté bude redis přístupný z vaší aplikace node.js, ale namísto localhost:6379
byste použili redis:6379
pro přístup k instanci redis.
Aplikaci spustíte spuštěním docker-compose up
, ve vašem terminálu. Nejlepším postupem by bylo použít network
místo links
ale toto bylo vytvořeno pro jednoduchost.
To lze také provést podle potřeby, s redis i node.js na stejném obrázku, následující Dockerfile by měl fungovat, je založen na tom, co je v otázce:
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"
Tato druhá metoda je opravdu špatná praxe a pro jednoduchost jsem současně použil místo supervizora nebo podobný nástroj. Spánek v CMD má umožnit spuštění redis před skutečným spuštěním aplikace, měli byste si jej upravit tak, aby vám nejlépe vyhovoval. Doufám, že to pomůže a že použijete první metodu, protože je mnohem lepší