2017-02-21 25 views
2

У меня есть приложение Синатры, который прекрасно работает в Докер:Как добавить Redis в контейнер Docker?

# Image 
FROM ruby:2.3.3 
RUN apt-get update && \ 
    apt-get install -y net-tools 


# Install app 
ENV APP_HOME /app 
ENV HOME /root 
RUN mkdir $APP_HOME 
WORKDIR $APP_HOME 
COPY Gemfile* $APP_HOME/ 
RUN bundle install 
COPY . $APP_HOME 


# Configure App 
ENV LANG en_US.UTF-8 
ENV RACK_ENV production 

EXPOSE 9292 


# run the application 
CMD ["bundle", "exec", "rackup"] 

Но когда я пытаюсь добавить Redis:

# Redis 
RUN   apt-get update && apt-get install -y redis-server 
EXPOSE  6379 
CMD   ["/usr/bin/redis-server"] 

Redis не кажется, чтобы начать.

Итак, что можно добавить Redis в Ruby (FROM ruby:2.3.3) Docker container?

ответ

2

Разделить это на два контейнера. Вы можете использовать docker-compose, чтобы вывести их в общую сеть. Например. вот пример докер-compose.yml:

version: '2' 

services: 
    sinatraapp: 
    image: sinatraapp:latest 
    ports: 
    - 9292:9292 
    redis: 
    image: redis:latest 

выше может включать в себя больше возможностей для вашей среды, и принимает ваше имя изображения является sinatraapp: последние, изменить что изображение, которое вы построили. Вам также нужно будет обновить ваше приложение для синатры, чтобы вызвать redis по имени сервера redis вместо localhost. Затем запустите docker-compose up -d, чтобы запустить две службы.

+0

Да, я видел, что это проще и лучше сделать так. –

+0

Для будущих поисковиков ключ 'redis' не будет работать в этом случае. См. Http://stackoverflow.com/a/42380642/336920 –

1

There can be only oneCMD команда в вашем Dockerfile. Кроме того, что вы хотите сделать, это little more complex, чем вы думаете.

P.S. Вышеупомянутые ссылки на stackoverflow.

+0

Кажется, что «путь докеров» должен состоять из 2 контейнеров. Проще и проще. –

+0

Да, это правильный и простой способ, если у вас нет серьезных осложнений. – alkis