Я изучаю Docker и немного запутался, и я был бы очень признателен за совет.
При создании нового приложения rails. Следуя рекомендациям руководства Docker Быстрый старт: Compose и Rails. Они шаги следующие.
Новая команда рельсов.
docker-compose run --no-deps web rails new . --force -d mysql
Это мой простой Dockerfile:
FROM ruby:3.1.1-alpine3.15
RUN apk update -q
RUN apk add bash yarn git build-base nodejs mariadb-dev tzdata
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
COPY package.json /app/package.json
COPY yarn.lock /app/yarn.lock
RUN gem install bundler
RUN gem update bundler
RUN bundle install
COPY entrypoint.sh /usr/bin
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
Это мой docker-compose.yml:
version: "3.9"
services:
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
ports:
- "3000:3000"
Как видите, в моем файле docker-compose.yml указан только один сервис, потому что мне не нужны никакие другие сервисы или контейнеры.
Все работает нормально, когда я использую команду docker-compose run rails new... она создает новое приложение rails и сохраняет файлы в моей локальной исходной папке. Так что я могу открывать и редактировать файлы для разработки приложения. Идеальный.
Но когда я пытаюсь создать новое приложение Rails без использования docker-compose.yml и только с файлом Dockerfile. Сгенерированные файлы не сохраняются в моей локальной исходной папке, а только в контейнере. Я могу только предположить, потому что я вынужден создавать образ перед запуском его в контейнере для создания нового приложения rails.
При использовании без docker-compose.yml. Сначала я должен создать образ.
docker build -t image_name .
Затем я могу запустить контейнер и сгенерировать приложение rails.
docker run image_name rails new . --force -d mysql
Очевидно, что это не сохраняет новые файлы в моей локальной исходной папке.
Как я могу сгенерировать новое приложение Rails только с моим Dockerfile без docker compose и при этом сохранить вновь созданные файлы в моей локальной исходной папке?
Должно быть, я что-то упускаю, но я провел много исследований и не могу найти ответ.
🤔 А знаете ли вы, что...
Ruby on Rails предоставляет множество готовых решений для обработки типичных задач, таких как маршрутизация и работа с базой данных.
В docker-compose.yml у вас есть ключ «volumes», как показано ниже.
volumes:
- .:/app
Но при использовании его в CLI вы пропускаете передачу этих томов.
Вы можете передать эти тома, как в коде ниже.
docker run -d --name=rails --volume /your/workdir:/app image_name
Если вы хотите узнать больше о томах, вы можете узнать здесь.