Как я могу запустить 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
Вот шаги, чтобы запустить это:
- Создать публичный репозиторий на Docker
В этом примере имя пользователя Docker - testuser, а имя хранилища Docker - testrepo.
- Построить образ
Выполните следующую команду в Docker Terminal. Я добавил тег "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 && 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.
- Удалите 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
- Восстановить образ
Docker build -t testuser/testrepo:0.0.1 .
- Нажмите на изображение в Docker
тестер пользователя / testrepo: 0.0.1
- Зарегистрируйте изображение с помощью Iron (нужен файл iron.json в текущем рабочем каталоге)
железный регистр testuser / testrepo: 0.0.1
- Почтовый индекс IronWorker
zip -r hello.zip hello.rb
- Загрузить рабочий файл в Iron (нужен файл iron.json в текущем рабочем каталоге)
Железный рабочий загрузить --zip hello.zip - имя Привет testuser/testrepo:0.0.1 ruby hello.rb
Готово! Теперь вы можете запланировать IronWorker через HUD или через их API.