Как я могу запустить IronWorker с помощью Docker, не платя за частные репозитории Docker и не делая свой код общедоступным?

#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
  

Вот шаги, чтобы запустить это:

  1. Создайте общедоступный репозиторий в Docker

В этом примере имя пользователя Docker — testuser, а имя репозитория Docker — testrepo .

  1. Создайте образ

Выполните следующую команду в терминале Docker. Я добавил тег «0.0.1». Это должно увеличиваться с каждым изменением образа, который передается в Docker.

 docker build -t testuser/testrepo:0.0.1 .
  
  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.

  1. Удалите hello.rb из папки и обновите Dockerfile

ИЗ iron / ruby-2.3: dev
ЗАПУСТИТЬ обновление apk и обновление
apk ЗАПУСТИТЬ gem установить pg —no-ri —no-rdoc
ЗАПУСТИТЬ gem установить json —no-ri —no-rdoc
ЗАПУСТИТЬ apk добавить bash

  1. Перестройте образ

docker build -t testuser / testrepo: 0.0.1 .

  1. Отправьте изображение в Docker

docker push testuser / testrepo: 0.0.1

  1. Зарегистрируйте изображение с помощью Iron (нужен файл iron.json в текущем рабочем каталоге)

железный регистр testuser / testrepo: 0.0.1

  1. Zip-код IronWorker

zip -r hello.zip привет.рб

  1. Загрузите 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