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

У меня есть несколько приложений Ruby, которые запускаются в cron с помощью IronWorker. Я новичок в Docker и хочу протестировать приложение локально, прежде чем отправлять код в Iron. Как я могу это сделать?

1 ответ

Решение

Ваш код может храниться в частном порядке на Iron.io, а изображение на Docker может содержать только язык программирования и библиотеки и быть общедоступным. Я собрал пример "Привет, мир", показывающий, как это можно сделать. Я использую Alpine linux и язык программирования Ruby вместе с пакетами dev от 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 && 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 Terminal. Я добавил тег "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 && 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

Теперь, когда мы знаем, что код будет корректно работать с изображением, мы можем обновить файл Docker и передать изображение в Docker, а код - в Iron.

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

ОТ железа / ruby-2.3: dev
RUN apk update && apk upgrade
RUN gem install pg --no-ri --no-rdoc
RUN gem install json --no-ri --no-rdoc
RUN apk добавить bash

  1. Восстановить образ

Docker build -t testuser/testrepo:0.0.1 .

  1. Нажмите на изображение в Docker

тестер пользователя / testrepo: 0.0.1

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

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

  1. Почтовый индекс IronWorker

zip -r hello.zip hello.rb

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

Железный рабочий загрузить --zip hello.zip - имя Привет testuser/testrepo:0.0.1 ruby ​​hello.rb

Готово! Теперь вы можете запланировать IronWorker через HUD или через их API.

Другие вопросы по тегам