Проблема:
Итак, давайте сначала разберемся с проблемой. Всякий раз, когда вы пытаетесь раскрутить приложение, это занимает так много времени. Мне кажется, я хорошо понимаю вашу проблему.
- скачать гем из inte rnet
- установить и раскрутить приложение
Возможные решения:
Это исполнение файлов docker. у нас есть 2 области, которые создают проблемы, и 2 различных решения
Решения:
Загрузка файлов gem локально, помещенных в папку, и в dockerfile скопируйте эти файлы gem внутри затем установите контейнер.
Создайте базовый образ для своего приложения . Создайте базовый образ из Ruby
/ любого другого файла и установите gems
любым из указанных выше способов:
- скопируйте
gems
из локальной папки и затем вставить внутри container
или - Используйте команду
RUN
для установки драгоценных камней. Как хочешь.
Это будет однократный процесс. Благодаря этому вы можете установить базовый образ, который уже содержит ваши драгоценные камни, отнимающие много времени. Теперь внутри вашего приложения dockerfile
(которое отвечает за запуск приложения) вам просто нужно использовать собственный созданный базовый образ вместо Ruby
или Linux
с Docker Hub
Мы будем Посмотрите, как создать свой собственный предварительно настроенный образ. Давайте посмотрим шаг за шагом.
Давайте следовать этому репозиторию GitHub: https://github.com/dupinder/docker-ruby-gem-game
Структура папок (Это поможет понять эту статью )
- application / dockerfile
- gems / скачать и разместить локальные самоцветы
- dockerfile
- Создание базового образа и установка локальных драгоценных камней внутри контейнера docker.
dockerfile
FROM ruby:latest
RUN mkdir -p /gems
COPY /gems/grpc-1.28.0-universal-darwin.gem /gems/grpc-1.28.0-universal-darwin.gem
COPY /gems/sassc-2.2.1.gem /gems/sassc-2.2.1.gem
WORKDIR /gems
RUN gem install --force --local *.gem
Сборка изображение из этого файла Docker с помощью следующей команды
docker build --rm -f "dockerfile" -t ruby-gem-base-image:latest "."
Шаг 1: Я использую базовое изображение как ruby, вы можете использовать все, что хотите, если вы используете Linux, тогда на следующем шаге вам нужно установить Ruby
Шаг 2: Создайте драгоценные камни с именем папки в контейнере.
- Шаг 3 и 4: Скопируйте драгоценные камни, которые нужно установить внутри контейнер из локального каталога в каталог внутри * 1 118 *
container
. - Шаг 5 и 6: Измените рабочий каталог на gems, потому что мы хотим установить место gems внутри этого каталога, поэтому следующая команда is
gem install --force --local *.gem
, которая помогает устанавливать гемы внутри локального каталога.
Таким образом, мы решили сократить время на 50%. Теперь docker никогда не будет загружать драгоценные камни из inte rnet каждый раз и устанавливать.
Теперь давайте проверим, установлены ли какие-либо из наших необходимых драгоценных камней, не наши. Для этого:
Запустить команду docker images
у нас будет наш новый образ сборки ruby-gem-base-image
Запустите контейнер в отдельном режиме, чтобы мы могли exec
позже docker run -it -d ruby-gem-base-image
Выполнить docker ps
, чтобы получить идентификатор контейнера.
- Выполнить
exec
как bash
внутри контейнера docker exec -it d28234630343 bash
. - Запустить
gem list
Будет выведен список установленных драгоценных камней, и вы увидите там необходимые вам камни.
Убедитесь, что ваши драгоценные камни установлены из локального каталога.
Если вы выполните эти шаги, ваша проблема будет решена. Но теперь вам нужно, если до запуска вашего приложения docker в контейнере уже были установлены гемы.
Для этой проблемы мы можем использовать ruby-gem-base-image
образ в качестве нашего ruby
базового образа приложения. Если вы помните репозиторий GitHub, у нас есть каталог приложения, в котором есть один dockerfile
, если мы увидим это.
FROM ruby-gem-base-image:latest
CMD ["gem", "list"]
Это ваш докер-файл, который можно использовать, когда вы хотите развернуть приложение. Используйте prebuilt * 1196. * изображение, которое имеет ваши драгоценные камни. Я пишу задачу gem list
, чтобы проверить, есть ли в этом контейнере драгоценные камни из родительского изображения или нет.
Думаю, это немного понятно. Ваша проблема будет решена с помощью этого.
Если вам нужна другая помощь или вам нужна помощь, чтобы понять этот процесс, пожалуйста, спросите.
--------- Dupinder.