#ruby #docker #iron.io #ironworker
#ruby #docker #iron.io #ironworker
Вопрос:
У меня есть несколько приложений Ruby, которые запускаются в cron с помощью IronWorker. Я новичок в Docker и хочу протестировать приложение локально, прежде чем отправлять код в Iron. Как мне это сделать?
Ответ №1:
Ваш код может храниться конфиденциально на Iron.io а изображение в Docker может включать только язык программирования и библиотеки и быть общедоступным. Я собрал пример «привет, мир», показывающий, как это можно сделать. Я использую Alpine linux и язык программирования Ruby вместе с пакетами разработки Iron. Я также включил драгоценный камень «pg»:
hello.rb
require 'pg'
puts "hello world"
Gemfile
source 'https://rubygems.org'
gem 'pg'
Dockerfile
FROM iron/ruby-2.3:dev
RUN apk update amp;amp; apk upgrade
RUN gem install pg --no-ri --no-rdoc
COPY hello.rb /
RUN apk add bash
Вот шаги, чтобы запустить это:
- Создайте общедоступный репозиторий в Docker
В этом примере имя пользователя Docker — testuser, а имя репозитория Docker — testrepo .
- Создайте образ
Выполните следующую команду в терминале Docker. Я добавил тег «0.0.1». Это должно увеличиваться с каждым изменением образа, который передается в Docker.
docker build -t testuser/testrepo:0.0.1 .
- Тестовое изображение
Поскольку в Dockerfile не было строки ENTRYPOINT [«ruby», «hello.rb»], любая команда терминала может быть включена в команду «docker run». Чтобы перейти к изображению с помощью приглашения bash, вы должны выполнить:
docker run -it testuser/testrepo:0.0.1 /bin/bash
Оказавшись внутри bash, вы можете посмотреть, можно ли выполнить код:
ruby hello.rb
В этом примере я получил следующую ошибку:
`require': cannot load such file -- json (LoadError)
Чтобы исправить это, обновите файл Dockerfile для установки json, а затем повторно протестируйте образ. Вот обновленный файл Dockerfile:
FROM iron/ruby-2.3:dev
RUN apk update amp;amp; apk upgrade
RUN gem install pg --no-ri --no-rdoc
RUN gem install json --no-ri --no-rdoc
COPY hello.rb /
RUN apk add bash
Теперь, когда мы знаем, что код будет корректно выполняться с изображением, мы можем обновить Dockerfile и отправить изображение в Docker, а код — в Iron.
- Удалите hello.rb из папки и обновите Dockerfile
ИЗ iron / ruby-2.3: dev
ЗАПУСТИТЬ обновление apk и обновление
apk ЗАПУСТИТЬ gem установить pg —no-ri —no-rdoc
ЗАПУСТИТЬ gem установить json —no-ri —no-rdoc
ЗАПУСТИТЬ apk добавить bash
- Перестройте образ
docker build -t testuser / testrepo: 0.0.1 .
- Отправьте изображение в Docker
docker push testuser / testrepo: 0.0.1
- Зарегистрируйте изображение с помощью Iron (нужен файл iron.json в текущем рабочем каталоге)
железный регистр testuser / testrepo: 0.0.1
- Zip-код IronWorker
zip -r hello.zip привет.рб
- Загрузите worker в Iron (нужен файл iron.json в текущем рабочем каталоге)
загрузка iron worker —zip hello.zip —имя привет testuser/testrepo:0.0.1 ruby hello.rb
Готово! Теперь вы можете запланировать IronWorker через HUD или через их API.
Комментарии:
1. Обновление до ruby-2.3 для учета зависимости от Json